aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/ecore/src/lib/ecore_con/ecore_con_private.h
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ecore/src/lib/ecore_con/ecore_con_private.h')
-rw-r--r--libraries/ecore/src/lib/ecore_con/ecore_con_private.h397
1 files changed, 0 insertions, 397 deletions
diff --git a/libraries/ecore/src/lib/ecore_con/ecore_con_private.h b/libraries/ecore/src/lib/ecore_con/ecore_con_private.h
deleted file mode 100644
index 91f5d39..0000000
--- a/libraries/ecore/src/lib/ecore_con/ecore_con_private.h
+++ /dev/null
@@ -1,397 +0,0 @@
1#ifndef _ECORE_CON_PRIVATE_H
2#define _ECORE_CON_PRIVATE_H
3
4#include "ecore_private.h"
5#include "Ecore_Con.h"
6
7#define ECORE_MAGIC_CON_SERVER 0x77665544
8#define ECORE_MAGIC_CON_CLIENT 0x77556677
9#define ECORE_MAGIC_CON_URL 0x77074255
10
11#define ECORE_CON_TYPE 0x0f
12#define ECORE_CON_SSL 0xf0
13
14#if USE_GNUTLS
15# include <gnutls/gnutls.h>
16#elif USE_OPENSSL
17# include <openssl/ssl.h>
18#endif
19#ifdef HAVE_CURL
20#include <curl/curl.h>
21#endif
22
23#define READBUFSIZ 65536
24
25extern int _ecore_con_log_dom;
26
27#ifdef ECORE_CON_DEFAULT_LOG_COLOR
28#undef ECORE_LOG_DEFAULT_LOG_COLOR
29#endif
30#define ECORE_CON_DEFAULT_LOG_COLOR EINA_COLOR_BLUE
31
32#ifdef ERR
33# undef ERR
34#endif
35#define ERR(...) EINA_LOG_DOM_ERR(_ecore_con_log_dom, __VA_ARGS__)
36
37#ifdef DBG
38# undef DBG
39#endif
40#define DBG(...) EINA_LOG_DOM_DBG(_ecore_con_log_dom, __VA_ARGS__)
41
42#ifdef INF
43# undef INF
44#endif
45#define INF(...) EINA_LOG_DOM_INFO(_ecore_con_log_dom, __VA_ARGS__)
46
47#ifdef WRN
48# undef WRN
49#endif
50#define WRN(...) EINA_LOG_DOM_WARN(_ecore_con_log_dom, __VA_ARGS__)
51
52#ifdef CRIT
53# undef CRIT
54#endif
55#define CRIT(...) EINA_LOG_DOM_CRIT(_ecore_con_log_dom, __VA_ARGS__)
56
57typedef struct _Ecore_Con_Lookup Ecore_Con_Lookup;
58typedef struct _Ecore_Con_Info Ecore_Con_Info;
59typedef struct Ecore_Con_Socks Ecore_Con_Socks_v4;
60typedef struct Ecore_Con_Socks_v5 Ecore_Con_Socks_v5;
61typedef void (*Ecore_Con_Info_Cb)(void *data, Ecore_Con_Info *infos);
62
63typedef enum _Ecore_Con_State
64{
65 ECORE_CON_CONNECTED,
66 ECORE_CON_DISCONNECTED,
67 ECORE_CON_INPROGRESS
68} Ecore_Con_State;
69
70typedef enum _Ecore_Con_Ssl_Error
71{
72 ECORE_CON_SSL_ERROR_NONE = 0,
73 ECORE_CON_SSL_ERROR_NOT_SUPPORTED,
74 ECORE_CON_SSL_ERROR_INIT_FAILED,
75 ECORE_CON_SSL_ERROR_SERVER_INIT_FAILED,
76 ECORE_CON_SSL_ERROR_SSL2_NOT_SUPPORTED
77} Ecore_Con_Ssl_Error;
78
79typedef enum _Ecore_Con_Ssl_Handshake
80{
81 ECORE_CON_SSL_STATE_DONE = 0,
82 ECORE_CON_SSL_STATE_HANDSHAKING,
83 ECORE_CON_SSL_STATE_INIT
84} Ecore_Con_Ssl_State;
85
86typedef enum Ecore_Con_Proxy_State
87{ /* named PROXY instead of SOCKS in case some handsome and enterprising
88 * developer decides to add HTTP CONNECT support
89 */
90 ECORE_CON_PROXY_STATE_DONE = 0,
91 ECORE_CON_PROXY_STATE_RESOLVED,
92 ECORE_CON_PROXY_STATE_INIT,
93 ECORE_CON_PROXY_STATE_READ,
94 ECORE_CON_PROXY_STATE_AUTH,
95 ECORE_CON_PROXY_STATE_REQUEST,
96 ECORE_CON_PROXY_STATE_CONFIRM,
97} Ecore_Con_Proxy_State;
98
99struct _Ecore_Con_Client
100{
101 ECORE_MAGIC;
102 int fd;
103 Ecore_Con_Server *host_server;
104 void *data;
105 Ecore_Fd_Handler *fd_handler;
106 unsigned int buf_offset;
107 Eina_Binbuf *buf;
108 const char *ip;
109 Eina_List *event_count;
110 struct sockaddr *client_addr;
111 int client_addr_len;
112 double start_time;
113 Ecore_Timer *until_deletion;
114 double disconnect_time;
115#if USE_GNUTLS
116 gnutls_datum_t session_ticket;
117 gnutls_session_t session;
118#elif USE_OPENSSL
119 SSL *ssl;
120 int ssl_err;
121#endif
122 Ecore_Con_Ssl_State ssl_state;
123 Eina_Bool handshaking : 1;
124 Eina_Bool upgrade : 1; /* STARTTLS queued */
125 Eina_Bool delete_me : 1; /* del event has been queued */
126};
127
128struct _Ecore_Con_Server
129{
130 ECORE_MAGIC;
131 int fd;
132 Ecore_Con_Type type;
133 char *name;
134 int port;
135 char *path;
136 void *data;
137 Ecore_Fd_Handler *fd_handler;
138 Eina_List *clients;
139 unsigned int client_count;
140 Eina_Binbuf *buf;
141 unsigned int write_buf_offset;
142 Eina_List *infos;
143 Eina_List *event_count;
144 int client_limit;
145 pid_t ppid;
146 /* socks */
147 Ecore_Con_Socks *ecs;
148 Ecore_Con_Proxy_State ecs_state;
149 int ecs_addrlen;
150 unsigned char ecs_addr[16];
151 unsigned int ecs_buf_offset;
152 Eina_Binbuf *ecs_buf;
153 Eina_Binbuf *ecs_recvbuf;
154 const char *proxyip;
155 int proxyport;
156 /* endsocks */
157 const char *verify_name;
158#if USE_GNUTLS
159 gnutls_session_t session;
160 gnutls_anon_client_credentials_t anoncred_c;
161 gnutls_anon_server_credentials_t anoncred_s;
162 gnutls_psk_client_credentials_t pskcred_c;
163 gnutls_psk_server_credentials_t pskcred_s;
164 gnutls_certificate_credentials_t cert;
165 char *cert_file;
166 gnutls_dh_params_t dh_params;
167#elif USE_OPENSSL
168 SSL_CTX *ssl_ctx;
169 SSL *ssl;
170 int ssl_err;
171#endif
172 double start_time;
173 Ecore_Timer *until_deletion;
174 double disconnect_time;
175 double client_disconnect_time;
176 const char *ip;
177 Eina_Bool created : 1; /* EINA_TRUE if server is our listening server */
178 Eina_Bool connecting : 1; /* EINA_FALSE if just initialized or connected */
179 Eina_Bool handshaking : 1; /* EINA_TRUE if server is ssl handshaking */
180 Eina_Bool upgrade : 1; /* STARTTLS queued */
181 Eina_Bool ssl_prepared : 1;
182 Eina_Bool use_cert : 1; /* EINA_TRUE if using certificate auth */
183 Ecore_Con_Ssl_State ssl_state; /* current state of ssl handshake on the server */
184 Eina_Bool verify : 1; /* EINA_TRUE if certificates will be verified */
185 Eina_Bool verify_basic : 1; /* EINA_TRUE if certificates will be verified only against the hostname */
186 Eina_Bool reject_excess_clients : 1;
187 Eina_Bool delete_me : 1; /* del event has been queued */
188#ifdef _WIN32
189 Eina_Bool want_write : 1;
190 Eina_Bool read_stop : 1;
191 Eina_Bool read_stopped : 1;
192 HANDLE pipe;
193 HANDLE thread_read;
194 HANDLE event_read;
195 HANDLE event_peek;
196 DWORD nbr_bytes;
197#endif
198};
199
200#ifdef HAVE_CURL
201struct _Ecore_Con_Url
202{
203 ECORE_MAGIC;
204 CURL *curl_easy;
205 struct curl_slist *headers;
206 Eina_List *additional_headers;
207 Eina_List *response_headers;
208 const char *url;
209 long proxy_type;
210 int status;
211
212 Ecore_Timer *timer;
213
214 Ecore_Con_Url_Time time_condition;
215 double timestamp;
216 void *data;
217
218 void *post_data;
219
220 int received;
221 int write_fd;
222
223 unsigned int event_count;
224 Eina_Bool dead : 1;
225 Eina_Bool multi : 1;
226};
227#endif
228
229struct _Ecore_Con_Info
230{
231 unsigned int size;
232 struct addrinfo info;
233 char ip[NI_MAXHOST];
234 char service[NI_MAXSERV];
235};
236
237struct _Ecore_Con_Lookup
238{
239 Ecore_Con_Dns_Cb done_cb;
240 const void *data;
241};
242
243#define ECORE_CON_SOCKS_CAST_ELSE(X) \
244 Ecore_Con_Socks_v4 *v4 = NULL; \
245 Ecore_Con_Socks_v5 *v5 = NULL; \
246 if ((X) && ((X)->version == 4)) \
247 v4 = (Ecore_Con_Socks_v4*)(X); \
248 else if ((X) && ((X)->version == 5)) \
249 v5 = (Ecore_Con_Socks_v5*)(X); \
250 else
251
252struct Ecore_Con_Socks /* v4 */
253{
254 unsigned char version;
255
256 const char *ip;
257 int port;
258 const char *username;
259 unsigned int ulen;
260 Eina_Bool lookup : 1;
261 Eina_Bool bind : 1;
262};
263
264struct Ecore_Con_Socks_v5
265{
266 unsigned char version;
267
268 const char *ip;
269 int port;
270 const char *username;
271 unsigned int ulen;
272 Eina_Bool lookup : 1;
273 Eina_Bool bind : 1;
274 /* v5 only */
275 unsigned char method;
276 const char *password;
277 unsigned int plen;
278};
279
280extern Ecore_Con_Socks *_ecore_con_proxy_once;
281extern Ecore_Con_Socks *_ecore_con_proxy_global;
282void ecore_con_socks_init(void);
283void ecore_con_socks_shutdown(void);
284Eina_Bool ecore_con_socks_svr_init(Ecore_Con_Server *svr);
285void ecore_con_socks_read(Ecore_Con_Server *svr, unsigned char *buf, int num);
286void ecore_con_socks_dns_cb(const char *canonname, const char *ip, struct sockaddr *addr, int addrlen, Ecore_Con_Server *svr);
287/* from ecore_con.c */
288void ecore_con_server_infos_del(Ecore_Con_Server *svr, void *info);
289void ecore_con_event_proxy_bind(Ecore_Con_Server *svr);
290void ecore_con_event_server_data(Ecore_Con_Server *svr, unsigned char *buf, int num, Eina_Bool duplicate);
291void ecore_con_event_server_del(Ecore_Con_Server *svr);
292#define ecore_con_event_server_error(svr, error) _ecore_con_event_server_error((svr), (char*)(error), EINA_TRUE)
293void _ecore_con_event_server_error(Ecore_Con_Server *svr, char *error, Eina_Bool duplicate);
294void ecore_con_event_client_add(Ecore_Con_Client *cl);
295void ecore_con_event_client_data(Ecore_Con_Client *cl, unsigned char *buf, int num, Eina_Bool duplicate);
296void ecore_con_event_client_del(Ecore_Con_Client *cl);
297void ecore_con_event_client_error(Ecore_Con_Client *cl, const char *error);
298void _ecore_con_server_kill(Ecore_Con_Server *svr);
299void _ecore_con_client_kill(Ecore_Con_Client *cl);
300/* from ecore_local_win32.c */
301#ifdef _WIN32
302Eina_Bool ecore_con_local_listen(Ecore_Con_Server *svr);
303Eina_Bool ecore_con_local_connect(Ecore_Con_Server *svr,
304 Eina_Bool (*cb_done)(void *data,
305 Ecore_Fd_Handler *fd_handler));
306Eina_Bool ecore_con_local_win32_server_flush(Ecore_Con_Server *svr);
307Eina_Bool ecore_con_local_win32_client_flush(Ecore_Con_Client *cl);
308void ecore_con_local_win32_server_del(Ecore_Con_Server *svr);
309void ecore_con_local_win32_client_del(Ecore_Con_Client *cl);
310#else
311/* from ecore_local.c */
312int ecore_con_local_init(void);
313int ecore_con_local_shutdown(void);
314int ecore_con_local_connect(Ecore_Con_Server *svr,
315 Eina_Bool (*cb_done)(
316 void *data,
317 Ecore_Fd_Handler *fd_handler),
318 void *data);
319int ecore_con_local_listen(Ecore_Con_Server *svr,
320 Eina_Bool (*cb_listen)(
321 void *data,
322 Ecore_Fd_Handler *fd_handler),
323 void *data);
324#endif
325
326/* from ecore_con_info.c */
327int ecore_con_info_init(void);
328int ecore_con_info_shutdown(void);
329int ecore_con_info_tcp_connect(Ecore_Con_Server *svr,
330 Ecore_Con_Info_Cb done_cb,
331 void *data);
332int ecore_con_info_tcp_listen(Ecore_Con_Server *svr,
333 Ecore_Con_Info_Cb done_cb,
334 void *data);
335int ecore_con_info_udp_connect(Ecore_Con_Server *svr,
336 Ecore_Con_Info_Cb done_cb,
337 void *data);
338int ecore_con_info_udp_listen(Ecore_Con_Server *svr,
339 Ecore_Con_Info_Cb done_cb,
340 void *data);
341int ecore_con_info_mcast_listen(Ecore_Con_Server *svr,
342 Ecore_Con_Info_Cb done_cb,
343 void *data);
344void ecore_con_info_data_clear(void *info);
345
346void ecore_con_event_server_add(Ecore_Con_Server *svr);
347
348
349/* from ecore_con_ssl.c */
350Ecore_Con_Ssl_Error ecore_con_ssl_init(void);
351Ecore_Con_Ssl_Error ecore_con_ssl_shutdown(void);
352Ecore_Con_Ssl_Error ecore_con_ssl_server_prepare(Ecore_Con_Server *svr, int ssl_type);
353Ecore_Con_Ssl_Error ecore_con_ssl_server_init(Ecore_Con_Server *svr);
354Ecore_Con_Ssl_Error ecore_con_ssl_server_shutdown(Ecore_Con_Server *svr);
355int ecore_con_ssl_server_read(Ecore_Con_Server *svr,
356 unsigned char *buf,
357 int size);
358int ecore_con_ssl_server_write(Ecore_Con_Server *svr,
359 const unsigned char *buf,
360 int size);
361Ecore_Con_Ssl_Error ecore_con_ssl_client_init(Ecore_Con_Client *svr);
362Ecore_Con_Ssl_Error ecore_con_ssl_client_shutdown(Ecore_Con_Client *svr);
363int ecore_con_ssl_client_read(Ecore_Con_Client *svr,
364 unsigned char *buf,
365 int size);
366int ecore_con_ssl_client_write(Ecore_Con_Client *svr,
367 const unsigned char *buf,
368 int size);
369
370int ecore_con_info_get(Ecore_Con_Server *svr,
371 Ecore_Con_Info_Cb done_cb,
372 void *data,
373 struct addrinfo *hints);
374
375
376#define GENERIC_ALLOC_FREE_HEADER(TYPE, Type) \
377 TYPE *Type##_alloc(void); \
378 void Type##_free(TYPE *e);
379
380GENERIC_ALLOC_FREE_HEADER(Ecore_Con_Event_Client_Add, ecore_con_event_client_add);
381GENERIC_ALLOC_FREE_HEADER(Ecore_Con_Event_Client_Del, ecore_con_event_client_del);
382GENERIC_ALLOC_FREE_HEADER(Ecore_Con_Event_Client_Write, ecore_con_event_client_write);
383GENERIC_ALLOC_FREE_HEADER(Ecore_Con_Event_Client_Data, ecore_con_event_client_data);
384GENERIC_ALLOC_FREE_HEADER(Ecore_Con_Event_Server_Error, ecore_con_event_server_error);
385GENERIC_ALLOC_FREE_HEADER(Ecore_Con_Event_Client_Error, ecore_con_event_client_error);
386GENERIC_ALLOC_FREE_HEADER(Ecore_Con_Event_Server_Add, ecore_con_event_server_add);
387GENERIC_ALLOC_FREE_HEADER(Ecore_Con_Event_Server_Del, ecore_con_event_server_del);
388GENERIC_ALLOC_FREE_HEADER(Ecore_Con_Event_Server_Write, ecore_con_event_server_write);
389GENERIC_ALLOC_FREE_HEADER(Ecore_Con_Event_Server_Data, ecore_con_event_server_data);
390GENERIC_ALLOC_FREE_HEADER(Ecore_Con_Event_Proxy_Bind, ecore_con_event_proxy_bind);
391
392void ecore_con_mempool_init(void);
393void ecore_con_mempool_shutdown(void);
394
395#undef GENERIC_ALLOC_FREE_HEADER
396
397#endif