raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=7eba161414c518cc62ccb952fc3c382ab4be92ee

commit 7eba161414c518cc62ccb952fc3c382ab4be92ee
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Thu Sep 3 12:22:01 2015 +0900

    ecore-con-url- split out the curl dleopener and resolver and headers
    
    this splits out out "manual" dlopen (eina_module_load) of curl into
    its own .c file and special header out of ecore_con_url.c to tidy up
    that code a bit and isolate our curl magic loading/handling
---
 src/Makefile_Ecore_Con.am              |   2 +
 src/lib/ecore_con/ecore_con_url.c      | 296 +--------------------------------
 src/lib/ecore_con/ecore_con_url_curl.c | 122 ++++++++++++++
 src/lib/ecore_con/ecore_con_url_curl.h | 206 +++++++++++++++++++++++
 4 files changed, 338 insertions(+), 288 deletions(-)

diff --git a/src/Makefile_Ecore_Con.am b/src/Makefile_Ecore_Con.am
index 4fedd8a..d5badfc 100644
--- a/src/Makefile_Ecore_Con.am
+++ b/src/Makefile_Ecore_Con.am
@@ -51,6 +51,8 @@ lib/ecore_con/ecore_con_eet.c \
 lib/ecore_con/ecore_con_socks.c \
 lib/ecore_con/ecore_con_ssl.c \
 lib/ecore_con/ecore_con_url.c \
+lib/ecore_con/ecore_con_url_curl.c \
+lib/ecore_con/ecore_con_url_curl.h \
 lib/ecore_con/ecore_con_private.h
 
 EXTRA_DIST += lib/ecore_con/ecore_con_legacy.c
diff --git a/src/lib/ecore_con/ecore_con_url.c 
b/src/lib/ecore_con/ecore_con_url.c
index 82eaf21..d40fdc5 100644
--- a/src/lib/ecore_con/ecore_con_url.c
+++ b/src/lib/ecore_con/ecore_con_url.c
@@ -29,160 +29,10 @@
 #include "ecore_private.h"
 #include "Ecore_Con.h"
 #include "ecore_con_private.h"
+#include "ecore_con_url_curl.h"
 
 #define MY_CLASS EFL_NETWORK_URL_CLASS
 
