From 4a5b1a22bb13aa3f0635e544e877ddd549ef82c0 Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Sun, 17 Aug 2014 18:05:57 -0700 Subject: [PATCH] CURL improvement --- lime/net/curl/CURL.hx | 8 +++ lime/system/System.hx | 12 +++- project/src/net/curl/CURLBindings.cpp | 92 ++++++++++++++++----------- 3 files changed, 74 insertions(+), 38 deletions(-) diff --git a/lime/net/curl/CURL.hx b/lime/net/curl/CURL.hx index ce1fb053a..d7042c7f5 100644 --- a/lime/net/curl/CURL.hx +++ b/lime/net/curl/CURL.hx @@ -7,6 +7,14 @@ import lime.system.System; class CURL { + public static inline var GLOBAL_SSL:Int = 1 << 0; + public static inline var GLOBAL_WIN32:Int = 1 << 1; + public static inline var GLOBAL_ALL:Int = GLOBAL_SSL | GLOBAL_WIN32; + public static inline var GLOBAL_NOTHING:Int = 0; + public static inline var GLOBAL_DEFAULT:Int = GLOBAL_ALL; + public static inline var GLOBAL_ACK_EINTR:Int = 1 << 2; + + public static function easyCleanup (handle:Dynamic):Void { #if (cpp || neko) diff --git a/lime/system/System.hx b/lime/system/System.hx index ff73133cc..df86cb0b0 100644 --- a/lime/system/System.hx +++ b/lime/system/System.hx @@ -120,7 +120,17 @@ class System { } - public static function load (library:String, method:String, args:Int = 0):Dynamic { + public static function load (library:String, method:String, args:Int = 0, lazy:Bool = false):Dynamic { + + if (lazy) { + + #if neko + return neko.Lib.loadLazy (library, method, args); + #elseif cpp + return cpp.Lib.loadLazy (library, method, args); + #end + + } #if !disable_cffi #if sys diff --git a/project/src/net/curl/CURLBindings.cpp b/project/src/net/curl/CURLBindings.cpp index ee4e8883c..aed4a510d 100644 --- a/project/src/net/curl/CURLBindings.cpp +++ b/project/src/net/curl/CURLBindings.cpp @@ -187,6 +187,45 @@ namespace lime { case CURLOPT_NOSIGNAL: case CURLOPT_WILDCARDMATCH: case CURLOPT_FAILONERROR: + case CURLOPT_DNS_USE_GLOBAL_CACHE: + case CURLOPT_TCP_NODELAY: + case CURLOPT_TCP_KEEPALIVE: + case CURLOPT_SASL_IR: + case CURLOPT_AUTOREFERER: + case CURLOPT_TRANSFER_ENCODING: + case CURLOPT_FOLLOWLOCATION: + case CURLOPT_UNRESTRICTED_AUTH: + case CURLOPT_PUT: + case CURLOPT_POST: + case CURLOPT_COOKIESESSION: + case CURLOPT_HTTPGET: + case CURLOPT_IGNORE_CONTENT_LENGTH: + case CURLOPT_HTTP_CONTENT_DECODING: + case CURLOPT_HTTP_TRANSFER_DECODING: + case CURLOPT_DIRLISTONLY: + case CURLOPT_APPEND: + case CURLOPT_FTP_USE_EPRT: + case CURLOPT_FTP_USE_EPSV: + case CURLOPT_FTP_USE_PRET: + case CURLOPT_FTP_CREATE_MISSING_DIRS: + case CURLOPT_FTP_SKIP_PASV_IP: + case CURLOPT_TRANSFERTEXT: + case CURLOPT_CRLF: + case CURLOPT_NOBODY: + case CURLOPT_UPLOAD: + case CURLOPT_FRESH_CONNECT: + case CURLOPT_FORBID_REUSE: + case CURLOPT_CONNECT_ONLY: + case CURLOPT_USE_SSL: + //case CURLOPT_SSL_ENABLE_ALPN: + //case CURLOPT_SSL_ENABLE_NPN: + case CURLOPT_SSL_VERIFYPEER: + case CURLOPT_SSL_VERIFYHOST: + case CURLOPT_SSL_SESSIONID_CACHE: + + code = curl_easy_setopt (curl, type, val_bool (parameter)); + break; + case CURLOPT_PROTOCOLS: case CURLOPT_REDIR_PROTOCOLS: case CURLOPT_PROXYPORT: @@ -196,58 +235,32 @@ namespace lime { case CURLOPT_LOCALPORT: case CURLOPT_LOCALPORTRANGE: case CURLOPT_DNS_CACHE_TIMEOUT: - case CURLOPT_DNS_USE_GLOBAL_CACHE: case CURLOPT_BUFFERSIZE: case CURLOPT_PORT: - case CURLOPT_TCP_NODELAY: case CURLOPT_ADDRESS_SCOPE: - case CURLOPT_TCP_KEEPALIVE: case CURLOPT_TCP_KEEPIDLE: case CURLOPT_TCP_KEEPINTVL: case CURLOPT_NETRC: case CURLOPT_HTTPAUTH: case CURLOPT_PROXYAUTH: - case CURLOPT_SASL_IR: - case CURLOPT_AUTOREFERER: - case CURLOPT_TRANSFER_ENCODING: - case CURLOPT_FOLLOWLOCATION: - case CURLOPT_UNRESTRICTED_AUTH: case CURLOPT_MAXREDIRS: case CURLOPT_POSTREDIR: - case CURLOPT_PUT: - case CURLOPT_POST: case CURLOPT_POSTFIELDSIZE: //case CURLOPT_HEADEROPT: - case CURLOPT_COOKIESESSION: - case CURLOPT_HTTPGET: case CURLOPT_HTTP_VERSION: - case CURLOPT_IGNORE_CONTENT_LENGTH: - case CURLOPT_HTTP_CONTENT_DECODING: - case CURLOPT_HTTP_TRANSFER_DECODING: //case CURLOPT_EXPECT_100_TIMEOUT_MS: case CURLOPT_TFTP_BLKSIZE: - case CURLOPT_DIRLISTONLY: - case CURLOPT_APPEND: - case CURLOPT_FTP_USE_EPRT: - case CURLOPT_FTP_USE_EPSV: - case CURLOPT_FTP_USE_PRET: - case CURLOPT_FTP_CREATE_MISSING_DIRS: case CURLOPT_FTP_RESPONSE_TIMEOUT: - case CURLOPT_FTP_SKIP_PASV_IP: case CURLOPT_FTPSSLAUTH: case CURLOPT_FTP_SSL_CCC: case CURLOPT_FTP_FILEMETHOD: case CURLOPT_RTSP_REQUEST: case CURLOPT_RTSP_CLIENT_CSEQ: case CURLOPT_RTSP_SERVER_CSEQ: - case CURLOPT_TRANSFERTEXT: case CURLOPT_PROXY_TRANSFER_MODE: - case CURLOPT_CRLF: case CURLOPT_RESUME_FROM: case CURLOPT_FILETIME: - case CURLOPT_NOBODY: case CURLOPT_INFILESIZE: - case CURLOPT_UPLOAD: case CURLOPT_MAXFILESIZE: case CURLOPT_TIMECONDITION: case CURLOPT_TIMEVALUE: @@ -256,22 +269,13 @@ namespace lime { case CURLOPT_LOW_SPEED_LIMIT: case CURLOPT_LOW_SPEED_TIME: case CURLOPT_MAXCONNECTS: - case CURLOPT_FRESH_CONNECT: - case CURLOPT_FORBID_REUSE: case CURLOPT_CONNECTTIMEOUT: case CURLOPT_CONNECTTIMEOUT_MS: case CURLOPT_IPRESOLVE: - case CURLOPT_CONNECT_ONLY: - case CURLOPT_USE_SSL: case CURLOPT_ACCEPTTIMEOUT_MS: - //case CURLOPT_SSL_ENABLE_ALPN: - //case CURLOPT_SSL_ENABLE_NPN: case CURLOPT_SSLENGINE_DEFAULT: case CURLOPT_SSLVERSION: - case CURLOPT_SSL_VERIFYPEER: - case CURLOPT_SSL_VERIFYHOST: case CURLOPT_CERTINFO: - case CURLOPT_SSL_SESSIONID_CACHE: case CURLOPT_SSL_OPTIONS: case CURLOPT_GSSAPI_DELEGATION: case CURLOPT_SSH_AUTH_TYPES: @@ -384,7 +388,6 @@ namespace lime { case CURLOPT_FNMATCH_DATA: case CURLOPT_STDERR: case CURLOPT_HTTPPOST: - case CURLOPT_HTTPHEADER: //case CURLOPT_PROXYHEADER: case CURLOPT_HTTP200ALIASES: case CURLOPT_MAIL_RCPT: @@ -406,11 +409,26 @@ namespace lime { case CURLOPT_READFUNCTION: case CURLOPT_WRITEFUNCTION: - + { AutoGCRoot* callback = new AutoGCRoot (parameter); code = curl_easy_setopt (curl, type, rw_callback); curl_easy_setopt (curl, type == CURLOPT_READFUNCTION ? CURLOPT_READDATA : CURLOPT_WRITEDATA, callback); break; + } + + case CURLOPT_HTTPHEADER: + + struct curl_slist *chunk = NULL; + int size = val_array_size (parameter); + + for (int i = 0; i < size; i++) { + + chunk = curl_slist_append (chunk, val_string (val_array_i (parameter, i))); + + } + + code = curl_easy_setopt (curl, type, chunk); + break; }