1 #ifndef _ECORE_CON_PRIVATE_H
2 #define _ECORE_CON_PRIVATE_H
4 #include "ecore_private.h"
7 #define ECORE_MAGIC_CON_SERVER 0x77665544
8 #define ECORE_MAGIC_CON_CLIENT 0x77556677
9 #define ECORE_MAGIC_CON_URL 0x77074255
11 #define ECORE_CON_TYPE 0x0f
12 #define ECORE_CON_SSL 0xf0
15 # include <gnutls/gnutls.h>
17 # include <openssl/ssl.h>
20 #include <curl/curl.h>
23 #define READBUFSIZ 65536
25 extern int _ecore_con_log_dom;
27 #ifdef ECORE_CON_DEFAULT_LOG_COLOR
28 #undef ECORE_LOG_DEFAULT_LOG_COLOR
30 #define ECORE_CON_DEFAULT_LOG_COLOR EINA_COLOR_BLUE
35 #define ERR(...) EINA_LOG_DOM_ERR(_ecore_con_log_dom, __VA_ARGS__)
40 #define DBG(...) EINA_LOG_DOM_DBG(_ecore_con_log_dom, __VA_ARGS__)
45 #define INF(...) EINA_LOG_DOM_INFO(_ecore_con_log_dom, __VA_ARGS__)
50 #define WRN(...) EINA_LOG_DOM_WARN(_ecore_con_log_dom, __VA_ARGS__)
55 #define CRIT(...) EINA_LOG_DOM_CRIT(_ecore_con_log_dom, __VA_ARGS__)
57 typedef struct _Ecore_Con_Lookup Ecore_Con_Lookup;
58 typedef struct _Ecore_Con_Info Ecore_Con_Info;
60 typedef void (*Ecore_Con_Info_Cb)(void *data, Ecore_Con_Info *infos);
62 typedef enum _Ecore_Con_State
65 ECORE_CON_DISCONNECTED,
69 typedef enum _Ecore_Con_Ssl_Error
71 ECORE_CON_SSL_ERROR_NONE = 0,
72 ECORE_CON_SSL_ERROR_NOT_SUPPORTED,
73 ECORE_CON_SSL_ERROR_INIT_FAILED,
74 ECORE_CON_SSL_ERROR_SERVER_INIT_FAILED,
75 ECORE_CON_SSL_ERROR_SSL2_NOT_SUPPORTED
76 } Ecore_Con_Ssl_Error;
78 typedef enum _Ecore_Con_Ssl_Handshake
80 ECORE_CON_SSL_STATE_DONE = 0,
81 ECORE_CON_SSL_STATE_HANDSHAKING,
82 ECORE_CON_SSL_STATE_INIT
83 } Ecore_Con_Ssl_State;
85 struct _Ecore_Con_Client
89 Ecore_Con_Server *host_server;
91 Ecore_Fd_Handler *fd_handler;
97 struct sockaddr *client_addr;
100 Ecore_Timer *until_deletion;
101 double disconnect_time;
103 gnutls_datum_t session_ticket;
104 gnutls_session_t session;
109 Eina_Bool handshaking : 1;
110 Ecore_Con_Ssl_State ssl_state;
112 Eina_Bool delete_me : 1;
115 struct _Ecore_Con_Server
124 Ecore_Fd_Handler *fd_handler;
126 unsigned int client_count;
128 int write_buf_offset;
129 unsigned char *write_buf;
135 gnutls_session_t session;
136 gnutls_anon_client_credentials_t anoncred_c;
137 gnutls_anon_server_credentials_t anoncred_s;
138 gnutls_psk_client_credentials_t pskcred_c;
139 gnutls_psk_server_credentials_t pskcred_s;
140 gnutls_certificate_credentials_t cert;
142 gnutls_dh_params_t dh_params;
149 double client_disconnect_time;
152 Eina_Bool created : 1; /* EINA_TRUE if server is our listening server */
153 Eina_Bool connecting : 1; /* EINA_FALSE if just initialized or connected */
154 Eina_Bool handshaking : 1; /* EINA_TRUE if server is ssl handshaking */
155 Eina_Bool use_cert : 1; /* EINA_TRUE if using certificate auth */
156 Ecore_Con_Ssl_State ssl_state; /* current state of ssl handshake on the server */
157 Eina_Bool verify : 1; /* EINA_TRUE if certificates will be verified */
158 Eina_Bool reject_excess_clients : 1;
159 Eina_Bool delete_me : 1;
163 struct _Ecore_Con_Url
167 struct curl_slist *headers;
168 Eina_List *additional_headers;
169 Eina_List *response_headers;
172 Ecore_Con_Url_Time time_condition;
176 Ecore_Fd_Handler *fd_handler;
183 Eina_Bool active : 1;
187 struct _Ecore_Con_Info
190 struct addrinfo info;
192 char service[NI_MAXSERV];
195 struct _Ecore_Con_Lookup
197 Ecore_Con_Dns_Cb done_cb;
201 /* from ecore_con.c */
202 void ecore_con_server_infos_del(Ecore_Con_Server *svr, void *info);
203 void ecore_con_event_server_error(Ecore_Con_Server *svr, const char *error);
204 void ecore_con_event_client_error(Ecore_Con_Client *cl, const char *error);
206 /* from ecore_local.c */
207 int ecore_con_local_init(void);
208 int ecore_con_local_shutdown(void);
209 int ecore_con_local_connect(Ecore_Con_Server *svr,
210 Eina_Bool (*cb_done)(
212 Ecore_Fd_Handler *fd_handler),
215 void *data, void *ev));
216 int ecore_con_local_listen(Ecore_Con_Server *svr,
217 Eina_Bool (*cb_listen)(
219 Ecore_Fd_Handler *fd_handler),
221 /* from ecore_con_info.c */
222 int ecore_con_info_init(void);
223 int ecore_con_info_shutdown(void);
224 int ecore_con_info_tcp_connect(Ecore_Con_Server *svr,
225 Ecore_Con_Info_Cb done_cb,
227 int ecore_con_info_tcp_listen(Ecore_Con_Server *svr,
228 Ecore_Con_Info_Cb done_cb,
230 int ecore_con_info_udp_connect(Ecore_Con_Server *svr,
231 Ecore_Con_Info_Cb done_cb,
233 int ecore_con_info_udp_listen(Ecore_Con_Server *svr,
234 Ecore_Con_Info_Cb done_cb,
236 int ecore_con_info_mcast_listen(Ecore_Con_Server *svr,
237 Ecore_Con_Info_Cb done_cb,
239 void ecore_con_info_data_clear(void *info);
241 /* from ecore_con_ssl.c */
242 Ecore_Con_Ssl_Error ecore_con_ssl_init(void);
243 Ecore_Con_Ssl_Error ecore_con_ssl_shutdown(void);
244 Ecore_Con_Ssl_Error ecore_con_ssl_server_prepare(Ecore_Con_Server *svr, int ssl_type);
245 Ecore_Con_Ssl_Error ecore_con_ssl_server_init(Ecore_Con_Server *svr);
246 Ecore_Con_Ssl_Error ecore_con_ssl_server_shutdown(Ecore_Con_Server *svr);
247 int ecore_con_ssl_server_read(Ecore_Con_Server *svr,
250 int ecore_con_ssl_server_write(Ecore_Con_Server *svr,
253 Ecore_Con_Ssl_Error ecore_con_ssl_client_init(Ecore_Con_Client *svr);
254 Ecore_Con_Ssl_Error ecore_con_ssl_client_shutdown(Ecore_Con_Client *svr);
255 int ecore_con_ssl_client_read(Ecore_Con_Client *svr,
258 int ecore_con_ssl_client_write(Ecore_Con_Client *svr,
262 int ecore_con_info_get(Ecore_Con_Server *svr,
263 Ecore_Con_Info_Cb done_cb,
265 struct addrinfo *hints);