9784adf79773e22958e667d557eb97138bb526e6
[framework/uifw/ecore.git] / src / lib / ecore_con / Ecore_Con.h
1 #ifndef _ECORE_CON_H
2 #define _ECORE_CON_H
3
4 #include <time.h>
5 #include <libgen.h>
6 #ifdef _WIN32
7 # include <ws2tcpip.h>
8 #else
9 # include <netdb.h>
10 #endif
11 #include <Eina.h>
12
13 #ifdef EAPI
14 # undef EAPI
15 #endif
16
17 #ifdef _WIN32
18 # ifdef EFL_ECORE_CON_BUILD
19 #  ifdef DLL_EXPORT
20 #   define EAPI __declspec(dllexport)
21 #  else
22 #   define EAPI
23 #  endif
24 # else
25 #  define EAPI __declspec(dllimport)
26 # endif
27 #else
28 # ifdef __GNUC__
29 #  if __GNUC__ >= 4
30 #   define EAPI __attribute__ ((visibility("default")))
31 #  else
32 #   define EAPI
33 #  endif
34 # else
35 #  define EAPI
36 # endif
37 #endif
38
39 /**
40  * @defgroup Ecore_Con_Group Ecore_Con - Connection functions
41  *
42  * The Ecore Connection Library ( @c Ecore_Con ) provides simple mechanisms
43  * for communications between programs using reliable sockets.  It saves
44  * the programmer from having to worry about file descriptors and waiting
45  * for incoming connections.
46  *
47  * There are two main objects in the @c Ecore_Con library: the @c
48  * Ecore_Con_Server and the @c Ecore_Con_Client.
49  *
50  * The @c Ecore_Con_Server represents a server that can be connected to.
51  * It is used regardless of whether the program is acting as a server or
52  * client itself.
53  *
54  * To create a listening server call @c ecore_con_server_add(), optionally using
55  * an ECORE_CON_USE_* encryption type OR'ed with the type for encryption.
56  *
57  * To connect to a server, call @c ecore_con_server_connect().  Data can
58  * then be sent to the server using the @c ecore_con_server_send().
59  *
60  * Functions are described in the following groupings:
61  * @li @ref Ecore_Con_Lib_Group
62  * @li @ref Ecore_Con_Server_Group
63  * @li @ref Ecore_Con_Client_Group
64  * @li @ref Ecore_Con_Url_Group
65  *
66  * Events are described in @ref Ecore_Con_Events_Group.
67  */
68
69
70 /**
71  * @defgroup Ecore_Con_Events_Group Ecore Connection Events Functions
72  *
73  * @li ECORE_CON_CLIENT_ADD: Whenever a client connection is made to an
74  * @c Ecore_Con_Server, an event of this type is emitted, allowing the
75  * retrieval of the client's ip with @ref ecore_con_client_ip_get and
76  * associating data with the client using ecore_con_client_data_set.
77  * @li ECORE_CON_EVENT_CLIENT_DEL: Whenever a client connection to an
78  * @c Ecore_Con_Server, an event of this type is emitted.  The contents of
79  * the data with this event are variable, but if the client object in the data
80  * is non-null, it must be freed with @ref ecore_con_client_del.
81  * @li ECORE_CON_EVENT_SERVER_ADD: Whenever a server object is created
82  * with @ref ecore_con_server_connect, an event of this type is emitted,
83  * allowing for data to be serialized and sent to the server using
84  * @ref ecore_con_server_send. At this point, the http handshake has
85  * occurred.
86  * @li ECORE_CON_EVENT_SERVER_DEL: Whenever a server object is destroyed,
87  * usually by the server connection being refused or dropped, an event of this
88  * type is emitted.  The contents of the data with this event are variable,
89  * but if the server object in the data is non-null, it must be freed
90  * with @ref ecore_con_server_del.
91  * @li ECORE_CON_EVENT_CLIENT_DATA: Whenever a client connects to your server
92  * object and sends data, an event of this type is emitted.  The data will contain both
93  * the size and contents of the message sent by the client.  It should be noted that
94  * data within this object is transient, so it must be duplicated in order to be
95  * retained.  This event will continue to occur until the client has stopped sending its
96  * message, so a good option for storing this data is an Eina_Strbuf.  Once the message has
97  * been received in full, the client object must be freed with ecore_con_client_free.
98  * @li ECORE_CON_EVENT_SERVER_DATA: Whenever your server object connects to its destination
99  * and receives data, an event of this type is emitted.  The data will contain both
100  * the size and contents of the message sent by the server.  It should be noted that
101  * data within this object is transient, so it must be duplicated in order to be
102  * retained.  This event will continue to occur until the server has stopped sending its
103  * message, so a good option for storing this data is an Eina_Strbuf.  Once the message has
104  * been received in full, the server object must be freed with ecore_con_server_free.
105  *
106  */
107
108 /**
109  * @defgroup Ecore_Con_Buffer Ecore Connection Buffering
110  * 
111  * As Ecore_Con works on an event driven design, as data arrives, events will
112  * be produced containing the data that arrived. It is up to the user of
113  * Ecore_Con to either parse as they go, append to a file to later parse the
114  * whole file in one go, or append to memory to parse or handle leter.
115  * 
116  * To help with this Eina has some handy API's. The Eina_Binbuf and 
117  * Eina_Strbuf APIs, abstract dynamic buffer management and make it trivial 
118  * to handle buffers at runtime, without having to manage them. Eina_Binbuf 
119  * makes it possible to create, expand, reset and slice a blob of memory - 
120  * all via API. No system calls, no pointer manipulations and no size 
121  * calculation.
122  * 
123  * Additional functions include adding content at specified byte positions in 
124  * the buffer, escaping the inputs, find and replace strings. This provides 
125  * extreme flexibility to play around, with a dynamic blob of memory.
126  * 
127  * It is good to free it (using eina_binbuf_free()) after using it.
128  * 
129  * Eina_Binbuf compliments Ecore_Con use cases, where dynamic sizes of data
130  * arrive from the network (think http download in chunks). Using
131  * Eina_Binbuf provides enough flexibility to handle data as it arrives and
132  * to defer its processing until desired, without having to think about
133  * where to store the temporary data and how to manage its size.
134  * 
135  * An example of how to use these with Ecore_Con follows.
136  * 
137  * @code
138  * #include <Eina.h>
139  * #include <Ecore.h>
140  * #include <Ecore_Con.h>
141  * 
142  * static Eina_Bool
143  * data_callback(void *data, int type, void *event)
144  * {
145  *    Ecore_Con_Event_Url_Data *url_data = event;
146  *    if ( url_data->size > 0)
147  *      {
148  *         // append data as it arrives - don't worry where or how it gets stored.
149  *         // Also don't worry about size, expanding, reallocing etc.
150  *         // just keep appending - size is automatically handled.
151  * 
152  *         eina_binbuf_append_length(data, url_data->data, url_data->size);
153  * 
154  *         fprintf(stderr, "Appended %d \n", url_data->size);
155  *      }
156  *    return EINA_TRUE;
157  * }
158  * 
159  * 
160  * 
161  * static Eina_Bool
162  * completion_callback(void *data, int type, void *event)
163  * {
164  *    Ecore_Con_Event_Url_Complete *url_complete = event;
165  *    printf("download completed with status code: %d\n", url_complete->status);
166  * 
167  *    // get the data back from Eina_Binbuf
168  *    char *ptr = eina_binbuf_string_get(data);
169  *    size_t size = eina_binbuf_length_get(data);
170  * 
171  *    // process data as required (write to file)
172  *    fprintf(stderr, "Size of data = %d bytes\n", size);
173  *    int fd = open("./elm.png", O_CREAT);
174  *    write(fd, ptr, size);
175  *    close(fd);
176  *   
177  *    // free it when done.
178  *    eina_binbuf_free(data);
179  * 
180  *    ecore_main_loop_quit();
181  * 
182  *    return EINA_TRUE;
183  * }
184  * 
185  * 
186  * int
187  * main(int argc, char **argv)
188  * {
189  * 
190  *    const char *url = "http://www.enlightenment.org/p/index/d/logo.png";
191  * 
192  *    ecore_init();
193  *    ecore_con_init();
194  *    ecore_con_url_init();
195  *   
196  * 
197  *    // This is single additional line to manage dynamic network data.
198  *    Eina_Binbuf *data = eina_binbuf_new();
199  *    Ecore_Con_Url *url_con = ecore_con_url_new(url);
200  * 
201  *    ecore_event_handler_add(ECORE_CON_EVENT_URL_COMPLETE,
202  *                                                       completion_callback,
203  *                                                       data);
204  *    ecore_event_handler_add(ECORE_CON_EVENT_URL_DATA,
205  *                                                       data_callback,
206  *                                                       data);
207  *    ecore_con_url_get(url_con);
208  * 
209  *    ecore_main_loop_begin();
210  *    return 0;
211  * }
212  * @endcode
213  */
214
215 #ifdef __cplusplus
216 extern "C" {
217 #endif
218 #define ECORE_CON_USE_SSL ECORE_CON_USE_SSL2
219 #define ECORE_CON_REMOTE_SYSTEM ECORE_CON_REMOTE_TCP
220
221
222 /**
223  * @typedef Ecore_Con_Server
224  * A connection handle to a server
225  * @ingroup Ecore_Con_Server_Group
226  */
227 typedef struct _Ecore_Con_Server Ecore_Con_Server;
228
229 /**
230  * @typedef Ecore_Con_Client
231  * A connection handle to a client
232  * @ingroup Ecore_Con_Client_Group
233  */
234 typedef struct _Ecore_Con_Client Ecore_Con_Client;
235
236 /**
237  * @typedef Ecore_Con_Socks
238  * An object representing a SOCKS proxy
239  * @ingroup Ecore_Con_Socks_Group
240  * @since 1.2
241  */
242 typedef struct Ecore_Con_Socks Ecore_Con_Socks;
243
244 /**
245  * @typedef Ecore_Con_Url
246  * A handle to an http upload/download object
247  * @ingroup Ecore_Con_Url_Group
248  */
249 typedef struct _Ecore_Con_Url Ecore_Con_Url;
250
251
252 /**
253  * @addtogroup Ecore_Con_Events_Group
254  * @{
255  */
256
257 /**
258  * @typedef Ecore_Con_Event_Client_Add
259  * Used as the @p data param for the corresponding event
260  */
261 typedef struct _Ecore_Con_Event_Client_Add Ecore_Con_Event_Client_Add;
262
263 /**
264  * @typedef Ecore_Con_Event_Client_Upgrade
265  * Used as the @p data param for the corresponding event
266  * @since 1.1
267  */
268 typedef struct _Ecore_Con_Event_Client_Upgrade Ecore_Con_Event_Client_Upgrade;
269
270 /**
271  * @typedef Ecore_Con_Event_Client_Del
272  * Used as the @p data param for the corresponding event
273  */
274 typedef struct _Ecore_Con_Event_Client_Del Ecore_Con_Event_Client_Del;
275
276 /**
277  * @typedef Ecore_Con_Event_Client_Error
278  * Used as the @p data param for the corresponding event
279  * @since 1.1
280  */
281 typedef struct _Ecore_Con_Event_Client_Error Ecore_Con_Event_Client_Error;
282
283 /**
284  * @typedef Ecore_Con_Event_Server_Add
285  * Used as the @p data param for the corresponding event
286  */
287 typedef struct _Ecore_Con_Event_Server_Add Ecore_Con_Event_Server_Add;
288
289 /**
290  * @typedef Ecore_Con_Event_Server_Upgrade
291  * Used as the @p data param for the corresponding event
292  * @since 1.1
293  */
294 typedef struct _Ecore_Con_Event_Server_Upgrade Ecore_Con_Event_Server_Upgrade;
295
296 /**
297  * @typedef Ecore_Con_Event_Server_Del
298  * Used as the @p data param for the corresponding event
299  */
300 typedef struct _Ecore_Con_Event_Server_Del Ecore_Con_Event_Server_Del;
301
302 /**
303  * @typedef Ecore_Con_Event_Server_Error
304  * Used as the @p data param for the corresponding event
305  * @since 1.1
306  */
307 typedef struct _Ecore_Con_Event_Server_Error Ecore_Con_Event_Server_Error;
308
309 /**
310  * @typedef Ecore_Con_Event_Client_Data
311  * Used as the @p data param for the corresponding event
312  */
313 typedef struct _Ecore_Con_Event_Client_Data Ecore_Con_Event_Client_Data;
314
315 /**
316  * @typedef Ecore_Con_Event_Server_Data
317  * Used as the @p data param for the corresponding event
318  */
319 typedef struct _Ecore_Con_Event_Server_Data Ecore_Con_Event_Server_Data;
320
321 /**
322  * @typedef Ecore_Con_Event_Client_Write
323  * Used as the @p data param for the corresponding event
324  * @since 1.1
325  */
326 typedef struct _Ecore_Con_Event_Client_Write Ecore_Con_Event_Client_Write;
327
328 /**
329  * @typedef Ecore_Con_Event_Server_Write
330  * Used as the @p data param for the corresponding event
331  * @since 1.1
332  */
333 typedef struct _Ecore_Con_Event_Server_Write Ecore_Con_Event_Server_Write;
334
335 /**
336  * @typedef Ecore_Con_Event_Proxy_Bind
337  * Used as the @p data param for the corresponding event
338  * @since 1.2
339  */
340 typedef struct _Ecore_Con_Event_Proxy_Bind Ecore_Con_Event_Proxy_Bind;
341
342 /**
343  * @typedef Ecore_Con_Event_Url_Data
344  * Used as the @p data param for the corresponding event
345  * @ingroup Ecore_Con_Url_Group
346  */
347 typedef struct _Ecore_Con_Event_Url_Data Ecore_Con_Event_Url_Data;
348
349 /**
350  * @typedef Ecore_Con_Event_Url_Complete
351  * Used as the @p data param for the corresponding event
352  * @ingroup Ecore_Con_Url_Group
353  */
354 typedef struct _Ecore_Con_Event_Url_Complete Ecore_Con_Event_Url_Complete;
355
356 /**
357  * @typedef Ecore_Con_Event_Url_Progress
358  * Used as the @p data param for the corresponding event
359  * @ingroup Ecore_Con_Url_Group
360  */
361 typedef struct _Ecore_Con_Event_Url_Progress Ecore_Con_Event_Url_Progress;
362
363 /**
364  * @struct _Ecore_Con_Event_Client_Add
365  * Used as the @p data param for the @ref ECORE_CON_EVENT_CLIENT_ADD event
366  */
367 struct _Ecore_Con_Event_Client_Add
368 {
369    Ecore_Con_Client *client; /** the client that connected */
370 };
371
372 /**
373  * @struct _Ecore_Con_Event_Client_Upgrade
374  * Used as the @p data param for the @ref ECORE_CON_EVENT_CLIENT_UPGRADE event
375  * @since 1.1
376  */
377 struct _Ecore_Con_Event_Client_Upgrade
378 {
379    Ecore_Con_Client *client; /** the client that completed handshake */
380 };
381
382 /**
383  * @struct _Ecore_Con_Event_Client_Del
384  * Used as the @p data param for the @ref ECORE_CON_EVENT_CLIENT_DEL event
385  */
386 struct _Ecore_Con_Event_Client_Del
387 {
388    Ecore_Con_Client *client; /** the client that was lost */
389 };
390
391 /**
392  * @struct _Ecore_Con_Event_Client_Error
393  * Used as the @p data param for the @ref ECORE_CON_EVENT_CLIENT_ERROR event
394  */
395 struct _Ecore_Con_Event_Client_Error
396 {
397    Ecore_Con_Client *client; /** the client for which an error occurred */
398    char *error; /**< the error string describing what happened */
399 };
400
401 /**
402  * @struct _Ecore_Con_Event_Server_Add
403  * Used as the @p data param for the @ref ECORE_CON_EVENT_SERVER_ADD event
404  */
405 struct _Ecore_Con_Event_Server_Add
406 {
407    Ecore_Con_Server *server; /** the server that was connected to */
408 };
409
410 /**
411  * @struct _Ecore_Con_Event_Server_Upgrade
412  * Used as the @p data param for the @ref ECORE_CON_EVENT_SERVER_UPGRADE event
413  * @since 1.1
414  */
415 struct _Ecore_Con_Event_Server_Upgrade
416 {
417    Ecore_Con_Server *server; /** the server that was connected to */
418 };
419
420 /**
421  * @struct _Ecore_Con_Event_Server_Del
422  * Used as the @p data param for the @ref ECORE_CON_EVENT_SERVER_DEL event
423  */
424 struct _Ecore_Con_Event_Server_Del
425 {
426    Ecore_Con_Server *server; /** the client that was lost */
427 };
428
429 /**
430  * @struct _Ecore_Con_Event_Server_Error
431  * Used as the @p data param for the @ref ECORE_CON_EVENT_SERVER_ERROR event
432  */
433 struct _Ecore_Con_Event_Server_Error
434 {
435    Ecore_Con_Server *server; /** the server for which an error occurred */
436    char *error; /**< the error string describing what happened */
437 };
438
439 /**
440  * @struct _Ecore_Con_Event_Client_Data
441  * Used as the @p data param for the @ref ECORE_CON_EVENT_CLIENT_DATA event
442  */
443 struct _Ecore_Con_Event_Client_Data
444 {
445    Ecore_Con_Client *client; /**< the client that connected */
446    void *data;               /**< the data that the client sent */
447    int size;                 /**< the length of the data sent */
448 };
449
450 /**
451  * @struct _Ecore_Con_Event_Server_Data
452  * Used as the @p data param for the @ref ECORE_CON_EVENT_SERVER_DATA event
453  */
454 struct _Ecore_Con_Event_Server_Data
455 {
456    Ecore_Con_Server *server; /**< the server that was connected to */
457    void *data;               /**< the data that the server sent */
458    int size;                 /**< the length of the data sent */
459 };
460
461 /**
462  * @struct _Ecore_Con_Event_Client_Write
463  * Used as the @p data param for the @ref ECORE_CON_EVENT_CLIENT_WRITE event
464  */
465 struct _Ecore_Con_Event_Client_Write
466 {
467    Ecore_Con_Client *client; /**< the client that connected */
468    int size;                 /**< the length of the data sent */
469 };
470
471 /**
472  * @struct _Ecore_Con_Event_Server_Write
473  * Used as the @p data param for the @ref ECORE_CON_EVENT_SERVER_WRITE event
474  */
475 struct _Ecore_Con_Event_Server_Write
476 {
477    Ecore_Con_Server *server; /**< the server that was connected to */
478    int size;                 /**< the length of the data sent */
479 };
480
481 /**
482  * @struct _Ecore_Con_Event_Proxy_Bind
483  * Used as the @p data param for the @ref ECORE_CON_EVENT_PROXY_BIND event
484  * @ingroup Ecore_Con_Socks_Group
485  * @since 1.2
486  */
487 struct _Ecore_Con_Event_Proxy_Bind
488 {
489    Ecore_Con_Server *server; /**< the server object connected to the proxy */
490    const char *ip;           /**< the proxy-bound ip address */
491    int port;                 /**< the proxy-bound port */
492 };
493
494 /**
495  * @struct _Ecore_Con_Event_Url_Data
496  * Used as the @p data param for the @ref ECORE_CON_EVENT_URL_DATA event
497  * @ingroup Ecore_Con_Url_Group
498  */
499 struct _Ecore_Con_Event_Url_Data
500 {
501    Ecore_Con_Url *url_con; /**< a pointer to the connection object */
502    int size; /**< the size of the current received data (in bytes) */
503    unsigned char data[1]; /**< the data received on this event */
504 };
505
506 /**
507  * @struct _Ecore_Con_Event_Url_Complete
508  * Used as the @p data param for the @ref ECORE_CON_EVENT_URL_COMPLETE event
509  * @ingroup Ecore_Con_Url_Group
510  */
511 struct _Ecore_Con_Event_Url_Complete
512 {
513    Ecore_Con_Url *url_con; /**< a pointer to the connection object */
514    int status; /**< HTTP status code of the operation (200, 404, 401, etc.) */
515 };
516
517 /**
518  * @struct _Ecore_Con_Event_Url_Progress
519  * Used as the @p data param for the @ref ECORE_CON_EVENT_URL_PROGRESS event
520  * @ingroup Ecore_Con_Url_Group
521  */
522 struct _Ecore_Con_Event_Url_Progress
523 {
524    Ecore_Con_Url *url_con; /**< a pointer to the connection object */
525    struct
526    {
527       double total; /**< total size of the downloading data (in bytes) */
528       double now; /**< current size of the downloading data (in bytes) */
529    } down; /**< download info */
530    struct
531    {
532       double total; /**< total size of the uploading data (in bytes) */
533       double now; /**< current size of the uploading data (in bytes) */
534    } up; /**< upload info */
535 };
536
537 /** A client has connected to the server */
538 EAPI extern int ECORE_CON_EVENT_CLIENT_ADD;
539 /** A client has disconnected from the server */
540 EAPI extern int ECORE_CON_EVENT_CLIENT_DEL;
541 /** A client experienced an error
542  * @since 1.1
543  */
544 EAPI extern int ECORE_CON_EVENT_CLIENT_ERROR;
545 /** A client connection has been upgraded to SSL
546  * @since 1.1
547  */
548 EAPI extern int ECORE_CON_EVENT_CLIENT_UPGRADE;
549 /** A server was created */
550 EAPI extern int ECORE_CON_EVENT_SERVER_ADD;
551 /** A server connection was lost */
552 EAPI extern int ECORE_CON_EVENT_SERVER_DEL;
553 /** A server experienced an error
554  * @since 1.1
555  */
556 EAPI extern int ECORE_CON_EVENT_SERVER_ERROR;
557 /** A server connection has been upgraded to SSL
558  * @since 1.1
559  */
560 EAPI extern int ECORE_CON_EVENT_SERVER_UPGRADE;
561 /** A server connection has sent data to its client
562  * @since 1.1
563  */
564 EAPI extern int ECORE_CON_EVENT_CLIENT_WRITE;
565 /** A server connection object has sent data
566  * @since 1.1
567  */
568 EAPI extern int ECORE_CON_EVENT_SERVER_WRITE;
569 /** A client connected to the server has sent data */
570 EAPI extern int ECORE_CON_EVENT_CLIENT_DATA;
571 /** A server connection object has data */
572 EAPI extern int ECORE_CON_EVENT_SERVER_DATA;
573 /** A server connection has successfully negotiated an ip:port binding
574  * @since 1.2
575  */
576 EAPI extern int ECORE_CON_EVENT_PROXY_BIND;
577 /** A URL object has data */
578 EAPI extern int ECORE_CON_EVENT_URL_DATA;
579 /** A URL object has completed its transfer to and from the server and can be reused */
580 EAPI extern int ECORE_CON_EVENT_URL_COMPLETE;
581 /** A URL object has made progress in its transfer */
582 EAPI extern int ECORE_CON_EVENT_URL_PROGRESS;
583
584 /**
585  * @}
586  */
587
588 /**
589  * @defgroup Ecore_Con_Lib_Group Ecore Connection Library Functions
590  *
591  * Utility functions that set up and shut down the Ecore Connection
592  * library.
593  *
594  * There's also ecore_con_lookup() that can be used to make simple asynchronous
595  * DNS lookups.
596  *
597  * A simple example of how to use these functions:
598  * @li @ref ecore_con_lookup_example_c
599  *
600  * @{
601  */
602
603 /**
604  * @typedef Ecore_Con_Dns_Cb
605  * A callback type for use with @ref ecore_con_lookup.
606  */
607 typedef void (*Ecore_Con_Dns_Cb)(const char *canonname,
608                                  const char *ip,
609                                  struct sockaddr *addr,
610                                  int addrlen,
611                                  void *data);
612
613 /**
614  * @typedef Ecore_Con_Type
615  * @enum _Ecore_Con_Type
616  * Types for an ecore_con client/server object.  A correct way to set this type is
617  * with an ECORE_CON_$TYPE, optionally OR'ed with an ECORE_CON_$USE if encryption is desired,
618  * and LOAD_CERT if the previously loaded certificate should be used.
619  * @code
620  * ECORE_CON_REMOTE_TCP | ECORE_CON_USE_TLS | ECORE_CON_LOAD_CERT
621  * @endcode
622  * @ingroup Ecore_Con_Server_Group
623  */
624 typedef enum _Ecore_Con_Type
625 {
626    /** Socket in ~/.ecore */
627    ECORE_CON_LOCAL_USER = 0,
628    /** Socket in /tmp */
629    ECORE_CON_LOCAL_SYSTEM = 1,
630    /** Abstract socket */
631    ECORE_CON_LOCAL_ABSTRACT = 2,
632    /** Remote server using TCP */
633    ECORE_CON_REMOTE_TCP = 3,
634    /** Remote multicast server */
635    ECORE_CON_REMOTE_MCAST = 4,
636    /** Remote server using UDP */
637    ECORE_CON_REMOTE_UDP = 5,
638    /** Remote broadcast using UDP */
639    ECORE_CON_REMOTE_BROADCAST = 6,
640    /** Remote connection sending packets immediately */
641    ECORE_CON_REMOTE_NODELAY = 7,
642    /** Remote connection sending data in large chunks
643     * @note Only available on Linux
644     * @since 1.2
645     */
646    ECORE_CON_REMOTE_CORK = 8,
647    /** Use SSL2: UNSUPPORTED. **/
648    ECORE_CON_USE_SSL2 = (1 << 4),
649    /** Use SSL3 */
650    ECORE_CON_USE_SSL3 = (1 << 5),
651    /** Use TLS */
652    ECORE_CON_USE_TLS = (1 << 6),
653    /** Use both TLS and SSL3 */
654    ECORE_CON_USE_MIXED = ECORE_CON_USE_SSL3 | ECORE_CON_USE_TLS,
655    /** Attempt to use the loaded certificate */
656    ECORE_CON_LOAD_CERT = (1 << 7)
657 } Ecore_Con_Type;
658
659 /**
660  * Initialises the Ecore_Con library.
661  * @return  Number of times the library has been initialised without being
662  *          shut down.
663  *
664  * @note This function already calls ecore_init() internally, so you don't need
665  * to call it explicitly.
666  */
667 EAPI int               ecore_con_init(void);
668
669 /**
670  * Shuts down the Ecore_Con library.
671  * @return  Number of times the library has been initialised without being
672  *          shut down.
673  * @note This function already calls ecore_shutdown() internally, so you don't
674  * need to call it explicitly unless you called ecore_init() explicitly too.
675  */
676 EAPI int               ecore_con_shutdown(void);
677
678 /**
679  * Do an asynchronous DNS lookup.
680  *
681  * @param name IP address or server name to translate.
682  * @param done_cb Callback to notify when done.
683  * @param data User data to be given to done_cb.
684  * @return @c EINA_TRUE if the request did not fail to be set up, @c EINA_FALSE
685  * if it failed.
686  *
687  * This function performs a DNS lookup on the hostname specified by @p name,
688  * then calls @p done_cb with the result and the @p data given as parameter.
689  * The result will be given to the @p done_cb as follows:
690  * @li @c canonname - the canonical name of the address
691  * @li @c ip - the resolved ip address
692  * @li @c addr - a pointer to the socket address
693  * @li @c addrlen - the length of the socket address, in bytes
694  * @li @c data - the data pointer given as parameter to ecore_con_lookup()
695  */
696 EAPI Eina_Bool         ecore_con_lookup(const char *name,
697                                             Ecore_Con_Dns_Cb done_cb,
698                                             const void *data);
699
700 /**
701  * @}
702  */
703
704 /**
705  * @defgroup Ecore_Con_SSL_Group Ecore Connection SSL Functions
706  *
707  * @{
708  */
709 EAPI int               ecore_con_ssl_available_get(void);
710 EAPI Eina_Bool         ecore_con_ssl_server_cert_add(Ecore_Con_Server *svr, const char *cert);
711 EAPI Eina_Bool         ecore_con_ssl_server_privkey_add(Ecore_Con_Server *svr, const char *key_file);
712 EAPI Eina_Bool         ecore_con_ssl_server_crl_add(Ecore_Con_Server *svr, const char *crl_file);
713 EAPI Eina_Bool         ecore_con_ssl_server_cafile_add(Ecore_Con_Server *svr, const char *ca_file);
714 EAPI void              ecore_con_ssl_server_verify(Ecore_Con_Server *svr);
715 EAPI void              ecore_con_ssl_server_verify_basic(Ecore_Con_Server *svr);
716 EAPI void              ecore_con_ssl_server_verify_name_set(Ecore_Con_Server *svr, const char *name);
717 EAPI const char       *ecore_con_ssl_server_verify_name_get(Ecore_Con_Server *svr);
718 EAPI Eina_Bool         ecore_con_ssl_server_upgrade(Ecore_Con_Server *svr, Ecore_Con_Type compl_type);
719 EAPI Eina_Bool         ecore_con_ssl_client_upgrade(Ecore_Con_Client *cl, Ecore_Con_Type compl_type);
720
721 /**
722  * @}
723  */
724
725 EAPI Ecore_Con_Socks *ecore_con_socks4_remote_add(const char *ip, int port, const char *username);
726 EAPI Eina_Bool        ecore_con_socks4_remote_exists(const char *ip, int port, const char *username);
727 EAPI void             ecore_con_socks4_remote_del(const char *ip, int port, const char *username);
728 EAPI Ecore_Con_Socks *ecore_con_socks5_remote_add(const char *ip, int port, const char *username, const char *password);
729 EAPI Eina_Bool        ecore_con_socks5_remote_exists(const char *ip, int port, const char *username, const char *password);
730 EAPI void             ecore_con_socks5_remote_del(const char *ip, int port, const char *username, const char *password);
731 EAPI void             ecore_con_socks_lookup_set(Ecore_Con_Socks *ecs, Eina_Bool enable);
732 EAPI Eina_Bool        ecore_con_socks_lookup_get(Ecore_Con_Socks *ecs);
733 EAPI void             ecore_con_socks_bind_set(Ecore_Con_Socks *ecs, Eina_Bool is_bind);
734 EAPI Eina_Bool        ecore_con_socks_bind_get(Ecore_Con_Socks *ecs);
735 EAPI unsigned int     ecore_con_socks_version_get(Ecore_Con_Socks *ecs);
736 EAPI void             ecore_con_socks_remote_del(Ecore_Con_Socks *ecs);
737 EAPI void             ecore_con_socks_apply_once(Ecore_Con_Socks *ecs);
738 EAPI void             ecore_con_socks_apply_always(Ecore_Con_Socks *ecs);
739
740 /**
741  * @defgroup Ecore_Con_Server_Group Ecore Connection Server Functions
742  *
743  * This group of functions is applied to an @ref Ecore_Con_Server object. It
744  * doesn't mean that they should be used in the server application, but on the
745  * server object. In fact, most of them should be used in the client
746  * application, when retrieving information or sending data.
747  *
748  * Setting up a server is very simple: you just need to start it with
749  * ecore_con_server_add() and setup some callbacks to the events
750  * @ref ECORE_CON_EVENT_CLIENT_ADD, @ref ECORE_CON_EVENT_CLIENT_DEL and
751  * @ref ECORE_CON_EVENT_CLIENT_DATA, that will be called when a client is
752  * communicating with the server:
753  *
754  * @code
755  * if (!(svr = ecore_con_server_add(ECORE_CON_REMOTE_TCP, "127.0.0.1", 8080, NULL)))
756  *   exit(1);
757  *
758  * ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_ADD, _add_cb, NULL);
759  * ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DEL, _del_cb, NULL);
760  * ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, _data_cb, NULL);
761  *
762  * ecore_main_loop_begin();
763  * @endcode
764  *
765  * The function ecore_con_server_connect() can be used to write a client that
766  * connects to a server. The resulting code will be very similar to the server
767  * code:
768  *
769  * @code
770  * if (!(svr = ecore_con_server_connect(ECORE_CON_REMOTE_TCP, "127.0.0.1", 8080, NULL)))
771  *   exit(1);
772  *
773  * ecore_event_handler_add(ECORE_CON_EVENT_SERVER_ADD, _add_cb, NULL);
774  * ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DEL, _del_cb, NULL);
775  * ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DATA, _data_cb, NULL);
776  *
777  * ecore_main_loop_begin();
778  * @endcode
779  *
780  * After these two pieces of code are executed, respectively, in the server and
781  * client code, the server will be up and running and the client will try to
782  * connect to it. The connection, with its subsequent messages being sent from
783  * server to client and client to server, can be represented in the following
784  * sequence diagram:
785  *
786  * @htmlonly
787  * <img src="ecore_con-client-server.png" style="max-width: 400px"/>
788  * <a href="ecore_con-client-server.png">Full size</a>
789  * @endhtmlonly
790  *
791  * @image rtf ecore_con-client-server.png
792  * @image latex ecore_con-client-server.eps width=\textwidth
793  *
794  * Please notice the important difference between these two codes: the first is
795  * used for writing a @b server, while the second should be used for writing a
796  * @b client.
797  *
798  * A reference for the @c client functions can be found at @ref
799  * Ecore_Con_Client_Group.
800  *
801  * Examples of usage for this API can be found here:
802  * @li @ref ecore_con_server_simple_example_c
803  * @li @ref ecore_con_client_simple_example_c
804  *
805  * @{
806  */
807
808 /**
809  * Creates a server to listen for connections.
810  *
811  * @param  type The connection type.
812  * @param  name       Name to associate with the socket.  It is used when
813  *                    generating the socket name of a Unix socket, or for
814  *                    determining what host to listen on for TCP sockets.
815  *                    @c NULL will not be accepted.
816  * @param  port       Number to identify socket.  When a Unix socket is used,
817  *                    it becomes part of the socket name.  When a TCP socket
818  *                    is used, it is used as the TCP port.
819  * @param  data       Data to associate with the created Ecore_Con_Server
820  *                    object.
821  * @return A new Ecore_Con_Server.
822  *
823  * The socket on which the server listens depends on the connection
824  * type:
825  * @li If @a type is @c ECORE_CON_LOCAL_USER, the server will listen on
826  *     the Unix socket "~/.ecore/[name]/[port]".
827  * @li If @a type is @c ECORE_CON_LOCAL_SYSTEM, the server will listen
828  *     on Unix socket "/tmp/.ecore_service|[name]|[port]".
829  * @li If @a type is @c ECORE_CON_REMOTE_TCP, the server will listen
830  *     on TCP port @c port.
831  *
832  * More information about the @p type can be found at @ref _Ecore_Con_Type.
833  *
834  * The @p data parameter can be fetched later using ecore_con_server_data_get()
835  * or changed with ecore_con_server_data_set().
836  */
837 EAPI Ecore_Con_Server *ecore_con_server_add(Ecore_Con_Type type,
838                                             const char *name, int port,
839                                             const void *data);
840
841 /**
842  * Creates a connection to the specified server and returns an associated object.
843  *
844  * @param  type The connection type.
845  * @param  name       Name used when determining what socket to connect to.
846  *                    It is used to generate the socket name when the socket
847  *                    is a Unix socket.  It is used as the hostname when
848  *                    connecting with a TCP socket.
849  * @param  port       Number to identify the socket to connect to.  Used when
850  *                    generating the socket name for a Unix socket, or as the
851  *                    TCP port when connecting to a TCP socket.
852  * @param  data       Data to associate with the created Ecore_Con_Server
853  *                    object.
854  * @return A new Ecore_Con_Server.
855  *
856  * The socket to which the connection is made depends on the connection type:
857  * @li If @a type is @c ECORE_CON_LOCAL_USER, the function will
858  *     connect to the server at the Unix socket
859  *     "~/.ecore/[name]/[port]".
860  * @li If @a type is @c ECORE_CON_LOCAL_SYSTEM, the function will
861  *     connect to the server at the Unix socket
862  *     "/tmp/.ecore_service|[name]|[port]".
863  * @li If @a type is @c ECORE_CON_REMOTE_TCP, the function will
864  *     connect to the server at the TCP port "[name]:[port]".
865  *
866  * More information about the @p type can be found at @ref _Ecore_Con_Type.
867  *
868  * This function won't block. It will either succeed, or fail due to invalid
869  * parameters, failed memory allocation, etc., returning @c NULL on that case.
870  *
871  * However, even if this call returns a valid @ref Ecore_Con_Server, the
872  * connection will only be successfully completed if an event of type
873  * @ref ECORE_CON_EVENT_SERVER_ADD is received. If it fails to complete, an
874  * @ref ECORE_CON_EVENT_SERVER_DEL will be received.
875  *
876  * The @p data parameter can be fetched later using ecore_con_server_data_get()
877  * or changed with ecore_con_server_data_set().
878  */
879 EAPI Ecore_Con_Server *ecore_con_server_connect(Ecore_Con_Type type,
880                                                 const char *name, int port,
881                                                 const void *data);
882 /**
883  * Closes the connection and frees the given server.
884  *
885  * @param   svr The given server.
886  * @return  Data associated with the server when it was created.
887  *
888  * All the clients connected to this server will be disconnected.
889  *
890  * @see ecore_con_server_add, ecore_con_server_connect
891  */
892 EAPI void *            ecore_con_server_del(Ecore_Con_Server *svr);
893
894 /**
895  * Retrieves the data associated with the given server.
896  *
897  * @param   svr The given server.
898  * @return  The associated data.
899  *
900  * @see ecore_con_server_data_set()
901  */
902 EAPI void *            ecore_con_server_data_get(Ecore_Con_Server *svr);
903 /**
904  * Sets the data associated with the given server.
905  *
906  * @param svr The given server.
907  * @param data The data to associate with @p svr
908  * @return  The previously associated data, if any.
909  *
910  * @see ecore_con_server_data_get()
911  */
912 EAPI void *            ecore_con_server_data_set(Ecore_Con_Server *svr,
913                                                  void *data);
914 /**
915  * Retrieves whether the given server is currently connected.
916  *
917  * @param   svr The given server.
918  * @return @c EINA_TRUE if the server is connected, @c EINA_FALSE otherwise.
919  */
920 EAPI Eina_Bool         ecore_con_server_connected_get(Ecore_Con_Server *svr);
921 /**
922  * Retrieves the current list of clients.
923  *
924  * @param   svr The given server.
925  * @return  The list of clients on this server.
926  *
927  * Each node in the returned list points to an @ref Ecore_Con_Client. This list
928  * cannot be modified or freed. It can also change if new clients are connected
929  * or disconnected, and will become invalid when the server is deleted/freed.
930  */
931 EAPI const Eina_List * ecore_con_server_clients_get(Ecore_Con_Server *svr);
932
933 /**
934  * Retrieves the name of server.
935  *
936  * @param   svr The given server.
937  * @return  The name of the server.
938  *
939  * The name returned is the name used to connect on this server.
940  */
941 EAPI const char *      ecore_con_server_name_get(Ecore_Con_Server *svr);
942
943 /**
944  * Retrieves the server port in use.
945  *
946  * @param   svr The given server.
947  * @return  The server port in use.
948  *
949  * The port where the server is listening for connections.
950  */
951 EAPI int               ecore_con_server_port_get(Ecore_Con_Server *svr);
952 /**
953  * @brief Check how long a server has been connected
954  *
955  * @param svr The server to check
956  * @return The total time, in seconds, that the server has been
957  * connected/running
958  *
959  * This function is used to find out the time that has been elapsed since
960  * ecore_con_server_add() succeeded.
961  */
962 EAPI double            ecore_con_server_uptime_get(Ecore_Con_Server *svr);
963 /**
964  * Sends the given data to the given server.
965  *
966  * @param   svr  The given server.
967  * @param   data The given data.
968  * @param   size Length of the data, in bytes, to send.
969  * @return  The number of bytes sent.  @c 0 will be returned if there is an
970  *          error.
971  *
972  * This function will send the given data to the server as soon as the program
973  * is back to the main loop. Thus, this function returns immediately
974  * (non-blocking). If the data needs to be sent @b now, call
975  * ecore_con_server_flush() after this one.
976  *
977  * @see ecore_con_client_send()
978  * @see ecore_con_server_flush()
979  */
980 EAPI int               ecore_con_server_send(Ecore_Con_Server *svr,
981                                              const void *data,
982                                              int size);
983 /**
984  * Sets a limit on the number of clients that can be handled concurrently
985  * by the given server, and a policy on what to do if excess clients try to
986  * connect.
987  *
988  * @param   svr           The given server.
989  * @param   client_limit  The maximum number of clients to handle
990  *                        concurrently.  -1 means unlimited (default).  0
991  *                        effectively disables the server.
992  * @param   reject_excess_clients  Set to 1 to automatically disconnect
993  *                        excess clients as soon as they connect if you are
994  *                        already handling client_limit clients.  Set to 0
995  *                        (default) to just hold off on the "accept()"
996  *                        system call until the number of active clients
997  *                        drops. This causes the kernel to queue up to 4096
998  *                        connections (or your kernel's limit, whichever is
999  *                        lower).
1000  *
1001  * Beware that if you set this once ecore is already running, you may
1002  * already have pending CLIENT_ADD events in your event queue.  Those
1003  * clients have already connected and will not be affected by this call.
1004  * Only clients subsequently trying to connect will be affected.
1005  */
1006 EAPI void              ecore_con_server_client_limit_set(Ecore_Con_Server *svr,
1007                                                          int client_limit,
1008                                                          char reject_excess_clients);
1009 /**
1010  * Gets the IP address of a server that has been connected to.
1011  *
1012  * @param   svr           The given server.
1013  * @return  A pointer to an internal string that contains the IP address of
1014  *          the connected server in the form "XXX.YYY.ZZZ.AAA" IP notation.
1015  *          This string should not be modified or trusted to stay valid after
1016  *          deletion for the @p svr object. If no IP is known @c NULL is
1017  *          returned.
1018  */
1019 EAPI const char *      ecore_con_server_ip_get(Ecore_Con_Server *svr);
1020 /**
1021  * Flushes all pending data to the given server.
1022  *
1023  * @param   svr           The given server.
1024  *
1025  * This function will block until all data is sent to the server.
1026  *
1027  * @see ecore_con_server_send()
1028  * @see ecore_con_client_flush()
1029  */
1030 EAPI void              ecore_con_server_flush(Ecore_Con_Server *svr);
1031 /**
1032  * Set the default time after which an inactive client will be disconnected
1033  *
1034  * @param svr The server object
1035  * @param timeout The timeout, in seconds, to disconnect after
1036  *
1037  * This function is used by the server to set the default idle timeout on
1038  * clients. If the any of the clients becomes idle for a time higher than this
1039  * value, it will be disconnected. A value of < 1 disables the idle timeout.
1040  *
1041  * This timeout is not affected by the one set by
1042  * ecore_con_client_timeout_set(). A client will be disconnected whenever the
1043  * client or the server timeout is reached. That means, the lower timeout value
1044  * will be used for that client if ecore_con_client_timeout_set() is used on it.
1045  *
1046  * @see ecore_con_server_timeout_get()
1047  * @see ecore_con_client_timeout_set()
1048  */
1049 EAPI void              ecore_con_server_timeout_set(Ecore_Con_Server *svr, double timeout);
1050 /**
1051  * Get the default time after which an inactive client will be disconnected
1052  *
1053  * @param svr The server object
1054  * @return The timeout, in seconds, to disconnect after
1055  *
1056  * This function is used to get the idle timeout for clients.  A value of < 1
1057  * means the idle timeout is disabled.
1058  *
1059  * @see ecore_con_server_timeout_set()
1060  * @see ecore_con_client_timeout_get()
1061  */
1062 EAPI double            ecore_con_server_timeout_get(Ecore_Con_Server *svr);
1063
1064 /**
1065  * Get the fd that the server is connected to
1066  *
1067  * @param svr The server object
1068  * @return The fd, or -1 on failure
1069  *
1070  * This function returns the fd which is used by the underlying server connection.
1071  * It should not be tampered with unless you REALLY know what you are doing.
1072  * @note This function is only valid for servers created with ecore_con_server_connect()
1073  * @warning Seriously. Don't use this unless you know what you are doing.
1074  * @since 1.1
1075  */
1076 EAPI int               ecore_con_server_fd_get(Ecore_Con_Server *svr);
1077
1078 /**
1079  * Get the fd that the client is connected to
1080  *
1081  * @param cl The client object
1082  * @return The fd, or -1 on failure
1083  *
1084  * This function returns the fd which is used by the underlying client connection.
1085  * It should not be tampered with unless you REALLY know what you are doing.
1086  * @since 1.1
1087  */
1088 EAPI int               ecore_con_client_fd_get(Ecore_Con_Client *cl);
1089 /**
1090  * @}
1091  */
1092
1093 /**
1094  * @defgroup Ecore_Con_Client_Group Ecore Connection Client Functions
1095  *
1096  * Functions to communicate with and/or set options on a client.
1097  *
1098  * This set of functions, as explained in @ref Ecore_Con_Server_Group, is used
1099  * to send data to a client, or to set options and get information about this
1100  * client. Most of them should be used on the server, applied on the client
1101  * object.
1102  *
1103  * If you need to implement a client, the way to connect to a server is
1104  * described in @ref Ecore_Con_Server_Group.
1105  *
1106  * An example of usage of these functions can be found at:
1107  * @li @ref ecore_con_client_simple_example_c
1108  *
1109  * @{
1110  */
1111
1112 /**
1113  * Sends the given data to the given client.
1114  *
1115  * @param   cl   The given client.
1116  * @param   data The given data.
1117  * @param   size Length of the data, in bytes, to send.
1118  * @return  The number of bytes sent.  @c 0 will be returned if there is an
1119  *          error.
1120  *
1121  * This function will send the given data to the client as soon as the program
1122  * is back to the main loop. Thus, this function returns immediately
1123  * (non-blocking). If the data needs to be sent @b now, call
1124  * ecore_con_client_flush() after this one.
1125  *
1126  * @see ecore_con_server_send()
1127  * @see ecore_con_client_flush()
1128  */
1129 EAPI int               ecore_con_client_send(Ecore_Con_Client *cl,
1130                                              const void *data,
1131                                              int size);
1132 /**
1133  * Retrieves the server representing the socket the client has
1134  * connected to.
1135  *
1136  * @param   cl The given client.
1137  * @return  The server that the client connected to.
1138  */
1139 EAPI Ecore_Con_Server *ecore_con_client_server_get(Ecore_Con_Client *cl);
1140 /**
1141  * Closes the connection and frees memory allocated to the given client.
1142  *
1143  * @param   cl The given client.
1144  * @return  Data associated with the client.
1145  */
1146 EAPI void *            ecore_con_client_del(Ecore_Con_Client *cl);
1147 /**
1148  * Sets the data associated with the given client to @p data.
1149  *
1150  * @param   cl   The given client.
1151  * @param   data What to set the data to.
1152  */
1153 EAPI void              ecore_con_client_data_set(Ecore_Con_Client *cl,
1154                                                  const void       *data);
1155 /**
1156  * Retrieves the data associated with the given client.
1157  *
1158  * @param   cl The given client.
1159  * @return  The data associated with @p cl.
1160  */
1161 EAPI void *            ecore_con_client_data_get(Ecore_Con_Client *cl);
1162
1163 /**
1164  * Gets the IP address of a client that has connected.
1165  *
1166  * @param   cl            The given client.
1167  * @return  A pointer to an internal string that contains the IP address of
1168  *          the connected client in the form "XXX.YYY.ZZZ.AAA" IP notation.
1169  *
1170  * The returned string should not be modified, freed or trusted to stay valid
1171  * after deletion for the @p cl object. If no IP is known @c NULL is returned.
1172  */
1173 EAPI const char *      ecore_con_client_ip_get(Ecore_Con_Client *cl);
1174 /**
1175  * Flushes all pending data to the given client.
1176  *
1177  * @param   cl            The given client.
1178  *
1179  * This function will block until all data is sent to the server.
1180  *
1181  * @see ecore_con_client_send()
1182  * @see ecore_con_server_flush()
1183  */
1184 EAPI void              ecore_con_client_flush(Ecore_Con_Client *cl);
1185 /**
1186  * @brief Check how long a client has been connected
1187  *
1188  * @param cl The client to check
1189  * @return The total time, in seconds, that the client has been connected to
1190  * the server
1191  *
1192  * This function is used to find out how long a client has been connected for.
1193  */
1194 EAPI double            ecore_con_client_uptime_get(Ecore_Con_Client *cl);
1195 /**
1196  * Get the default time after which the client will be disconnected when
1197  * inactive
1198  *
1199  * @param cl The client object
1200  * @return The timeout, in seconds, to disconnect after
1201  *
1202  * This function is used to get the idle timeout for a client.  A value of < 1
1203  * means the idle timeout is disabled.
1204  *
1205  * @see ecore_con_client_timeout_set()
1206  */
1207 EAPI double            ecore_con_client_timeout_get(Ecore_Con_Client *cl);
1208 /**
1209  * Set the time after which the client will be disconnected when inactive
1210  *
1211  * @param cl The client object
1212  * @param timeout The timeout, in seconds, to disconnect after
1213  *
1214  * This function is used by the server to set the idle timeout on a specific
1215  * client. If the client becomes idle for a time higher than this value, it will
1216  * be disconnected. A value of < 1 disables the idle timeout.
1217  *
1218  * This timeout is not affected by the one set by
1219  * ecore_con_server_timeout_set(). A client will be disconnected whenever the
1220  * client or the server timeout is reached. That means, the lower timeout value
1221  * will be used for that client if ecore_con_server_timeout_set() is used on the
1222  * server.
1223  *
1224  * @see ecore_con_client_timeout_get()
1225  * @see ecore_con_server_timeout_set()
1226  */
1227 EAPI void              ecore_con_client_timeout_set(Ecore_Con_Client *cl, double timeout);
1228 /**
1229  * Returns whether the client is still connected
1230  *
1231  * @param   cl The given client.
1232  * @return @c EINA_TRUE if connected, @c EINA_FALSE otherwise.
1233  */
1234 EAPI Eina_Bool         ecore_con_client_connected_get(Ecore_Con_Client *cl);
1235 /**
1236  * @brief Return the port that the client has connected to
1237  *
1238  * @param cl The client
1239  * @return The port that @p cl has connected to, or -1 on error
1240  * Use this function to return the port on which a given client has connected.
1241  */
1242 EAPI int               ecore_con_client_port_get(Ecore_Con_Client *cl);
1243
1244
1245
1246 /**
1247  * @}
1248  */
1249
1250 /**
1251  * @defgroup Ecore_Con_Url_Group Ecore URL Connection Functions
1252  *
1253  * Utility functions that set up, use and shut down the Ecore URL
1254  * Connection library.
1255  *
1256  * These functions are a shortcut to make it easy to perform http requests
1257  * (POST, GET, etc).
1258  *
1259  * Brief usage:
1260  * 1. Create an Ecore_Con_Url object with ecore_con_url_new(url);
1261  * 2. Register to receive the #ECORE_CON_EVENT_URL_COMPLETE event
1262  *    (and optionally the #ECORE_CON_EVENT_URL_DATA and
1263  *    #ECORE_CON_EVENT_URL_PROGRESS event to receive
1264  *    the response, e.g. for HTTP/FTP downloads)
1265  * 3. Perform the operation with ecore_con_url_get(...);
1266  *
1267  * Note that it is good to reuse @ref Ecore_Con_Url objects wherever possible,
1268  * but bear in mind that each one can only perform one operation at a time.  You
1269  * need to wait for the #ECORE_CON_EVENT_URL_COMPLETE event before re-using or
1270  * destroying the object.
1271  *
1272  * If it's necessary to change the @ref Ecore_Con_Url object url, use
1273  * ecore_con_url_url_set().
1274  *
1275  * Simple Usage 1 (HTTP GET):
1276  * @code
1277  *   ecore_con_url_url_set(url_con, "http://www.google.com");
1278  *   ecore_con_url_get(url_con);
1279  * @endcode
1280  *
1281  * Simple usage 2 (HTTP POST):
1282  * @code
1283  *   ecore_con_url_url_set(url_con, "http://www.example.com/post_handler.cgi");
1284  *   ecore_con_url_post(url_con, data, data_length, "multipart/form-data");
1285  * @endcode
1286  *
1287  * Simple Usage 3 (FTP download):
1288  * @code
1289  *   fd = creat(filename, 0644)
1290  *   ecore_con_url_url_set(url_con, "ftp://ftp.example.com/pub/myfile");
1291  *   ecore_con_url_fd_set(url_con, fd);
1292  *   ecore_con_url_get(url_con);
1293  * @endcode
1294  *
1295  * Simple Usage 4 (FTP upload as ftp://ftp.example.com/file):
1296  * @code
1297  *   ecore_con_url_url_set(url_con, "ftp://ftp.example.com");
1298  *   ecore_con_url_ftp_upload(url_con, "/tmp/file", "user", "pass", NULL);
1299  * @endcode
1300  *
1301  * Simple Usage 5 (FTP upload as ftp://ftp.example.com/dir/file):
1302  * @code
1303  *   ecore_con_url_url_set(url_con, "ftp://ftp.example.com");
1304  *   ecore_con_url_ftp_upload(url_con, "/tmp/file", "user", "pass","dir");
1305  * @endcode
1306  *
1307  * These are complete examples for the API:
1308  * @li @ref ecore_con_url_download_example.c "Downloading a file"
1309  * @li @ref ecore_con_url_headers_example.c "Setting many options for the connection"
1310  *
1311  * @{
1312  */
1313
1314 /**
1315  * @typedef Ecore_Con_Url_Time
1316  * @enum _Ecore_Con_Url_Time
1317  * The type of condition to use when making an HTTP request dependent on time,
1318  * so that headers such as "If-Modified-Since" are used.
1319  */
1320 typedef enum _Ecore_Con_Url_Time
1321 {
1322    /**
1323     * Do not place time restrictions on the HTTP requests.
1324     */
1325    ECORE_CON_URL_TIME_NONE = 0,
1326    /**
1327     * Add the "If-Modified-Since" HTTP header, so that the request is performed
1328     * by the server only if the target has been modified since the time value
1329     * passed to it in the request.
1330     */
1331    ECORE_CON_URL_TIME_IFMODSINCE,
1332    /**
1333     * Add the "If-Unmodified-Since" HTTP header, so that the request is
1334     * performed by the server only if the target has NOT been modified since
1335     * the time value passed to it in the request.
1336     */
1337    ECORE_CON_URL_TIME_IFUNMODSINCE
1338 } Ecore_Con_Url_Time;
1339
1340 /**
1341  * @typedef Ecore_Con_Url_Http_Version
1342  * @enum _Ecore_Con_Url_Http_Version
1343  * The http version to use
1344  * @since 1.2
1345  */
1346 typedef enum _Ecore_Con_Url_Http_Version
1347 {
1348    /**
1349     * HTTP version 1.0
1350     * @since 1.2
1351     */
1352    ECORE_CON_URL_HTTP_VERSION_1_0,
1353    /**
1354     * HTTP version 1.1 (default)
1355     * @since 1.2
1356     */
1357    ECORE_CON_URL_HTTP_VERSION_1_1
1358 } Ecore_Con_Url_Http_Version;
1359
1360 /**
1361  * Change the HTTP version used for the request
1362  * @param url_con Connection object through which the request will be sent.
1363  * @param version The version to be used
1364  * @return @c EINA_TRUE on success, @c EINA_FALSE on failure to change version.
1365  * @since 1.2
1366  * @see ecore_con_url_pipeline_get()
1367  */
1368 EAPI Eina_Bool         ecore_con_url_http_version_set(Ecore_Con_Url *url_con, Ecore_Con_Url_Http_Version version);
1369    
1370 /**
1371  * Initialises the Ecore_Con_Url library.
1372  * @return Number of times the library has been initialised without being
1373  *          shut down.
1374  *
1375  * @note This function doesn't call ecore_con_init(). You still need to call it
1376  * explicitly before calling this one.
1377  */
1378 EAPI int               ecore_con_url_init(void);
1379
1380 /**
1381  * Shuts down the Ecore_Con_Url library.
1382  * @return  Number of calls that still uses Ecore_Con_Url
1383  *
1384  * @note This function doesn't call ecore_con_shutdown(). You still need to call
1385  * it explicitly after calling this one.
1386  */
1387 EAPI int               ecore_con_url_shutdown(void);
1388
1389 /**
1390  * Enable or disable HTTP 1.1 pipelining.
1391  * @param enable @c EINA_TRUE will turn it on, @c EINA_FALSE will disable it.
1392  *
1393  * Pipelining allows to send one request after another one, without having to
1394  * wait for the reply of the first request. The respective replies are received
1395  * in the order that the requests were sent.
1396  *
1397  * Enabling this feature will be valid for all requests done using @c
1398  * ecore_con_url.
1399  *
1400  * See http://en.wikipedia.org/wiki/HTTP_pipelining for more info.
1401  *
1402  * @see ecore_con_url_pipeline_get()
1403  */
1404 EAPI void              ecore_con_url_pipeline_set(Eina_Bool enable);
1405 /**
1406  * Is HTTP 1.1 pipelining enable ?
1407  * @return @c EINA_TRUE if it is enable.
1408  *
1409  * @see ecore_con_url_pipeline_set()
1410  */
1411 EAPI Eina_Bool         ecore_con_url_pipeline_get(void);
1412
1413 /**
1414  * Creates and initializes a new Ecore_Con_Url connection object.
1415  *
1416  * @param url URL that will receive requests. Can be changed using
1417  *            ecore_con_url_url_set.
1418  *
1419  * @return @c NULL on error, a new Ecore_Con_Url on success.
1420  *
1421  * Creates and initializes a new Ecore_Con_Url connection object that can be
1422  * used for sending requests.
1423  *
1424  * @see ecore_con_url_custom_new()
1425  * @see ecore_con_url_url_set()
1426  */
1427 EAPI Ecore_Con_Url *   ecore_con_url_new(const char *url);
1428 /**
1429  * Creates a custom connection object.
1430  *
1431  * @param url URL that will receive requests
1432  * @param custom_request Custom request (e.g. GET, POST, HEAD, PUT, etc)
1433  *
1434  * @return @c NULL on error, a new Ecore_Con_Url on success.
1435  *
1436  * Creates and initializes a new Ecore_Con_Url for a custom request (e.g. HEAD,
1437  * SUBSCRIBE and other obscure HTTP requests). This object should be used like
1438  * one created with ecore_con_url_new().
1439  *
1440  * @see ecore_con_url_new()
1441  * @see ecore_con_url_url_set()
1442  */
1443 EAPI Ecore_Con_Url *   ecore_con_url_custom_new(const char *url,
1444                                                 const char *custom_request);
1445 /**
1446  * Destroys a Ecore_Con_Url connection object.
1447  *
1448  * @param url_con Connection object to free.
1449  *
1450  * @see ecore_con_url_new()
1451  */
1452 EAPI void              ecore_con_url_free(Ecore_Con_Url *url_con);
1453 /**
1454  * Sets the URL to send the request to.
1455  *
1456  * @param url_con Connection object through which the request will be sent.
1457  * @param url URL that will receive the request
1458  *
1459  * @return @c EINA_TRUE on success, @c EINA_FALSE on error.
1460  */
1461 EAPI Eina_Bool         ecore_con_url_url_set(Ecore_Con_Url *url_con,
1462                                              const char *url);
1463 /**
1464  * Gets the URL to send the request to.
1465  *
1466  * @param url_con Connection object through which the request will be sent.
1467  * @return URL that will receive the request, @c NULL on failure. URL is
1468  * stringshared.
1469  * @since 1.1
1470  */
1471 EAPI const char       *ecore_con_url_url_get(Ecore_Con_Url *url_con);
1472 /**
1473  * Associates data with a connection object.
1474  *
1475  * @param url_con Connection object to associate data.
1476  * @param data Data to be set.
1477  *
1478  * Associates data with a connection object, which can be retrieved later with
1479  * ecore_con_url_data_get()).
1480  *
1481  * @see ecore_con_url_data_get()
1482  */
1483 EAPI void              ecore_con_url_data_set(Ecore_Con_Url *url_con,
1484                                               void *data);
1485 /**
1486  * Retrieves data associated with a Ecore_Con_Url connection object.
1487  *
1488  * @param url_con Connection object to retrieve data from.
1489  *
1490  * @return Data associated with the given object.
1491  *
1492  * Retrieves data associated with a Ecore_Con_Url connection object (previously
1493  * set with ecore_con_url_data_set()).
1494  *
1495  * @see ecore_con_url_data_set()
1496  */
1497 EAPI void *            ecore_con_url_data_get(Ecore_Con_Url *url_con);
1498 /**
1499  * Adds an additional header to the request connection object.
1500  *
1501  * @param url_con Connection object
1502  * @param key Header key
1503  * @param value Header value
1504  *
1505  * Adds an additional header (User-Agent, Content-Type, etc.) to the request
1506  * connection object. This addition will be valid for only one
1507  * ecore_con_url_get() or ecore_con_url_post() call.
1508  *
1509  * Some functions like ecore_con_url_time() also add headers to the request.
1510  *
1511  * @see ecore_con_url_get()
1512  * @see ecore_con_url_post()
1513  * @see ecore_con_url_additional_headers_clear()
1514  */
1515 EAPI void              ecore_con_url_additional_header_add(Ecore_Con_Url *url_con,
1516                                                            const char *key,
1517                                                            const char *value);
1518 /**
1519  * Cleans additional headers.
1520  *
1521  * @param url_con Connection object to clean additional headers.
1522  *
1523  * Cleans additional headers associated with a connection object (previously
1524  * added with ecore_con_url_additional_header_add()).
1525  *
1526  * @see ecore_con_url_additional_header_add()
1527  * @see ecore_con_url_get()
1528  * @see ecore_con_url_post()
1529  */
1530 EAPI void              ecore_con_url_additional_headers_clear(Ecore_Con_Url *url_con);
1531 /**
1532  * Retrieves headers from last request sent.
1533  *
1534  * @param url_con Connection object to retrieve response headers from.
1535  *
1536  * Retrieves a list containing the response headers. This function should be
1537  * used after an ECORE_CON_EVENT_URL_COMPLETE event (headers should normally be
1538  * ready at that time).
1539  *
1540  * @return List of response headers. This list must not be modified by the user.
1541  */
1542 EAPI const Eina_List * ecore_con_url_response_headers_get(Ecore_Con_Url *url_con);
1543 /**
1544  * Setup a file for receiving response data.
1545  *
1546  * @param url_con Connection object to set file
1547  * @param fd File descriptor associated with the file. A negative value will
1548  * unset any previously set fd.
1549  *
1550  * Sets up a file to have response data written into. Note that
1551  * ECORE_CON_EVENT_URL_DATA events will not be emitted if a file has been set to
1552  * receive the response data.
1553  *
1554  * This call can be used to easily setup a file where the downloaded data will
1555  * be saved.
1556  */
1557 EAPI void              ecore_con_url_fd_set(Ecore_Con_Url *url_con, int fd);
1558 /**
1559  * Retrieves the number of bytes received.
1560  *
1561  * Retrieves the number of bytes received on the last request of the given
1562  * connection object.
1563  *
1564  * @param url_con Connection object which the request was sent on.
1565  *
1566  * @return Number of bytes received on request.
1567  *
1568  * @see ecore_con_url_get()
1569  * @see ecore_con_url_post()
1570  */
1571 EAPI int               ecore_con_url_received_bytes_get(Ecore_Con_Url *url_con);
1572 /**
1573  * Sets url_con to use http auth, with given username and password, "safely" or not.
1574  *
1575  * @param url_con Connection object to perform a request on, previously created
1576  *    with ecore_con_url_new() or ecore_con_url_custom_new().
1577  * @param username Username to use in authentication
1578  * @param password Password to use in authentication
1579  * @param safe Whether to use "safer" methods (eg, NOT http basic auth)
1580  *
1581  * @return @c EINA_TRUE on success, @c EINA_FALSE on error.
1582  *
1583  * @attention Requires libcurl >= 7.19.1 to work, otherwise will always return
1584  * @c 0.
1585  */
1586 EAPI Eina_Bool         ecore_con_url_httpauth_set(Ecore_Con_Url *url_con,
1587                                                   const char *username,
1588                                                   const char *password,
1589                                                   Eina_Bool safe);
1590 /**
1591  * Sends a get request.
1592  *
1593  * @param url_con Connection object to perform a request on, previously created
1594  *
1595  * @return @c EINA_TRUE on success, @c EINA_FALSE on error.
1596  *
1597  * The request is performed immediately, but you need to setup event handlers
1598  * for #ECORE_CON_EVENT_URL_DATA, #ECORE_CON_EVENT_URL_COMPLETE or
1599  * #ECORE_CON_EVENT_URL_PROGRESS to get more information about its result.
1600  *
1601  * @see ecore_con_url_custom_new()
1602  * @see ecore_con_url_additional_headers_clear()
1603  * @see ecore_con_url_additional_header_add()
1604  * @see ecore_con_url_data_set()
1605  * @see ecore_con_url_data_get()
1606  * @see ecore_con_url_response_headers_get()
1607  * @see ecore_con_url_time()
1608  * @see ecore_con_url_post()
1609  */
1610 EAPI Eina_Bool         ecore_con_url_get(Ecore_Con_Url *url_con);
1611 /**
1612  * Sends a post request.
1613  *
1614  * @param url_con Connection object to perform a request on, previously created
1615  *                with ecore_con_url_new() or ecore_con_url_custom_new().
1616  * @param data    Payload (data sent on the request). Can be @c NULL.
1617  * @param length  Payload length. If @c -1, rely on automatic length
1618  *                calculation via @c strlen() on @p data.
1619  * @param content_type Content type of the payload (e.g. text/xml). Can be @c
1620  * NULL.
1621  *
1622  * @return @c EINA_TRUE on success, @c EINA_FALSE on error.
1623  *
1624  * The request starts immediately, but you need to setup event handlers
1625  * for #ECORE_CON_EVENT_URL_DATA, #ECORE_CON_EVENT_URL_COMPLETE or
1626  * #ECORE_CON_EVENT_URL_PROGRESS to get more information about its result.
1627  *
1628  * This call won't block your main loop.
1629  *
1630  * @see ecore_con_url_custom_new()
1631  * @see ecore_con_url_additional_headers_clear()
1632  * @see ecore_con_url_additional_header_add()
1633  * @see ecore_con_url_data_set()
1634  * @see ecore_con_url_data_get()
1635  * @see ecore_con_url_response_headers_get()
1636  * @see ecore_con_url_time()
1637  * @see ecore_con_url_get()
1638  */
1639 EAPI Eina_Bool         ecore_con_url_post(Ecore_Con_Url *url_con,
1640                                           const void *data, long length,
1641                                           const char *content_type);
1642 /**
1643  * Sets whether HTTP requests should be conditional, dependent on
1644  * modification time.
1645  *
1646  * @param url_con   Ecore_Con_Url to act upon.
1647  * @param time_condition Condition to use for HTTP requests.
1648  * @param timestamp Time since 1 Jan 1970 to use in the condition.
1649  *
1650  * This function may set the header "If-Modified-Since" or
1651  * "If-Unmodified-Since", depending on the value of @p time_condition, with the
1652  * value @p timestamp.
1653  *
1654  * @sa ecore_con_url_get()
1655  * @sa ecore_con_url_post()
1656  */
1657 EAPI void              ecore_con_url_time(Ecore_Con_Url *url_con,
1658                                           Ecore_Con_Url_Time time_condition,
1659                                           double timestamp);
1660
1661 /**
1662  * @brief Uploads a file to an ftp site.
1663  *
1664  * @param url_con The Ecore_Con_Url object to send with
1665  * @param filename The path to the file to send
1666  * @param user The username to log in with
1667  * @param pass The password to log in with
1668  * @param upload_dir The directory to which the file should be uploaded
1669  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
1670  *
1671  * Upload @p filename to an ftp server set in @p url_con using @p user
1672  * and @p pass to directory @p upload_dir
1673  */
1674 EAPI Eina_Bool         ecore_con_url_ftp_upload(Ecore_Con_Url *url_con,
1675                                                 const char *filename,
1676                                                 const char *user,
1677                                                 const char *pass,
1678                                                 const char *upload_dir);
1679 /**
1680  * Toggle libcurl's verbose output.
1681  *
1682  * @param url_con Ecore_Con_Url instance which will be acted upon.
1683  * @param verbose Whether or not to enable libcurl's verbose output.
1684  *
1685  * If @p verbose is @c EINA_TRUE, libcurl will output a lot of verbose
1686  * information about its operations, which is useful for
1687  * debugging. The verbose information will be sent to stderr.
1688  */
1689 EAPI void              ecore_con_url_verbose_set(Ecore_Con_Url *url_con,
1690                                                  Eina_Bool verbose);
1691 /**
1692  * Enable or disable EPSV extension
1693  * @param url_con  The Ecore_Con_Url instance which will be acted upon.
1694  * @param use_epsv Boolean to enable/disable the EPSV extension.
1695  */
1696 EAPI void              ecore_con_url_ftp_use_epsv_set(Ecore_Con_Url *url_con,
1697                                                       Eina_Bool use_epsv);
1698
1699 /**
1700  * Enables the cookie engine for subsequent HTTP requests.
1701  *
1702  * @param url_con Ecore_Con_Url instance which will be acted upon.
1703  *
1704  * After this function is called, cookies set by the server in HTTP responses
1705  * will be parsed and stored, as well as sent back to the server in new HTTP
1706  * requests.
1707  *
1708  * @note Even though this function is called @c ecore_con_url_cookies_init(),
1709  * there is no symmetrical shutdown operation.
1710  */
1711 EAPI void              ecore_con_url_cookies_init(Ecore_Con_Url *url_con);
1712 /**
1713  * Controls whether session cookies from previous sessions shall be loaded.
1714  *
1715  * @param url_con Ecore_Con_Url instance which will be acted upon.
1716  * @param ignore  If @c EINA_TRUE, ignore session cookies when loading cookies
1717  *                from files. If @c EINA_FALSE, all cookies will be loaded.
1718  *
1719  * Session cookies are cookies with no expire date set, which usually means
1720  * they are removed after the current session is closed.
1721  *
1722  * By default, when Ecore_Con_Url loads cookies from a file, all cookies are
1723  * loaded, including session cookies, which, most of the time, were supposed
1724  * to be loaded and valid only for that session.
1725  *
1726  * If @p ignore is set to @c EINA_TRUE, when Ecore_Con_Url loads cookies from
1727  * the files passed to @c ecore_con_url_cookies_file_add(), session cookies
1728  * will not be loaded.
1729  *
1730  * @see ecore_con_url_cookies_file_add()
1731  */
1732 EAPI void              ecore_con_url_cookies_ignore_old_session_set(Ecore_Con_Url *url_con,
1733                                                                     Eina_Bool ignore);
1734 /**
1735  * Clears currently loaded cookies.
1736  * @param url_con      Ecore_Con_Url instance which will be acted upon.
1737  *
1738  * The cleared cookies are removed and will not be sent in subsequent HTTP
1739  * requests, nor will they be written to the cookiejar file set via
1740  * @c ecore_con_url_cookies_jar_file_set().
1741  *
1742  * @note This function will initialize the cookie engine if it has not been
1743  *       initialized yet.
1744  * @note The cookie files set by ecore_con_url_cookies_file_add() aren't loaded
1745  *       immediately, just when the request is started. Thus, if you ask to
1746  *       clear the cookies, but has a file already set by that function, the
1747  *       cookies will then be loaded and you will have old cookies set. In order
1748  *       to don't have any old cookie set, you need to don't call
1749  *       ecore_con_url_cookies_file_add() ever on the @p url_con handler, and
1750  *       call this function to clear any cookie set by a previous request on
1751  *       this handler.
1752  *
1753  * @see ecore_con_url_cookies_session_clear()
1754  * @see ecore_con_url_cookies_ignore_old_session_set()
1755  */
1756 EAPI void              ecore_con_url_cookies_clear(Ecore_Con_Url *url_con);
1757 /**
1758  * Clears currently loaded session cookies.
1759  *
1760  * @param url_con      Ecore_Con_Url instance which will be acted upon.
1761  *
1762  * Session cookies are cookies with no expire date set, which usually means
1763  * they are removed after the current session is closed.
1764  *
1765  * The cleared cookies are removed and will not be sent in subsequent HTTP
1766  * requests, nor will they be written to the cookiejar file set via
1767  * @c ecore_con_url_cookies_jar_file_set().
1768  *
1769  * @note This function will initialize the cookie engine if it has not been
1770  *       initialized yet.
1771  * @note The cookie files set by ecore_con_url_cookies_file_add() aren't loaded
1772  *       immediately, just when the request is started. Thus, if you ask to
1773  *       clear the session cookies, but has a file already set by that function,
1774  *       the session cookies will then be loaded and you will have old cookies
1775  *       set.  In order to don't have any old session cookie set, you need to
1776  *       don't call ecore_con_url_cookies_file_add() ever on the @p url_con
1777  *       handler, and call this function to clear any session cookie set by a
1778  *       previous request on this handler. An easier way to don't use old
1779  *       session cookies is by using the function
1780  *       ecore_con_url_cookies_ignore_old_session_set().
1781  *
1782  * @see ecore_con_url_cookies_clear()
1783  * @see ecore_con_url_cookies_ignore_old_session_set()
1784  */
1785 EAPI void              ecore_con_url_cookies_session_clear(Ecore_Con_Url *url_con);
1786 /**
1787  * Adds a file to the list of files from which to load cookies.
1788  *
1789  * @param url_con   Ecore_Con_Url instance which will be acted upon.
1790  * @param file_name Name of the file that will be added to the list.
1791  *
1792  * Files must contain cookies defined according to two possible formats:
1793  *
1794  * @li HTTP-style header ("Set-Cookie: ...").
1795  * @li <a href="http://www.cookiecentral.com/faq/#3.5">Netscape/Mozilla cookie data format.</a>
1796  *
1797  * Cookies will only be @b read from this file. If you want to save cookies to a
1798  * file, use ecore_con_url_cookies_jar_file_set(). Also notice that this
1799  * function supports the both types of cookie file cited above, while
1800  * ecore_con_url_cookies_jar_file_set() will save only in the Netscape/Mozilla's
1801  * format.
1802  *
1803  * Please notice that the file will not be read immediately, but rather added
1804  * to a list of files that will be loaded and parsed at a later time.
1805  *
1806  * @note This function will initialize the cookie engine if it has not been
1807  *       initialized yet.
1808  *
1809  * @see ecore_con_url_cookies_ignore_old_session_set()
1810  * @see ecore_con_url_cookies_jar_file_set()
1811  */
1812 EAPI void              ecore_con_url_cookies_file_add(Ecore_Con_Url *url_con,
1813                                                       const char * const file_name);
1814 /**
1815  * Sets the name of the file to which all current cookies will be written when
1816  * either cookies are flushed or Ecore_Con is shut down.
1817  *
1818  * @param url_con        Ecore_Con_Url instance which will be acted upon.
1819  * @param cookiejar_file File to which the cookies will be written.
1820  *
1821  * @return @c EINA_TRUE is the file name has been set successfully,
1822  *         @c EINA_FALSE otherwise.
1823  *
1824  * Cookies are written following Netscape/Mozilla's data format, also known as
1825  * cookie-jar.
1826  *
1827  * Cookies will only be @b saved to this file. If you need to read cookies from
1828  * a file, use ecore_con_url_cookies_file_add() instead.
1829  *
1830  * @note This function will initialize the cookie engine if it has not been
1831  *       initialized yet.
1832  *
1833  * @see ecore_con_url_cookies_jar_write()
1834  */
1835 EAPI Eina_Bool         ecore_con_url_cookies_jar_file_set(Ecore_Con_Url *url_con,
1836                                                           const char * const cookiejar_file);
1837 /**
1838  * Writes all current cookies to the cookie jar immediately.
1839  *
1840  * @param url_con Ecore_Con_Url instance which will be acted upon.
1841  *
1842  * A cookie-jar file must have been previously set by
1843  * @c ecore_con_url_jar_file_set, otherwise nothing will be done.
1844  *
1845  * @note This function will initialize the cookie engine if it has not been
1846  *       initialized yet.
1847  *
1848  * @see ecore_con_url_cookies_jar_file_set()
1849  */
1850 EAPI void              ecore_con_url_cookies_jar_write(Ecore_Con_Url *url_con);
1851
1852 EAPI void              ecore_con_url_ssl_verify_peer_set(Ecore_Con_Url *url_con,
1853                                                          Eina_Bool verify);
1854 EAPI int               ecore_con_url_ssl_ca_set(Ecore_Con_Url *url_con,
1855                                                 const char *ca_path);
1856
1857 /**
1858  * Set HTTP proxy to use.
1859  *
1860  * The parameter should be a char * to a zero terminated string holding
1861  * the host name or dotted IP address. To specify port number in this string,
1862  * append :[port] to the end of the host name.
1863  * The proxy string may be prefixed with [protocol]:// since any such prefix
1864  * will be ignored.
1865  * The proxy's port number may optionally be specified with the separate option.
1866  * If not specified, libcurl will default to using port 1080 for proxies.
1867  *
1868  * @param url_con Connection object that will use the proxy.
1869  * @param proxy Porxy string or @c NULL to disable
1870  *
1871  * @return @c EINA_TRUE on success, @c EINA_FALSE on error.
1872  * @since 1.2
1873  */
1874 EAPI Eina_Bool ecore_con_url_proxy_set(Ecore_Con_Url *url_con, const char *proxy);
1875
1876 /**
1877  * Set zero terminated username to use for proxy.
1878  *
1879  * if socks protocol is used for proxy, protocol should be socks5 and above.
1880  *
1881  * @param url_con Connection object that will use the proxy.
1882  * @param username Username string.
1883  *
1884  * @return @c EINA_TRUE on success, @c EINA_FALSE on error.
1885  *
1886  * @see ecore_con_url_proxy_set()
1887  *
1888  * @since 1.2
1889  */
1890 EAPI Eina_Bool ecore_con_url_proxy_username_set(Ecore_Con_Url *url_con, const char *username);
1891
1892 /**
1893  * Set zero terminated password to use for proxy.
1894  *
1895  * if socks protocol is used for proxy, protocol should be socks5 and above.
1896  *
1897  * @param url_con Connection object that will use the proxy.
1898  * @param password Password string.
1899  *
1900  * @return @c EINA_TRUE on success, @c EINA_FALSE on error.
1901  *
1902  * @see ecore_con_url_proxy_set()
1903  *
1904  * @since 1.2
1905  */
1906 EAPI Eina_Bool ecore_con_url_proxy_password_set(Ecore_Con_Url *url_con, const char *password);
1907
1908 /**
1909  * Set timeout in seconds.
1910  *
1911  * the maximum time in seconds that you allow the ecore con url transfer
1912  * operation to take. Normally, name lookups can take a considerable time
1913  * and limiting operations to less than a few minutes risk aborting perfectly
1914  * normal operations.
1915  *
1916  * @param url_con Connection object that will use the timeout.
1917  * @param timeout time in seconds.
1918  *
1919  * @see ecore_con_url_cookies_jar_file_set()
1920  *
1921  * @since 1.2
1922  */
1923 EAPI void ecore_con_url_timeout_set(Ecore_Con_Url *url_con, double timeout);
1924
1925 /**
1926  * Get the returned HTTP STATUS code
1927  *
1928  * This is used to, at any time, try to return the status code for a transmission.
1929  * @param url_con Connection object
1930  * @return A valid HTTP STATUS code, or 0 on failure
1931  *
1932  * @since 1.2
1933  */
1934 EAPI int ecore_con_url_status_code_get(Ecore_Con_Url *url_con);
1935 /**
1936  * @}
1937  */
1938
1939 #ifdef __cplusplus
1940 }
1941 #endif
1942
1943 #endif