-// all the types, defines, enums etc. from curl that we actually USE.
-// we have to add to this if we use more things from curl not already
-// defined here. see curl headers to get them from
-typedef enum
-{
-   CURLM_CALL_MULTI_PERFORM = -1,
-   CURLM_OK = 0
-} CURLMcode;
-typedef enum
-{
-   CURLE_OK = 0,
-   CURLE_OPERATION_TIMEDOUT = 28
-} CURLcode;
-#define CURLOPTTYPE_LONG          0
-#define CURLOPTTYPE_OBJECTPOINT   10000
-#define CURLOPTTYPE_FUNCTIONPOINT 20000
-#define CURLOPTTYPE_OFF_T         30000
-#define CINIT(na, t, nu) CURLOPT_ ## na = CURLOPTTYPE_ ## t + nu
-typedef enum
-{
-   CINIT(FILE, OBJECTPOINT, 1),
-   CINIT(URL, OBJECTPOINT, 2),
-   CINIT(PROXY, OBJECTPOINT, 4),
-   CINIT(USERPWD, OBJECTPOINT, 5),
-   CINIT(INFILE, OBJECTPOINT, 9),
-   CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11),
-   CINIT(READFUNCTION, FUNCTIONPOINT, 12),
-   CINIT(POSTFIELDS, OBJECTPOINT, 15),
-   CINIT(HTTPHEADER, OBJECTPOINT, 23),
-   CINIT(WRITEHEADER, OBJECTPOINT, 29),
-   CINIT(COOKIEFILE, OBJECTPOINT, 31),
-   CINIT(TIMECONDITION, LONG, 33),
-   CINIT(TIMEVALUE, LONG, 34),
-   CINIT(CUSTOMREQUEST, OBJECTPOINT, 36),
-   CINIT(VERBOSE, LONG, 41),
-   CINIT(NOPROGRESS, LONG, 43),
-   CINIT(NOBODY, LONG, 44),
-   CINIT(UPLOAD, LONG, 46),
-   CINIT(POST, LONG, 47),
-   CINIT(FOLLOWLOCATION, LONG, 52),
-   CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56),
-   CINIT(PROGRESSDATA, OBJECTPOINT, 57),
-   CINIT(POSTFIELDSIZE, LONG, 60),
-   CINIT(SSL_VERIFYPEER, LONG, 64),
-   CINIT(CAINFO, OBJECTPOINT, 65),
-   CINIT(CONNECTTIMEOUT, LONG, 78),
-   CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79),
-   CINIT(COOKIEJAR, OBJECTPOINT, 82),
-   CINIT(HTTP_VERSION, LONG, 84),
-   CINIT(FTP_USE_EPSV, LONG, 85),
-   CINIT(COOKIESESSION, LONG, 96),
-   CINIT(PROXYTYPE, LONG, 101),
-   CINIT(ACCEPT_ENCODING, OBJECTPOINT, 102),
-   CINIT(HTTPAUTH, LONG, 107),
-   CINIT(INFILESIZE_LARGE, OFF_T, 115),
-   CINIT(COOKIELIST, OBJECTPOINT, 135),
-   CINIT(USERNAME, OBJECTPOINT, 173),
-   CINIT(PASSWORD, OBJECTPOINT, 174)
-} CURLoption;
-#define CURLINFO_STRING   0x100000
-#define CURLINFO_LONG     0x200000
-#define CURLINFO_DOUBLE   0x300000
-#define CURLINFO_SLIST    0x400000
-#define CURLINFO_MASK     0x0fffff
-#define CURLINFO_TYPEMASK 0xf00000
-typedef enum
-{
-   CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2,
-} CURLINFO;
-typedef enum
-{
-   CURLVERSION_FOURTH = 3
-} CURLversion;
-typedef enum
-{
-   CURLMSG_DONE = 1
-} CURLMSG;
-#undef CINIT
-#define CINIT(name, type, num) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + num
-typedef enum
-{
-   CINIT(PIPELINING, LONG, 3)
-} CURLMoption;
-typedef enum
-{
-   CURL_TIMECOND_NONE = 0,
-   CURL_TIMECOND_IFMODSINCE = 1,
-   CURL_TIMECOND_IFUNMODSINCE = 2
-} curl_TimeCond;
-enum
-{
-   CURL_HTTP_VERSION_1_0 = 1,
-   CURL_HTTP_VERSION_1_1 = 2,
-};
-typedef enum
-{
-   CURLPROXY_HTTP = 0,
-   CURLPROXY_SOCKS4 = 4,
-   CURLPROXY_SOCKS5 = 5,
-   CURLPROXY_SOCKS4A = 6,
-   CURLPROXY_SOCKS5_HOSTNAME = 7
-} curl_proxytype;
-
-#define CURL_GLOBAL_SSL     (1 << 0)
-#define CURL_GLOBAL_WIN32   (1 << 1)
-#define CURL_GLOBAL_ALL     (CURL_GLOBAL_SSL | CURL_GLOBAL_WIN32)
-#define CURLOPT_ENCODING    CURLOPT_ACCEPT_ENCODING
-#define CURLOPT_WRITEDATA   CURLOPT_FILE
-#define CURLOPT_READDATA    CURLOPT_INFILE
-#define CURLOPT_HEADERDATA  CURLOPT_WRITEHEADER
-#define CURLVERSION_NOW     CURLVERSION_FOURTH
-#define CURLAUTH_BASIC      (((unsigned long)1) << 0)
-#define CURLAUTH_DIGEST_IE  (((unsigned long)1) << 4)
-#define CURLAUTH_ANY        (~CURLAUTH_DIGEST_IE)
-#define CURLAUTH_ANYSAFE    (~(CURLAUTH_BASIC | CURLAUTH_DIGEST_IE))
-#define CURL_READFUNC_ABORT 0x10000000
-
-typedef void CURLM;
-typedef void CURL;
-struct curl_slist
-{
-   char              *data;
-   struct curl_slist *next;
-};
-typedef struct
-{
-   CURLversion        age;
-   const char        *version;
-   unsigned int       version_num;
-   const char        *host;
-   int                features;
-   const char        *ssl_version;
-   long               ssl_version_num;
-   const char        *libz_version;
-   const char *const *protocols;
-   const char        *ares;
-   int                ares_num;
-   const char        *libidn;
-   int                iconv_ver_num;
-   const char        *libssh_version;
-} curl_version_info_data;
-typedef struct
-{
-   CURLMSG msg;
-   CURL   *easy_handle;
-   union
-   {
-      void    *whatever;
-      CURLcode result;
-   } data;
-} CURLMsg;
 
 typedef enum _Ecore_Con_Url_Mode
 {
@@ -192,47 +42,6 @@ typedef enum _Ecore_Con_Url_Mode
    ECORE_CON_URL_MODE_HEAD = 3,
 } Ecore_Con_Url_Mode;
 
