692d6c5d5aaf377358240bcafe2ef09247cd7e6b
[profile/ivi/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 _MSC_VER
18 # ifdef BUILDING_DLL
19 #  define EAPI __declspec(dllexport)
20 # else
21 #  define EAPI __declspec(dllimport)
22 # endif
23 #else
24 # ifdef __GNUC__
25 #  if __GNUC__ >= 4
26 #   define EAPI __attribute__ ((visibility("default")))
27 #  else
28 #   define EAPI
29 #  endif
30 # else
31 #  define EAPI
32 # endif
33 #endif
34
35 /**
36  * @defgroup Ecore_Con_Group Ecore_Con - Connection functions
37  *
38  * The Ecore Connection Library ( @c Ecore_Con ) provides simple mechanisms
39  * for communications between programs using reliable sockets.  It saves
40  * the programmer from having to worry about file descriptors and waiting
41  * for incoming connections.
42  *
43  * There are two main objects in the @c Ecore_Con library: the @c
44  * Ecore_Con_Server and the @c Ecore_Con_Client.
45  *
46  * The @c Ecore_Con_Server represents a server that can be connected to.
47  * It is used regardless of whether the program is acting as a server or
48  * client itself.
49  *
50  * To create a listening server call @c ecore_con_server_add(), optionally using
51  * an ECORE_CON_USE_* encryption type OR'ed with the type for encryption.
52  *
53  * To connect to a server, call @c ecore_con_server_connect().  Data can
54  * then be sent to the server using the @c ecore_con_server_send().
55  *
56  * Functions are described in the following groupings:
57  * @li @ref Ecore_Con_Lib_Group
58  * @li @ref Ecore_Con_Server_Group
59  * @li @ref Ecore_Con_Client_Group
60  * @li @ref Ecore_Con_Url_Group
61  *
62  * Events are described in @ref Ecore_Con_Events_Group.
63  */
64
65
66 /**
67  * @defgroup Ecore_Con_Events_Group Events
68  *
69  * @li ECORE_CON_CLIENT_ADD: Whenever a client connection is made to an
70  * @c Ecore_Con_Server, an event of this type is emitted, allowing the
71  * retrieval of the client's ip with @ref ecore_con_client_ip_get and
72  * associating data with the client using ecore_con_client_data_set.
73  * @li ECORE_CON_EVENT_CLIENT_DEL: Whenever a client connection to an
74  * @c Ecore_Con_Server, an event of this type is emitted.  The contents of
75  * the data with this event are variable, but if the client object in the data
76  * is non-null, it must be freed with @ref ecore_con_client_del.
77  * @li ECORE_CON_EVENT_SERVER_ADD: Whenever a server object is created
78  * with @ref ecore_con_server_connect, an event of this type is emitted,
79  * allowing for data to be serialized and sent to the server using
80  * @ref ecore_con_server_send. At this point, the http handshake has
81  * occurred.
82  * @li ECORE_CON_EVENT_SERVER_DEL: Whenever a server object is destroyed,
83  * usually by the server connection being refused or dropped, an event of this
84  * type is emitted.  The contents of the data with this event are variable,
85  * but if the server object in the data is non-null, it must be freed
86  * with @ref ecore_con_server_del.
87  * @li ECORE_CON_EVENT_CLIENT_DATA: Whenever a client connects to your server
88  * object and sends data, an event of this type is emitted.  The data will contain both
89  * the size and contents of the message sent by the client.  It should be noted that
90  * data within this object is transient, so it must be duplicated in order to be
91  * retained.  This event will continue to occur until the client has stopped sending its
92  * message, so a good option for storing this data is an Eina_Strbuf.  Once the message has
93  * been received in full, the client object must be freed with ecore_con_client_free.
94  * @li ECORE_CON_EVENT_SERVER_DATA: Whenever your server object connects to its destination
95  * and receives data, an event of this type is emitted.  The data will contain both
96  * the size and contents of the message sent by the server.  It should be noted that
97  * data within this object is transient, so it must be duplicated in order to be
98  * retained.  This event will continue to occur until the server has stopped sending its
99  * message, so a good option for storing this data is an Eina_Strbuf.  Once the message has
100  * been received in full, the server object must be freed with ecore_con_server_free.
101  *
102  */
103
104 #ifdef __cplusplus
105 extern "C" {
106 #endif
107 #define ECORE_CON_USE_SSL ECORE_CON_USE_SSL2
108 #define ECORE_CON_REMOTE_SYSTEM ECORE_CON_REMOTE_TCP
109
110
111 /**
112  * @typedef Ecore_Con_Server
113  * A connection handle to a server
114  * @ingroup Ecore_Con_Server_Group
115  */
116 typedef struct _Ecore_Con_Server Ecore_Con_Server;
117
118 /**
119  * @typedef Ecore_Con_Client
120  * A connection handle to a client
121  * @ingroup Ecore_Con_Client_Group
122  */
123 typedef struct _Ecore_Con_Client Ecore_Con_Client;
124
125 /**
126  * @typedef Ecore_Con_Url
127  * A handle to an http upload/download object
128  * @ingroup Ecore_Con_Url_Group
129  */
130 typedef struct _Ecore_Con_Url Ecore_Con_Url;
131
132
133 /**
134  * @addtogroup Ecore_Con_Events_Group Events
135  * @{
136  */
137
138 /**
139  * @typedef Ecore_Con_Event_Client_Add
140  * Used as the @p data param for the corresponding event
141  */
142 typedef struct _Ecore_Con_Event_Client_Add Ecore_Con_Event_Client_Add;
143
144 /**
145  * @typedef Ecore_Con_Event_Client_Del
146  * Used as the @p data param for the corresponding event
147  */
148 typedef struct _Ecore_Con_Event_Client_Del Ecore_Con_Event_Client_Del;
149
150 /**
151  * @typedef Ecore_Con_Event_Client_Error
152  * Used as the @p data param for the corresponding event
153  */
154 typedef struct _Ecore_Con_Event_Client_Error Ecore_Con_Event_Client_Error;
155
156 /**
157  * @typedef Ecore_Con_Event_Server_Add
158  * Used as the @p data param for the corresponding event
159  */
160 typedef struct _Ecore_Con_Event_Server_Add Ecore_Con_Event_Server_Add;
161
162 /**
163  * @typedef Ecore_Con_Event_Server_Del
164  * Used as the @p data param for the corresponding event
165  */
166 typedef struct _Ecore_Con_Event_Server_Del Ecore_Con_Event_Server_Del;
167
168 /**
169  * @typedef Ecore_Con_Event_Server_Error
170  * Used as the @p data param for the corresponding event
171  */
172 typedef struct _Ecore_Con_Event_Server_Error Ecore_Con_Event_Server_Error;
173
174 /**
175  * @typedef Ecore_Con_Event_Client_Data
176  * Used as the @p data param for the corresponding event
177  */
178 typedef struct _Ecore_Con_Event_Client_Data Ecore_Con_Event_Client_Data;
179
180 /**
181  * @typedef Ecore_Con_Event_Server_Data
182  * Used as the @p data param for the corresponding event
183  */
184 typedef struct _Ecore_Con_Event_Server_Data Ecore_Con_Event_Server_Data;
185
186 /**
187  * @typedef Ecore_Con_Event_Url_Data
188  * Used as the @p data param for the corresponding event
189  */
190 typedef struct _Ecore_Con_Event_Url_Data Ecore_Con_Event_Url_Data;
191
192 /**
193  * @typedef Ecore_Con_Event_Url_Complete
194  * Used as the @p data param for the corresponding event
195  */
196 typedef struct _Ecore_Con_Event_Url_Complete Ecore_Con_Event_Url_Complete;
197
198 /**
199  * @typedef Ecore_Con_Event_Url_Progress
200  * Used as the @p data param for the corresponding event
201  */
202 typedef struct _Ecore_Con_Event_Url_Progress Ecore_Con_Event_Url_Progress;
203
204 /**
205  * @struct _Ecore_Con_Event_Client_Add
206  * Used as the @p data param for the @ref ECORE_CON_EVENT_CLIENT_ADD event
207  */
208 struct _Ecore_Con_Event_Client_Add
209 {
210    Ecore_Con_Client *client; /** the client that connected */
211 };
212
213 /**
214  * @struct _Ecore_Con_Event_Client_Del
215  * Used as the @p data param for the @ref ECORE_CON_EVENT_CLIENT_DEL event
216  */
217 struct _Ecore_Con_Event_Client_Del
218 {
219    Ecore_Con_Client *client; /** the client that was lost */
220 };
221
222 /**
223  * @struct _Ecore_Con_Event_Client_Error
224  * Used as the @p data param for the @ref ECORE_CON_EVENT_CLIENT_ERROR event
225  */
226 struct _Ecore_Con_Event_Client_Error
227 {
228    Ecore_Con_Client *client; /** the client for which an error occurred */
229    char *error; /**< the error string describing what happened */
230 };
231
232 /**
233  * @struct _Ecore_Con_Event_Server_Add
234  * Used as the @p data param for the @ref ECORE_CON_EVENT_SERVER_ADD event
235  */
236 struct _Ecore_Con_Event_Server_Add
237 {
238    Ecore_Con_Server *server; /** the server that was connected to */
239 };
240
241 /**
242  * @struct _Ecore_Con_Event_Server_Del
243  * Used as the @p data param for the @ref ECORE_CON_EVENT_SERVER_DEL event
244  */
245 struct _Ecore_Con_Event_Server_Del
246 {
247    Ecore_Con_Server *server; /** the client that was lost */
248 };
249
250 /**
251  * @struct _Ecore_Con_Event_Server_Error
252  * Used as the @p data param for the @ref ECORE_CON_EVENT_SERVER_ERROR event
253  */
254 struct _Ecore_Con_Event_Server_Error
255 {
256    Ecore_Con_Server *server; /** the server for which an error occurred */
257    char *error; /**< the error string describing what happened */
258 };
259
260 /**
261  * @struct _Ecore_Con_Event_Client_Data
262  * Used as the @p data param for the @ref ECORE_CON_EVENT_CLIENT_DATA event
263  */
264 struct _Ecore_Con_Event_Client_Data
265 {
266    Ecore_Con_Client *client; /**< the client that connected */
267    void *data;               /**< the data that the client sent */
268    int size;                 /**< the length of the data sent */
269 };
270
271 /**
272  * @struct _Ecore_Con_Event_Server_Data
273  * Used as the @p data param for the @ref ECORE_CON_EVENT_SERVER_DATA event
274  */
275 struct _Ecore_Con_Event_Server_Data
276 {
277    Ecore_Con_Server *server; /**< the server that was connected to */
278    void *data;               /**< the data that the server sent */
279    int size;                 /**< the length of the data sent */
280 };
281
282 /**
283  * @struct _Ecore_Con_Event_Url_Data
284  * Used as the @p data param for the @ref ECORE_CON_EVENT_URL_DATA event
285  */
286 struct _Ecore_Con_Event_Url_Data
287 {
288    Ecore_Con_Url *url_con;
289    int size;
290    unsigned char data[1];
291 };
292
293 /**
294  * @struct _Ecore_Con_Event_Url_Complete
295  * Used as the @p data param for the @ref ECORE_CON_EVENT_URL_COMPLETE event
296  */
297 struct _Ecore_Con_Event_Url_Complete
298 {
299    Ecore_Con_Url *url_con;
300    int status;
301 };
302
303 /**
304  * @struct _Ecore_Con_Event_Url_Progress
305  * Used as the @p data param for the @ref ECORE_CON_EVENT_URL_PROGRESS event
306  */
307 struct _Ecore_Con_Event_Url_Progress
308 {
309    Ecore_Con_Url *url_con;
310    struct
311    {
312       double total;
313       double now;
314    } down;
315    struct
316    {
317       double total;
318       double now;
319    } up;
320 };
321
322 /** A client has connected to the server */
323 EAPI extern int ECORE_CON_EVENT_CLIENT_ADD;
324 /** A client has disconnected from the server */
325 EAPI extern int ECORE_CON_EVENT_CLIENT_DEL;
326 /** A client experienced an error */
327 EAPI extern int ECORE_CON_EVENT_CLIENT_ERROR;
328 /** A server was created */
329 EAPI extern int ECORE_CON_EVENT_SERVER_ADD;
330 /** A server connection was lost */
331 EAPI extern int ECORE_CON_EVENT_SERVER_DEL;
332 /** A server experienced an error */
333 EAPI extern int ECORE_CON_EVENT_SERVER_ERROR;
334 /** A client connected to the server has sent data */
335 EAPI extern int ECORE_CON_EVENT_CLIENT_DATA;
336 /** A server connection object has data */
337 EAPI extern int ECORE_CON_EVENT_SERVER_DATA;
338 /** A URL object has data */
339 EAPI extern int ECORE_CON_EVENT_URL_DATA;
340 /** A URL object has completed its transfer to and from the server and can be reused */
341 EAPI extern int ECORE_CON_EVENT_URL_COMPLETE;
342 /** A URL object has made progress in its transfer */
343 EAPI extern int ECORE_CON_EVENT_URL_PROGRESS;
344
345 /**
346  * @}
347  */
348
349 /**
350  * @defgroup Ecore_Con_Lib_Group Ecore Connection Library Functions
351  *
352  * @{
353  */
354
355 /**
356  * @typedef Ecore_Con_Dns_Cb
357  * A callback type for use with @ref ecore_con_lookup.
358  */
359 typedef void (*Ecore_Con_Dns_Cb)(const char *canonname,
360                                  const char *ip,
361                                  struct sockaddr *addr,
362                                  int addrlen,
363                                  void *data);
364
365 /**
366  * @typedef Ecore_Con_Type
367  * @enum _Ecore_Con_Type
368  * Types for an ecore_con client/server object.  A correct way to set this type is
369  * with an ECORE_CON_$TYPE, optionally OR'ed with an ECORE_CON_$USE if encryption is desired,
370  * and LOAD_CERT if the previously loaded certificate should be used.
371  * @code
372  * ECORE_CON_REMOTE_TCP | ECORE_CON_USE_TLS | ECORE_CON_LOAD_CERT
373  * @endcode
374  */
375 typedef enum _Ecore_Con_Type
376 {
377    /** Socket in ~/.ecore */
378    ECORE_CON_LOCAL_USER = 0,
379    /** Socket in /tmp */
380    ECORE_CON_LOCAL_SYSTEM = 1,
381    /** Abstract socket */
382    ECORE_CON_LOCAL_ABSTRACT = 2,
383    /** Remote server using TCP */
384    ECORE_CON_REMOTE_TCP = 3,
385    /** Remote multicast server */
386    ECORE_CON_REMOTE_MCAST = 4,
387    /** Remote server using UDP */
388    ECORE_CON_REMOTE_UDP = 5,
389    /** Remote broadcast using UDP */
390    ECORE_CON_REMOTE_BROADCAST = 6,
391    ECORE_CON_REMOTE_NODELAY = 7,
392    /** Use SSL2: UNSUPPORTED. **/
393    ECORE_CON_USE_SSL2 = (1 << 4),
394    /** Use SSL3 */
395    ECORE_CON_USE_SSL3 = (1 << 5),
396    /** Use TLS */
397    ECORE_CON_USE_TLS = (1 << 6),
398    /** Use both TLS and SSL3 */
399    ECORE_CON_USE_MIXED = ECORE_CON_USE_SSL3 | ECORE_CON_USE_TLS,
400    /** Attempt to use the loaded certificate */
401    ECORE_CON_LOAD_CERT = (1 << 7)
402 } Ecore_Con_Type;
403
404 EAPI int               ecore_con_init(void);
405 EAPI int               ecore_con_shutdown(void);
406
407 EAPI Eina_Bool         ecore_con_lookup(const char *name,
408                                             Ecore_Con_Dns_Cb done_cb,
409                                             const void *data);
410
411 /**
412  * @}
413  */
414
415 /**
416  * @defgroup Ecore_Con_SSL_Group Ecore Connection SSL Functions
417  *
418  * @{
419  */
420 EAPI int               ecore_con_ssl_available_get(void);
421 EAPI Eina_Bool         ecore_con_ssl_server_cert_add(Ecore_Con_Server *svr, const char *cert);
422 EAPI Eina_Bool         ecore_con_ssl_server_privkey_add(Ecore_Con_Server *svr, const char *key_file);
423 EAPI Eina_Bool         ecore_con_ssl_server_crl_add(Ecore_Con_Server *svr, const char *crl_file);
424 EAPI Eina_Bool         ecore_con_ssl_server_cafile_add(Ecore_Con_Server *svr, const char *ca_file);
425 EAPI void              ecore_con_ssl_server_verify(Ecore_Con_Server *svr);
426
427 /**
428  * @}
429  */
430
431 /**
432  * @defgroup Ecore_Con_Server_Group Ecore Connection Server Functions
433  *
434  * @{
435  */
436
437 EAPI Ecore_Con_Server *ecore_con_server_add(Ecore_Con_Type type,
438                                             const char *name, int port,
439                                             const void *data);
440
441 EAPI Ecore_Con_Server *ecore_con_server_connect(Ecore_Con_Type type,
442                                                 const char *name, int port,
443                                                 const void *data);
444 EAPI void *            ecore_con_server_del(Ecore_Con_Server *svr);
445 EAPI void *            ecore_con_server_data_get(Ecore_Con_Server *svr);
446 EAPI void *            ecore_con_server_data_set(Ecore_Con_Server *svr,
447                                                  void *data);
448 EAPI Eina_Bool         ecore_con_server_connected_get(Ecore_Con_Server *svr);
449 EAPI Eina_List *       ecore_con_server_clients_get(Ecore_Con_Server *svr);
450 EAPI const char *      ecore_con_server_name_get(Ecore_Con_Server *svr);
451 EAPI int               ecore_con_server_port_get(Ecore_Con_Server *svr);
452 EAPI double            ecore_con_server_uptime_get(Ecore_Con_Server *svr);
453 EAPI int               ecore_con_server_send(Ecore_Con_Server *svr,
454                                              const void *data,
455                                              int size);
456 EAPI void              ecore_con_server_client_limit_set(Ecore_Con_Server *svr,
457                                                          int client_limit,
458                                                          char reject_excess_clients);
459 EAPI const char *      ecore_con_server_ip_get(Ecore_Con_Server *svr);
460 EAPI void              ecore_con_server_flush(Ecore_Con_Server *svr);
461 EAPI void              ecore_con_server_timeout_set(Ecore_Con_Server *svr, double timeout);
462 EAPI double            ecore_con_server_timeout_get(Ecore_Con_Server *svr);
463
464 /**
465  * @}
466  */
467
468 /**
469  * @defgroup Ecore_Con_Client_Group Ecore Connection Client Functions
470  *
471  * @{
472  */
473
474 EAPI int               ecore_con_client_send(Ecore_Con_Client *cl,
475                                              const void *data,
476                                              int size);
477 EAPI Ecore_Con_Server *ecore_con_client_server_get(Ecore_Con_Client *cl);
478 EAPI void *            ecore_con_client_del(Ecore_Con_Client *cl);
479 EAPI void              ecore_con_client_data_set(Ecore_Con_Client *cl,
480                                                  const void *data);
481 EAPI void *            ecore_con_client_data_get(Ecore_Con_Client *cl);
482 EAPI const char *      ecore_con_client_ip_get(Ecore_Con_Client *cl);
483 EAPI void              ecore_con_client_flush(Ecore_Con_Client *cl);
484 EAPI double            ecore_con_client_uptime_get(Ecore_Con_Client *cl);
485 EAPI double            ecore_con_client_timeout_get(Ecore_Con_Client *cl);
486 EAPI void              ecore_con_client_timeout_set(Ecore_Con_Client *cl, double timeout);
487 EAPI Eina_Bool         ecore_con_client_connected_get(Ecore_Con_Client *cl);
488 EAPI int               ecore_con_client_port_get(Ecore_Con_Client *cl);
489
490 /**
491  * @}
492  */
493
494 /**
495  * @defgroup Ecore_Con_Url_Group Ecore URL Connection Functions
496  *
497  * @{
498  */
499
500 /**
501  * @typedef Ecore_Con_Url_Time
502  * @enum _Ecore_Con_Url_Time
503  * The type of condition to use when making an HTTP request dependent on time,
504  * so that headers such as "If-Modified-Since" are used.
505  */
506 typedef enum _Ecore_Con_Url_Time
507 {
508    /**
509     * Do not place time restrictions on the HTTP requests.
510     */
511    ECORE_CON_URL_TIME_NONE = 0,
512    /**
513     * Add the "If-Modified-Since" HTTP header, so that the request is performed
514     * by the server only if the target has been modified since the time value
515     * passed to it in the request.
516     */
517    ECORE_CON_URL_TIME_IFMODSINCE,
518    /**
519     * Add the "If-Unmodified-Since" HTTP header, so that the request is
520     * performed by the server only if the target has NOT been modified since
521     * the time value passed to it in the request.
522     */
523    ECORE_CON_URL_TIME_IFUNMODSINCE
524 } Ecore_Con_Url_Time;
525
526 EAPI int               ecore_con_url_init(void);
527 EAPI int               ecore_con_url_shutdown(void);
528 EAPI Ecore_Con_Url *   ecore_con_url_new(const char *url);
529 EAPI Ecore_Con_Url *   ecore_con_url_custom_new(const char *url,
530                                                 const char *custom_request);
531 EAPI void              ecore_con_url_free(Ecore_Con_Url *url_con);
532 EAPI Eina_Bool         ecore_con_url_url_set(Ecore_Con_Url *url_con,
533                                              const char *url);
534 EAPI void              ecore_con_url_data_set(Ecore_Con_Url *url_con,
535                                               void *data);
536 EAPI void *            ecore_con_url_data_get(Ecore_Con_Url *url_con);
537 EAPI void              ecore_con_url_additional_header_add(Ecore_Con_Url *url_con,
538                                                            const char *key,
539                                                            const char *value);
540 EAPI void              ecore_con_url_additional_headers_clear(Ecore_Con_Url *url_con);
541 EAPI const Eina_List * ecore_con_url_response_headers_get(Ecore_Con_Url *url_con);
542 EAPI void              ecore_con_url_fd_set(Ecore_Con_Url *url_con, int fd);
543 EAPI int               ecore_con_url_received_bytes_get(Ecore_Con_Url *url_con);
544 EAPI Eina_Bool         ecore_con_url_httpauth_set(Ecore_Con_Url *url_con,
545                                                   const char *username,
546                                                   const char *password,
547                                                   Eina_Bool safe);
548 EINA_DEPRECATED EAPI Eina_Bool         ecore_con_url_send(Ecore_Con_Url *url_con,
549                                                           const void *data, long length,
550                                                           const char *content_type);
551 EAPI Eina_Bool         ecore_con_url_get(Ecore_Con_Url *url_con);
552 EAPI Eina_Bool         ecore_con_url_post(Ecore_Con_Url *url_con,
553                                           const void *data, long length,
554                                           const char *content_type);
555 EAPI void              ecore_con_url_time(Ecore_Con_Url *url_con,
556                                           Ecore_Con_Url_Time time_condition,
557                                           double timestamp);
558
559 EAPI Eina_Bool         ecore_con_url_ftp_upload(Ecore_Con_Url *url_con,
560                                                 const char *filename,
561                                                 const char *user,
562                                                 const char *pass,
563                                                 const char *upload_dir);
564 EAPI void              ecore_con_url_verbose_set(Ecore_Con_Url *url_con,
565                                                  Eina_Bool verbose);
566 EAPI void              ecore_con_url_ftp_use_epsv_set(Ecore_Con_Url *url_con,
567                                                       Eina_Bool use_epsv);
568
569 EAPI void              ecore_con_url_cookies_init(Ecore_Con_Url *url_con);
570 EAPI void              ecore_con_url_cookies_ignore_old_session_set(Ecore_Con_Url *url_con,
571                                                                     Eina_Bool ignore);
572 EAPI void              ecore_con_url_cookies_clear(Ecore_Con_Url *url_con);
573 EAPI void              ecore_con_url_cookies_session_clear(Ecore_Con_Url *url_con);
574 EAPI void              ecore_con_url_cookies_file_add(Ecore_Con_Url *url_con,
575                                                       const char * const file_name);
576 EAPI Eina_Bool         ecore_con_url_cookies_jar_file_set(Ecore_Con_Url *url_con,
577                                                           const char * const cookiejar_file);
578 EAPI void              ecore_con_url_cookies_jar_write(Ecore_Con_Url *url_con);
579
580 EAPI void              ecore_con_url_ssl_verify_peer_set(Ecore_Con_Url *url_con,
581                                                          Eina_Bool verify);
582 EAPI int               ecore_con_url_ssl_ca_set(Ecore_Con_Url *url_con,
583                                                 const char *ca_path);
584
585 /**
586  * @}
587  */
588
589 #ifdef __cplusplus
590 }
591 #endif
592
593 #endif