feaa9aa7e702694d18fabf1ea433931c63bcf961
[profile/ivi/ecore.git] / src / lib / ecore_con / ecore_con_private.h
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
25 extern 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
57 typedef struct _Ecore_Con_Lookup Ecore_Con_Lookup;
58 typedef struct _Ecore_Con_Info Ecore_Con_Info;
59
60 typedef void (*Ecore_Con_Info_Cb)(void *data, Ecore_Con_Info *infos);
61
62 typedef enum _Ecore_Con_State
63 {
64    ECORE_CON_CONNECTED,
65    ECORE_CON_DISCONNECTED,
66    ECORE_CON_INPROGRESS
67 } Ecore_Con_State;
68
69 typedef enum _Ecore_Con_Ssl_Error
70 {
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;
77
78 struct _Ecore_Con_Client
79 {
80    ECORE_MAGIC;
81    int fd;
82    Ecore_Con_Server *server;
83    void *data;
84    Ecore_Fd_Handler *fd_handler;
85    int buf_size;
86    int buf_offset;
87    unsigned char *buf;
88    char *ip;
89    int event_count;
90    struct sockaddr *client_addr;
91    int client_addr_len;
92 #if USE_GNUTLS
93    gnutls_session session;
94 #elif USE_OPENSSL
95    SSL_CTX *ssl_ctx;
96    SSL *ssl;
97    int ssl_err;
98 #endif
99    char dead : 1;
100    char delete_me : 1;
101 };
102
103 struct _Ecore_Con_Server
104 {
105    ECORE_MAGIC;
106    int fd;
107    Ecore_Con_Type type;
108    char *name;
109    int port;
110    char *path;
111    void *data;
112    Ecore_Fd_Handler *fd_handler;
113    Eina_List *clients;
114    int write_buf_size;
115    int write_buf_offset;
116    unsigned char *write_buf;
117    int event_count;
118    int client_limit;
119    pid_t ppid;
120 #if USE_GNUTLS
121    gnutls_session session;
122    gnutls_anon_client_credentials_t anoncred_c;
123    gnutls_anon_server_credentials_t anoncred_s;
124    gnutls_certificate_credentials_t cert;
125 #elif USE_OPENSSL
126    SSL_CTX *ssl_ctx;
127    SSL *ssl;
128    int ssl_err;
129 #endif
130    char *ip;
131    char dead : 1;
132    char created : 1;
133    char connecting : 1;
134    char reject_excess_clients : 1;
135    char delete_me : 1;
136 };
137
138 #ifdef HAVE_CURL
139 struct _Ecore_Con_Url
140 {
141    ECORE_MAGIC;
142    CURL *curl_easy;
143    struct curl_slist *headers;
144    struct curl_httppost *post;
145    Eina_List *additional_headers;
146    Eina_List *response_headers;
147    char *url;
148
149    Ecore_Con_Url_Time condition;
150    time_t time;
151    void *data;
152
153    Ecore_Fd_Handler *fd_handler;
154    int fd;
155    int flags;
156
157    int received;
158    int write_fd;
159
160    unsigned char active : 1;
161 };
162 #endif
163
164 struct _Ecore_Con_Info
165 {
166    unsigned int size;
167    struct addrinfo info;
168    char ip[NI_MAXHOST];
169    char service[NI_MAXSERV];
170 };
171
172 struct _Ecore_Con_Lookup
173 {
174    Ecore_Con_Dns_Cb done_cb;
175    const void *data;
176 };
177
178 /* from ecore_local.c */
179 int ecore_con_local_init(void);
180 int ecore_con_local_shutdown(void);
181 int ecore_con_local_connect(Ecore_Con_Server *svr,
182                             Eina_Bool (*cb_done)(
183                                void *data,
184                                Ecore_Fd_Handler *fd_handler),
185                             void *data,
186                             void (*cb_free)(
187                                void *data, void *ev));
188 int ecore_con_local_listen(Ecore_Con_Server *svr,
189                            Eina_Bool (*cb_listen)(
190                               void *data,
191                               Ecore_Fd_Handler *fd_handler),
192                            void *data);
193 /* from ecore_con_info.c */
194 int                 ecore_con_info_init(void);
195 int                 ecore_con_info_shutdown(void);
196 int                 ecore_con_info_tcp_connect(Ecore_Con_Server *svr,
197                                                Ecore_Con_Info_Cb done_cb,
198                                                void *data);
199 int                 ecore_con_info_tcp_listen(Ecore_Con_Server *svr,
200                                               Ecore_Con_Info_Cb done_cb,
201                                               void *data);
202 int                 ecore_con_info_udp_connect(Ecore_Con_Server *svr,
203                                                Ecore_Con_Info_Cb done_cb,
204                                                void *data);
205 int                 ecore_con_info_udp_listen(Ecore_Con_Server *svr,
206                                               Ecore_Con_Info_Cb done_cb,
207                                               void *data);
208 int                 ecore_con_info_mcast_listen(Ecore_Con_Server *svr,
209                                                 Ecore_Con_Info_Cb done_cb,
210                                                 void *data);
211 /* from ecore_con_ssl.c */
212 Ecore_Con_Ssl_Error ecore_con_ssl_init(void);
213 Ecore_Con_Ssl_Error ecore_con_ssl_shutdown(void);
214 Eina_Bool           ecore_con_ssl_server_cert_add(const char *cert);
215 Eina_Bool           ecore_con_ssl_client_cert_add(const char *cert_file,
216                                                   const char *crl_file,
217                                                   const char *key_file);
218 void                ecore_con_ssl_server_prepare(Ecore_Con_Server *svr);
219 Ecore_Con_Ssl_Error ecore_con_ssl_server_init(Ecore_Con_Server *svr);
220 Ecore_Con_Ssl_Error ecore_con_ssl_server_shutdown(Ecore_Con_Server *svr);
221 Ecore_Con_State     ecore_con_ssl_server_try(Ecore_Con_Server *svr);
222 int                 ecore_con_ssl_server_read(Ecore_Con_Server *svr,
223                                               unsigned char *buf,
224                                               int size);
225 int                 ecore_con_ssl_server_write(Ecore_Con_Server *svr,
226                                                unsigned char *buf,
227                                                int size);
228 Ecore_Con_Ssl_Error ecore_con_ssl_client_init(Ecore_Con_Client *svr);
229 Ecore_Con_Ssl_Error ecore_con_ssl_client_shutdown(Ecore_Con_Client *svr);
230 Ecore_Con_State     ecore_con_ssl_client_try(Ecore_Con_Client *svr);
231 int                 ecore_con_ssl_client_read(Ecore_Con_Client *svr,
232                                               unsigned char *buf,
233                                               int size);
234 int                 ecore_con_ssl_client_write(Ecore_Con_Client *svr,
235                                                unsigned char *buf,
236                                                int size);
237
238 int                 ecore_con_info_get(Ecore_Con_Server *svr,
239                                        Ecore_Con_Info_Cb done_cb,
240                                        void *data,
241                                        struct addrinfo *hints);
242
243
244
245 #endif