-typedef struct _Ecore_Con_Curl Ecore_Con_Curl;
-
-struct _Ecore_Con_Curl
-{
-   Eina_Module            *mod;
-
-   CURLM                  *_curlm;
-
-   CURLcode                (*curl_global_init)(long flags);
-   void                    (*curl_global_cleanup)(void);
-   CURLM                  *(*curl_multi_init)(void);
-   CURLMcode               (*curl_multi_timeout)(CURLM *multi_handle,
-                                                 long *milliseconds);
-   CURLMcode               (*curl_multi_cleanup)(CURLM *multi_handle);
-   CURLMcode               (*curl_multi_remove_handle)(CURLM *multi_handle,
-                                                       CURL *curl_handle);
-   const char             *(*curl_multi_strerror)(CURLMcode);
-   CURLMsg                *(*curl_multi_info_read)(CURLM * multi_handle,
-                                                   int *msgs_in_queue);
-   CURLMcode               (*curl_multi_fdset)(CURLM *multi_handle,
-                                               fd_set *read_fd_set,
-                                               fd_set *write_fd_set,
-                                               fd_set *exc_fd_set,
-                                               int *max_fd);
-   CURLMcode               (*curl_multi_perform)(CURLM *multi_handle,
-                                                 int *running_handles);
-   CURLMcode               (*curl_multi_add_handle)(CURLM *multi_handle,
-                                                    CURL *curl_handle);
-   CURLMcode               (*curl_multi_setopt)(CURLM *multi_handle,
-                                                CURLMoption option, ...);
-   CURL                   *(*curl_easy_init)(void);
-   CURLcode                (*curl_easy_setopt)(CURL *curl, CURLoption option, 
...);
-   const char             *(*curl_easy_strerror)(CURLcode);
-   void                    (*curl_easy_cleanup)(CURL *curl);
-   CURLcode                (*curl_easy_getinfo)(CURL *curl, CURLINFO info, 
...);
-   void                    (*curl_slist_free_all)(struct curl_slist *);
-   struct curl_slist      *(*curl_slist_append)(struct curl_slist *list,
-                                                const char *string);
-   curl_version_info_data *(*curl_version_info)(CURLversion);
-};
-
 struct _Ecore_Con_Url_Data
 {
    void *curl_easy;
@@ -262,8 +71,6 @@ struct _Ecore_Con_Url_Data
 typedef struct _Ecore_Con_Url_Data Ecore_Con_Url_Data;
 typedef struct _Ecore_Con_Url_Data Efl_Network_Url_Data;
 
-#define CURL_MIN_TIMEOUT 100
-
 int ECORE_CON_EVENT_URL_DATA = 0;
 int ECORE_CON_EVENT_URL_COMPLETE = 0;
 int ECORE_CON_EVENT_URL_PROGRESS = 0;
@@ -287,104 +94,14 @@ static int _init_count = 0;
 static Ecore_Timer *_curl_timer = NULL;
 static Eina_Bool pipelining = EINA_FALSE;
 
-static Ecore_Con_Curl *_c = NULL;
-static Eina_Bool _c_fail = EINA_FALSE;
-
-static Eina_Bool
-_c_init(void)
-{
-   long ms = 0;
-
-   if (_c) return EINA_TRUE;
-   if (_c_fail) return EINA_FALSE;
-   _c = calloc(1, sizeof(Ecore_Con_Curl));
-   if (!_c) goto error;
-
-#define LOAD(x)                               \
-  if (!_c->mod) {                             \
-       if ((_c->mod = eina_module_new(x))) {  \
-            if (!eina_module_load(_c->mod)) { \
-                 eina_module_free(_c->mod);   \
-                 _c->mod = NULL;              \
-              }                               \
-         }                                    \
-    }
-#if defined(_WIN32) || defined(__CYGWIN__)
-   LOAD("libcurl-5.dll"); // try correct dll first
-   LOAD("libcurl-4.dll"); // try correct dll first
-   LOAD("libcurl.dll"); // try 1
-   LOAD("curllib.dll"); // if fail try 2
-#elif defined(__APPLE__) && defined(__MACH__)
-   LOAD("libcurl.5.dylib"); // try 1
-   LOAD("libcurl.4.dylib"); // try 1
-   LOAD("libcurl.so.5"); // if fail try 2
-   LOAD("libcurl.so.4"); // if fail try 2
-#else
-   LOAD("libcurl.so.5"); // try only
-   LOAD("libcurl.so.4"); // try only
-#endif
-   if (!_c->mod) goto error;
-
-#define SYM(x) if (!(_c->x = eina_module_symbol_get(_c->mod, #x))) \
-    goto error
-   SYM(curl_global_init);
-   SYM(curl_global_cleanup);
-   SYM(curl_multi_init);
-   SYM(curl_multi_timeout);
-   SYM(curl_multi_cleanup);
-   SYM(curl_multi_remove_handle);
-   SYM(curl_multi_strerror);
-   SYM(curl_multi_info_read);
-   SYM(curl_multi_fdset);
-   SYM(curl_multi_perform);
-   SYM(curl_multi_add_handle);
-   SYM(curl_multi_setopt);
-   SYM(curl_easy_init);
-   SYM(curl_easy_setopt);
-   SYM(curl_easy_strerror);
-   SYM(curl_easy_cleanup);
-   SYM(curl_easy_getinfo);
-   SYM(curl_slist_free_all);
-   SYM(curl_slist_append);
-   SYM(curl_version_info);
-
-   // curl_global_init() is not thread safe!
-   if (_c->curl_global_init(CURL_GLOBAL_ALL)) goto error;
-   _c->_curlm = _c->curl_multi_init();
-   if (!_c->_curlm)
-     {
-        _c->curl_global_cleanup();
-        goto error;
-     }
-   _c->curl_multi_timeout(_c->_curlm, &ms);
-   if ((ms >= CURL_MIN_TIMEOUT) || (ms < 0)) ms = CURL_MIN_TIMEOUT;
-   _curl_timer = ecore_timer_add((double)ms / 1000.0,
-                                 _ecore_con_url_timer, NULL);
-   ecore_timer_freeze(_curl_timer);
-   return EINA_TRUE;
-error:
-   if (_c)
-     {
-        if (_c->mod) eina_module_free(_c->mod);
-        free(_c);
-        _c = NULL;
-     }
-   _c_fail = EINA_TRUE;
-   return EINA_FALSE;
-}
-
 static void
-_c_shutdown(void)
+_ecore_con_post_init(void)
 {
-   if (!_c) return;
-   if (_c->_curlm)
+   if (!_curl_timer)
      {
-        _c->curl_multi_cleanup(_c->_curlm);
+        _curl_timer = ecore_timer_add(_c_timeout, _ecore_con_url_timer, NULL);
+        ecore_timer_freeze(_curl_timer);
      }
-   _c->curl_global_cleanup();
-   if (_c->mod) eina_module_free(_c->mod);
-   free(_c);
-   _c = NULL;
 }
 
 /**
@@ -430,6 +147,7 @@ EAPI void
 ecore_con_url_pipeline_set(Eina_Bool enable)
 {
    if (!_c_init()) return;
+   _ecore_con_post_init();
    if (enable == pipelining) return;
    _c->curl_multi_setopt(_c->_curlm, CURLMOPT_PIPELINING, !!enable);
    pipelining = enable;
@@ -527,6 +245,7 @@ _efl_network_url_eo_base_constructor(Efl_Network_Url 
*url_obj, Efl_Network_Url_D
         ERR("Failed");
         return NULL;
      }
+   _ecore_con_post_init();
 
    url_con->curl_easy = _c->curl_easy_init();
    if (!url_con->curl_easy)
@@ -631,6 +350,7 @@ ecore_con_url_custom_new(const char *url,
 
    if (!_init_count) return NULL;
    if (!_c_init()) return NULL;
+   _ecore_con_post_init();
    if (!url) return NULL;
    if (!custom_request) return NULL;
    url_obj = ecore_con_url_new(url);
diff --git a/src/lib/ecore_con/ecore_con_url_curl.c 
b/src/lib/ecore_con/ecore_con_url_curl.c
new file mode 100644
index 0000000..774c544
--- /dev/null
+++ b/src/lib/ecore_con/ecore_con_url_curl.c
@@ -0,0 +1,122 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#ifdef HAVE_WS2TCPIP_H
+# include <ws2tcpip.h>
+#endif
+
+#ifdef HAVE_ESCAPE
+# include <Escape.h>
+#endif
+
+#include "Ecore.h"
+#include "ecore_private.h"
+#include "Ecore_Con.h"
+#include "ecore_con_private.h"
+#include "ecore_con_url_curl.h"
+
+Ecore_Con_Curl *_c = NULL;
+Eina_Bool _c_fail = EINA_FALSE;
+double _c_timeout = 0.0;
+
+Eina_Bool
+_c_init(void)
+{
+   long ms = 0;
+
+   if (_c) return EINA_TRUE;
+   if (_c_fail) return EINA_FALSE;
+   _c = calloc(1, sizeof(Ecore_Con_Curl));
+   if (!_c) goto error;
+
+#define LOAD(x)                               \
+  if (!_c->mod) {                             \
+       if ((_c->mod = eina_module_new(x))) {  \
+            if (!eina_module_load(_c->mod)) { \
+                 eina_module_free(_c->mod);   \
+                 _c->mod = NULL;              \
+              }                               \
+         }                                    \
+    }
+#if defined(_WIN32) || defined(__CYGWIN__)
+   LOAD("libcurl-5.dll"); // try correct dll first
+   LOAD("libcurl-4.dll"); // try correct dll first
+   LOAD("libcurl.dll"); // try 1
+   LOAD("curllib.dll"); // if fail try 2
+#elif defined(__APPLE__) && defined(__MACH__)
+   LOAD("libcurl.5.dylib"); // try 1
+   LOAD("libcurl.4.dylib"); // try 1
+   LOAD("libcurl.so.5"); // if fail try 2
+   LOAD("libcurl.so.4"); // if fail try 2
+#else
+   LOAD("libcurl.so.5"); // try only
+   LOAD("libcurl.so.4"); // try only
+#endif
+   if (!_c->mod) goto error;
+
+#define SYM(x) if (!(_c->x = eina_module_symbol_get(_c->mod, #x))) \
+    goto error
+   SYM(curl_global_init);
+   SYM(curl_global_cleanup);
+   SYM(curl_multi_init);
+   SYM(curl_multi_timeout);
+   SYM(curl_multi_cleanup);
+   SYM(curl_multi_remove_handle);
+   SYM(curl_multi_strerror);
+   SYM(curl_multi_info_read);
+   SYM(curl_multi_fdset);
+   SYM(curl_multi_perform);
+   SYM(curl_multi_add_handle);
+   SYM(curl_multi_setopt);
+   SYM(curl_easy_init);
+   SYM(curl_easy_setopt);
+   SYM(curl_easy_strerror);
+   SYM(curl_easy_cleanup);
+   SYM(curl_easy_getinfo);
+   SYM(curl_slist_free_all);
+   SYM(curl_slist_append);
+   SYM(curl_version_info);
+
+   // curl_global_init() is not thread safe!
+   if (_c->curl_global_init(CURL_GLOBAL_ALL)) goto error;
+   _c->_curlm = _c->curl_multi_init();
+   if (!_c->_curlm)
+     {
+        _c->curl_global_cleanup();
+        goto error;
+     }
+   _c->curl_multi_timeout(_c->_curlm, &ms);
+   if ((ms >= CURL_MIN_TIMEOUT) || (ms < 0)) ms = CURL_MIN_TIMEOUT;
+   _c_timeout = ms / 1000.0;
+   return EINA_TRUE;
+error:
+   if (_c)
+     {
+        if (_c->mod) eina_module_free(_c->mod);
+        free(_c);
+        _c = NULL;
+     }
+   _c_fail = EINA_TRUE;
+   return EINA_FALSE;
+}
+
+void
+_c_shutdown(void)
+{
+   if (!_c) return;
+   if (_c->_curlm)
+     {
+        _c->curl_multi_cleanup(_c->_curlm);
+     }
+   _c->curl_global_cleanup();
+   if (_c->mod) eina_module_free(_c->mod);
+   free(_c);
+   _c = NULL;
+}
diff --git a/src/lib/ecore_con/ecore_con_url_curl.h 
b/src/lib/ecore_con/ecore_con_url_curl.h
new file mode 100644
index 0000000..2917fe6
--- /dev/null
+++ b/src/lib/ecore_con/ecore_con_url_curl.h
@@ -0,0 +1,206 @@
+#ifndef ECORE_CON_URL_CURL_H
+#define ECORE_CON_URL_CURL_H 1
+
+// all the types, defines, enums etc. from curl that we actually USE.
+// we have to add to this if we use more things from curl not already
+// defined here. see curl headers to get them from
+typedef enum
+{
+   CURLM_CALL_MULTI_PERFORM = -1,
+   CURLM_OK = 0
+} CURLMcode;
+typedef enum
+{
+   CURLE_OK = 0,
+   CURLE_OPERATION_TIMEDOUT = 28
+} CURLcode;
+#define CURLOPTTYPE_LONG          0
+#define CURLOPTTYPE_OBJECTPOINT   10000
+#define CURLOPTTYPE_FUNCTIONPOINT 20000
+#define CURLOPTTYPE_OFF_T         30000
+#define CINIT(na, t, nu) CURLOPT_ ## na = CURLOPTTYPE_ ## t + nu
+typedef enum
+{
+   CINIT(FILE, OBJECTPOINT, 1),
+   CINIT(URL, OBJECTPOINT, 2),
+   CINIT(PROXY, OBJECTPOINT, 4),
+   CINIT(USERPWD, OBJECTPOINT, 5),
+   CINIT(INFILE, OBJECTPOINT, 9),
+   CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11),
+   CINIT(READFUNCTION, FUNCTIONPOINT, 12),
+   CINIT(POSTFIELDS, OBJECTPOINT, 15),
+   CINIT(HTTPHEADER, OBJECTPOINT, 23),
+   CINIT(WRITEHEADER, OBJECTPOINT, 29),
+   CINIT(COOKIEFILE, OBJECTPOINT, 31),
+   CINIT(TIMECONDITION, LONG, 33),
+   CINIT(TIMEVALUE, LONG, 34),
+   CINIT(CUSTOMREQUEST, OBJECTPOINT, 36),
+   CINIT(VERBOSE, LONG, 41),
+   CINIT(NOPROGRESS, LONG, 43),
+   CINIT(NOBODY, LONG, 44),
+   CINIT(UPLOAD, LONG, 46),
+   CINIT(POST, LONG, 47),
+   CINIT(FOLLOWLOCATION, LONG, 52),
+   CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56),
+   CINIT(PROGRESSDATA, OBJECTPOINT, 57),
+   CINIT(POSTFIELDSIZE, LONG, 60),
+   CINIT(SSL_VERIFYPEER, LONG, 64),
+   CINIT(CAINFO, OBJECTPOINT, 65),
+   CINIT(CONNECTTIMEOUT, LONG, 78),
+   CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79),
+   CINIT(COOKIEJAR, OBJECTPOINT, 82),
+   CINIT(HTTP_VERSION, LONG, 84),
+   CINIT(FTP_USE_EPSV, LONG, 85),
+   CINIT(COOKIESESSION, LONG, 96),
+   CINIT(PROXYTYPE, LONG, 101),
+   CINIT(ACCEPT_ENCODING, OBJECTPOINT, 102),
+   CINIT(HTTPAUTH, LONG, 107),
+   CINIT(INFILESIZE_LARGE, OFF_T, 115),
+   CINIT(COOKIELIST, OBJECTPOINT, 135),
+   CINIT(USERNAME, OBJECTPOINT, 173),
+   CINIT(PASSWORD, OBJECTPOINT, 174)
+} CURLoption;
+#define CURLINFO_STRING   0x100000
+#define CURLINFO_LONG     0x200000
+#define CURLINFO_DOUBLE   0x300000
+#define CURLINFO_SLIST    0x400000
+#define CURLINFO_MASK     0x0fffff
+#define CURLINFO_TYPEMASK 0xf00000
+typedef enum
+{
+   CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2,
+} CURLINFO;
+typedef enum
+{
+   CURLVERSION_FOURTH = 3
+} CURLversion;
+typedef enum
+{
+   CURLMSG_DONE = 1
+} CURLMSG;
+#undef CINIT
+#define CINIT(name, type, num) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + num
+typedef enum
+{
+   CINIT(PIPELINING, LONG, 3)
+} CURLMoption;
+typedef enum
+{
+   CURL_TIMECOND_NONE = 0,
+   CURL_TIMECOND_IFMODSINCE = 1,
+   CURL_TIMECOND_IFUNMODSINCE = 2
+} curl_TimeCond;
+enum
+{
+   CURL_HTTP_VERSION_1_0 = 1,
+   CURL_HTTP_VERSION_1_1 = 2,
+};
+typedef enum
+{
+   CURLPROXY_HTTP = 0,
+   CURLPROXY_SOCKS4 = 4,
+   CURLPROXY_SOCKS5 = 5,
+   CURLPROXY_SOCKS4A = 6,
+   CURLPROXY_SOCKS5_HOSTNAME = 7
+} curl_proxytype;
+
+#define CURL_GLOBAL_SSL     (1 << 0)
+#define CURL_GLOBAL_WIN32   (1 << 1)
+#define CURL_GLOBAL_ALL     (CURL_GLOBAL_SSL | CURL_GLOBAL_WIN32)
+#define CURLOPT_ENCODING    CURLOPT_ACCEPT_ENCODING
+#define CURLOPT_WRITEDATA   CURLOPT_FILE
+#define CURLOPT_READDATA    CURLOPT_INFILE
+#define CURLOPT_HEADERDATA  CURLOPT_WRITEHEADER
+#define CURLVERSION_NOW     CURLVERSION_FOURTH
+#define CURLAUTH_BASIC      (((unsigned long)1) << 0)
+#define CURLAUTH_DIGEST_IE  (((unsigned long)1) << 4)
+#define CURLAUTH_ANY        (~CURLAUTH_DIGEST_IE)
+#define CURLAUTH_ANYSAFE    (~(CURLAUTH_BASIC | CURLAUTH_DIGEST_IE))
+#define CURL_READFUNC_ABORT 0x10000000
+
+typedef void CURLM;
+typedef void CURL;
+struct curl_slist
+{
+   char              *data;
+   struct curl_slist *next;
+};
+typedef struct
+{
+   CURLversion        age;
+   const char        *version;
+   unsigned int       version_num;
+   const char        *host;
+   int                features;
+   const char        *ssl_version;
+   long               ssl_version_num;
+   const char        *libz_version;
+   const char *const *protocols;
+   const char        *ares;
+   int                ares_num;
+   const char        *libidn;
+   int                iconv_ver_num;
+   const char        *libssh_version;
+} curl_version_info_data;
+typedef struct
+{
+   CURLMSG msg;
+   CURL   *easy_handle;
+   union
+   {
+      void    *whatever;
+      CURLcode result;
+   } data;
+} CURLMsg;
+
+typedef struct _Ecore_Con_Curl Ecore_Con_Curl;
+
+struct _Ecore_Con_Curl
+{
+   Eina_Module            *mod;
+
+   CURLM                  *_curlm;
+
+   CURLcode                (*curl_global_init)(long flags);
+   void                    (*curl_global_cleanup)(void);
+   CURLM                  *(*curl_multi_init)(void);
+   CURLMcode               (*curl_multi_timeout)(CURLM *multi_handle,
+                                                 long *milliseconds);
+   CURLMcode               (*curl_multi_cleanup)(CURLM *multi_handle);
+   CURLMcode               (*curl_multi_remove_handle)(CURLM *multi_handle,
+                                                       CURL *curl_handle);
+   const char             *(*curl_multi_strerror)(CURLMcode);
+   CURLMsg                *(*curl_multi_info_read)(CURLM * multi_handle,
+                                                   int *msgs_in_queue);
+   CURLMcode               (*curl_multi_fdset)(CURLM *multi_handle,
+                                               fd_set *read_fd_set,
+                                               fd_set *write_fd_set,
+                                               fd_set *exc_fd_set,
+                                               int *max_fd);
+   CURLMcode               (*curl_multi_perform)(CURLM *multi_handle,
+                                                 int *running_handles);
+   CURLMcode               (*curl_multi_add_handle)(CURLM *multi_handle,
+                                                    CURL *curl_handle);
+   CURLMcode               (*curl_multi_setopt)(CURLM *multi_handle,
+                                                CURLMoption option, ...);
+   CURL                   *(*curl_easy_init)(void);
+   CURLcode                (*curl_easy_setopt)(CURL *curl, CURLoption option, 
...);
+   const char             *(*curl_easy_strerror)(CURLcode);
+   void                    (*curl_easy_cleanup)(CURL *curl);
+   CURLcode                (*curl_easy_getinfo)(CURL *curl, CURLINFO info, 
...);
+   void                    (*curl_slist_free_all)(struct curl_slist *);
+   struct curl_slist      *(*curl_slist_append)(struct curl_slist *list,
+                                                const char *string);
+   curl_version_info_data *(*curl_version_info)(CURLversion);
+};
+
+#define CURL_MIN_TIMEOUT 100
+
+extern Ecore_Con_Curl *_c;
+extern Eina_Bool _c_fail;
+extern double _c_timeout;
+
+Eina_Bool _c_init(void);
+void _c_shutdown(void);
+
+#endif

-- 


Reply via email to