diff options
Diffstat (limited to 'src/lib/ecore_con/ecore_con_url_curl.h')
-rw-r--r-- | src/lib/ecore_con/ecore_con_url_curl.h | 206 |
1 files changed, 206 insertions, 0 deletions
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 0000000000..2917fe6505 --- /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 |