1 #ifndef __TLSWRAP_H__ 2 #define __TLSWRAP_H__ 3 4 #include "conf.h" 5 6 //#include <netdb.h> 7 #include <openssl/ssl.h> 8 #include <openssl/rand.h> 9 #include <openssl/err.h> 10 11 #define U2S_SIZE 4096 /* Buffered data going from user to server */ 12 #define S2U_SIZE 4096 /* Buffered data going from server to user */ 13 #define BUF_SIZE 4096 /* Input from user to program */ 14 15 16 #if !defined __CYGWIN__ && !defined WIN32 17 #define DBUF_SIZE 8192 /* Data buffer */ 18 #else 19 #define DBUF_SIZE 4096 //16384 20 #endif 21 22 #ifndef NI_MAXHOST 23 #define NI_MAXHOST 1025 24 #endif 25 26 enum { CONN_NO, 27 CONN_NICK, 28 CONN_USER, 29 CONN_PASS, 30 CONN_CMD, 31 CONN_DNS, 32 CONN_IN_PROG, 33 CONN_YES, 34 35 /* data only */ 36 CONN_DATA_LISTEN, 37 CONN_DATA_TLS, 38 CONN_DATA_OK 39 }; 40 41 enum { AUTH_NO, 42 AUTH_YES }; 43 44 enum { DATA_UP, 45 DATA_DOWN, 46 DATA_PORT}; 47 48 enum { TLS_NONE, 49 TLS_READ, 50 TLS_WRITE }; 51 52 enum { CLOSE_NONE, 53 CLOSE_READ, 54 CLOSE_WRITE }; 55 56 enum { SERV_NONE, 57 SERV_CONN, /* Connected to server */ 58 SERV_AUTH, /* Sent AUTH TLS to server */ 59 SERV_TLS, /* TLS negotiation in progress */ 60 SERV_TLS_OK, 61 SERV_PBSZ, 62 SERV_PROT, 63 SERV_FLOW }; 64 65 #define TLS_DATA 1 66 #define TLS_CTRL 2 67 68 struct dns_msg{ /* Stucture to communicate with the DNS child */ 69 int ud; /* Index of iud structure doing this request */ 70 char port[6]; /* Just convenient */ 71 char hostname[NI_MAXHOST]; /* Use for both request and reply */ 72 }; 73 74 struct user_data { 75 int user_fd; 76 int user_data_fd; 77 int serv_fd; 78 int serv_data_fd; 79 char serv_host[NI_MAXHOST]; 80 char serv_port[6]; 81 char serv_data_host[NI_MAXHOST]; /* Remote host from PASV */ 82 char serv_data_port[6]; 83 struct dns_msg serv_dns; 84 char local_data_host[NI_MAXHOST]; /* PASV */ 85 char local_data_port[6]; 86 char u2s_buf[U2S_SIZE]; /* from user to server */ 87 char s2u_buf[S2U_SIZE]; /* from server to user */ 88 char *u2s_i; /* user to server, input ptr */ 89 char *u2s_o; /* user to server, output ptr */ 90 char *s2u_i; /* server to user, input ptr */ 91 char *s2u_o; /* server to user, output ptr */ 92 char *user_ptr, user_input[BUF_SIZE]; /* Not really a string */ 93 char *serv_ptr, serv_input[BUF_SIZE]; 94 char dc2s_buf[DBUF_SIZE]; /* Data - Client to Server */ 95 char ds2c_buf[DBUF_SIZE]; /* Data - Server to Client */ 96 char *dc2s_i; 97 char *dc2s_o; 98 char *ds2c_i; 99 char *ds2c_o; 100 unsigned int user_read_cnt; 101 unsigned int serv_read_cnt; 102 char prot; /* PROT C or PROT P */ 103 int connected; 104 int data_connected; 105 int serv_data_close; 106 int user_data_close; 107 int data_direction; 108 int authenticated; 109 int serv_status; 110 int tls_status; 111 SSL *ssl_ctrl; 112 SSL *ssl_data; 113 int ssl_ctrl_fd_mode; /* the RESYNC mode */ 114 int ssl_data_fd_mode; 115 int ssl_ctrl_func; /* Called from what function */ 116 int ssl_data_func; 117 char user[160]; /* complete USER command */ 118 char pass[160]; 119 unsigned int lport; /* Local port */ 120 unsigned int rport; /* Remote port */ 121 int active; 122 int epsv; 123 int issl; /* implicit ssl */ 124 int retry; /* We filled the buffer, so there is probably more to read */ 125 int retry_data; 126 SSL_SESSION *ssl_sess; 127 SSL_CTX *ssl_ctx; 128 int sec_level; 129 int delay_prot; 130 }; 131 132 extern char *cfg_tlsrsafile; 133 extern char *cfg_tlsciphers; 134 135 //int print_to_user(struct user_data *, const char *); 136 #endif /* !__TLSWRAP_H__ */ 137