From ddf322e6929c678a7318764ddfae32d53ea4adbb Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Tue, 1 May 2018 13:35:25 +0300 Subject: [PATCH 1/6] Add. Example for version_info. --- examples/lcurl/crul_info.lua | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 examples/lcurl/crul_info.lua diff --git a/examples/lcurl/crul_info.lua b/examples/lcurl/crul_info.lua new file mode 100644 index 0000000..e49419a --- /dev/null +++ b/examples/lcurl/crul_info.lua @@ -0,0 +1,36 @@ +local curl = require "lcurl" + +local function keys(t) + local s = {} + for k in pairs(t) do + s[#s + 1] = k + end + table.sort(s) + return s +end + +local function printf(...) + return print(string.format(...)) +end + +local exclude = {protocols = 1, features = 1, version = 1, version_num = 1} + +local info = curl.version_info() + +print(curl.version()) + +for _, key in ipairs(keys(info)) do if not exclude[key] then + printf("%15s: %s", key, info[key]) +end end + +print('Protocols:') +for _, protocol in ipairs(keys(info.protocols))do + local on = info.protocols[protocol] + printf(' [%s] %s', on and '+' or '-', protocol) +end + +print('Features:') +for _, feature in ipairs(keys(info.features))do + local on = info.features[feature] + printf(' [%s] %s', on and '+' or '-', feature) +end From 27946bc9857c9ffe418cfe292c910e29cf73cebc Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Tue, 1 May 2018 13:47:07 +0300 Subject: [PATCH 2/6] Add. Fifth version info fields. --- msvc/lcurl.vcproj | 4 ++-- src/lcurl.c | 14 +++++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/msvc/lcurl.vcproj b/msvc/lcurl.vcproj index 7c22f2e..270841e 100644 --- a/msvc/lcurl.vcproj +++ b/msvc/lcurl.vcproj @@ -41,7 +41,7 @@ features & CURL_VERSION_MULTI_SSL ); lua_rawset(L, -3); #endif +#ifdef CURL_VERSION_BROTLI + lua_pushliteral(L, "BROTLI"); lua_pushboolean(L, data->features & CURL_VERSION_BROTLI ); lua_rawset(L, -3); +#endif lua_setfield(L, -2, "features"); /* bitmask, see defines below */ @@ -140,10 +143,19 @@ static int lcurl_version_info(lua_State *L){ if(data->libidn){lua_pushstring(L, data->libidn); lua_setfield(L, -2, "libidn");} } - if(data->age >= CURLVERSION_FOURTH){ /* added in 7.16.1 */ +#if LCURL_CURL_VER_GE(7,16,1) + if(data->age >= CURLVERSION_FOURTH){ lua_pushnumber(L, data->iconv_ver_num); lua_setfield(L, -2, "iconv_ver_num"); if(data->libssh_version){lua_pushstring(L, data->libssh_version);lua_setfield(L, -2, "libssh_version");} } +#endif + +#if LCURL_CURL_VER_GE(7,57,0) + if(data->age >= CURLVERSION_FOURTH){ + lua_pushnumber(L, data->brotli_ver_num); lua_setfield(L, -2, "brotli_ver_num"); + if(data->brotli_version){lua_pushstring(L, data->brotli_version);lua_setfield(L, -2, "brotli_version");} + } +#endif if(lua_isstring(L, 1)){ lua_pushvalue(L, 1); lua_rawget(L, -2); From 7b13a8c77feb0ef9300ec3a7e6870b0fc2cd6b44 Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Tue, 1 May 2018 13:59:26 +0300 Subject: [PATCH 3/6] Add. SSH_AUTH_GSSAPI flag. --- src/lcflags.h | 3 +++ src/lua/cURL/impl/cURL.lua | 20 ++++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/lcflags.h b/src/lcflags.h index a2cb010..543a239 100644 --- a/src/lcflags.h +++ b/src/lcflags.h @@ -37,6 +37,9 @@ FLG_ENTRY(SSH_AUTH_PASSWORD ) #ifdef CURLSSH_AUTH_HOST FLG_ENTRY(SSH_AUTH_HOST ) #endif +#ifdef CURLSSH_AUTH_GSSAPI +FLG_ENTRY(SSH_AUTH_GSSAPI ) +#endif #ifdef CURLSSH_AUTH_KEYBOARD FLG_ENTRY(SSH_AUTH_KEYBOARD ) #endif diff --git a/src/lua/cURL/impl/cURL.lua b/src/lua/cURL/impl/cURL.lua index 6910ca2..50eb483 100644 --- a/src/lua/cURL/impl/cURL.lua +++ b/src/lua/cURL/impl/cURL.lua @@ -381,14 +381,18 @@ Easy.setopt_httpauth = wrap_setopt_flags("httpauth", { ["ONLY" ] = curl.AUTH_ONLY; ["ANY" ] = curl.AUTH_ANY; ["ANYSAFE" ] = curl.AUTH_ANYSAFE; - ["SSH_ANY" ] = curl.SSH_AUTH_ANY; - ["SSH_NONE" ] = curl.SSH_AUTH_NONE; - ["SSH_PUBLICKEY" ] = curl.SSH_AUTH_PUBLICKEY; - ["SSH_PASSWORD" ] = curl.SSH_AUTH_PASSWORD; - ["SSH_HOST" ] = curl.SSH_AUTH_HOST; - ["SSH_KEYBOARD" ] = curl.SSH_AUTH_KEYBOARD; - ["SSH_AGENT" ] = curl.SSH_AUTH_AGENT; - ["SSH_DEFAULT" ] = curl.SSH_AUTH_DEFAULT; +}) + +Easy.setopt_ssh_auth_types = wrap_setopt_flags("ssh_auth_types", { + ["NONE" ] = curl.SSH_AUTH_NONE; + ["ANY" ] = curl.SSH_AUTH_ANY; + ["PUBLICKEY" ] = curl.SSH_AUTH_PUBLICKEY; + ["PASSWORD" ] = curl.SSH_AUTH_PASSWORD; + ["HOST" ] = curl.SSH_AUTH_HOST; + ["GSSAPI" ] = curl.SSH_AUTH_GSSAPI; + ["KEYBOARD" ] = curl.SSH_AUTH_KEYBOARD; + ["AGENT" ] = curl.SSH_AUTH_AGENT; + ["DEFAULT" ] = curl.SSH_AUTH_DEFAULT; }) end From 1a44488fe988834875b105fd81f16b9b3b870459 Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Tue, 1 May 2018 14:33:11 +0300 Subject: [PATCH 4/6] Add. happy_eyeballs_timeout_ms and timevalue_large options --- src/lceasy.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/lceasy.h | 2 ++ src/lcopteasy.h | 5 +++++ 3 files changed, 52 insertions(+) diff --git a/src/lceasy.c b/src/lceasy.c index 683c041..344f5f4 100644 --- a/src/lceasy.c +++ b/src/lceasy.c @@ -323,6 +323,25 @@ static int lcurl_opt_set_long_(lua_State *L, int opt){ return 1; } +#if LCURL_CURL_VER_GE(7,59,0) + +static int lcurl_opt_set_off_(lua_State *L, int opt){ + lcurl_easy_t *p = lcurl_geteasy(L); + curl_off_t val; CURLcode code; + + luaL_argcheck(L, lua_type(L, 2) == LUA_TNUMBER, 2, "number expected"); + val = lutil_checkint64(L, 2); + + code = curl_easy_setopt(p->curl, opt, val); + if(code != CURLE_OK){ + return lcurl_fail_ex(L, p->err_mode, LCURL_ERROR_EASY, code); + } + lua_settop(L, 1); + return 1; +} + +#endif + static int lcurl_opt_set_string_(lua_State *L, int opt, int store){ lcurl_easy_t *p = lcurl_geteasy(L); CURLcode code; @@ -378,6 +397,10 @@ static int lcurl_opt_set_slist_(lua_State *L, int opt, int list_no){ return lcurl_opt_set_long_(L, CURLOPT_##N);\ } +#define LCURL_OFF_OPT(N, S) static int lcurl_easy_set_##N(lua_State *L){\ + return lcurl_opt_set_off_(L, CURLOPT_##N);\ +} + #define OPT_ENTRY(L, N, T, S, D) LCURL_##T##_OPT(N, S) #include "lcopteasy.h" @@ -409,6 +432,7 @@ static int lcurl_easy_set_POSTFIELDS(lua_State *L){ #undef LCURL_STR_OPT #undef LCURL_LST_OPT #undef LCURL_LNG_OPT +#undef LCURL_OFF_OPT static size_t lcurl_hpost_read_callback(char *buffer, size_t size, size_t nitems, void *arg); @@ -508,6 +532,22 @@ static int lcurl_opt_unset_long_(lua_State *L, int opt, long val){ return 1; } +#if LCURL_CURL_VER_GE(7,59,0) + +static int lcurl_opt_unset_off_(lua_State *L, int opt, curl_off_t val){ + lcurl_easy_t *p = lcurl_geteasy(L); + CURLcode code; + + code = curl_easy_setopt(p->curl, opt, val); + if(code != CURLE_OK){ + return lcurl_fail_ex(L, p->err_mode, LCURL_ERROR_EASY, code); + } + lua_settop(L, 1); + return 1; +} + +#endif + static int lcurl_opt_unset_string_(lua_State *L, int opt, const char *val){ lcurl_easy_t *p = lcurl_geteasy(L); CURLcode code; @@ -556,6 +596,10 @@ static int lcurl_opt_unset_slist_(lua_State *L, int opt, int list_no){ return lcurl_opt_unset_long_(L, CURLOPT_##N, (D));\ } +#define LCURL_OFF_OPT(N, S, D) static int lcurl_easy_unset_##N(lua_State *L){\ + return lcurl_opt_unset_off_(L, CURLOPT_##N, (D));\ +} + #define OPT_ENTRY(L, N, T, S, D) LCURL_##T##_OPT(N, S, D) #include "lcopteasy.h" @@ -565,6 +609,7 @@ static int lcurl_opt_unset_slist_(lua_State *L, int opt, int list_no){ #undef LCURL_STR_OPT #undef LCURL_LST_OPT #undef LCURL_LNG_OPT +#undef LCURL_OFF_OPT static int lcurl_easy_unset_HTTPPOST(lua_State *L){ lcurl_easy_t *p = lcurl_geteasy(L); diff --git a/src/lceasy.h b/src/lceasy.h index 916f53d..d6ccefd 100644 --- a/src/lceasy.h +++ b/src/lceasy.h @@ -18,6 +18,7 @@ #define LCURL_LST_INDEX(N) LCURL_##N##_LIST, #define LCURL_STR_INDEX(N) #define LCURL_LNG_INDEX(N) +#define LCURL_OFF_INDEX(N) #define OPT_ENTRY(L, N, T, S, D) LCURL_##T##_INDEX(N) enum { @@ -28,6 +29,7 @@ enum { LCURL_LIST_COUNT, }; +#undef LCURL_OFF_INDEX #undef LCURL_LST_INDEX #undef LCURL_STR_INDEX #undef LCURL_LNG_INDEX diff --git a/src/lcopteasy.h b/src/lcopteasy.h index d683d84..c471cdc 100644 --- a/src/lcopteasy.h +++ b/src/lcopteasy.h @@ -405,6 +405,11 @@ OPT_ENTRY( socks5_auth, SOCKS5_AUTH, LNG, 0, LCURL_DEF OPT_ENTRY( ssh_compression, SSH_COMPRESSION, LNG, 0, LCURL_DEFAULT_VALUE) #endif +#if LCURL_CURL_VER_GE(7,59,0) +OPT_ENTRY( happy_eyeballs_timeout_ms,HAPPY_EYEBALLS_TIMEOUT_MS,LNG, 0, CURL_HET_DEFAULT) +OPT_ENTRY( timevalue_large, TIMEVALUE_LARGE ,OFF, 0, LCURL_DEFAULT_VALUE) +#endif + #ifdef LCURL__TCP_FASTOPEN # define TCP_FASTOPEN LCURL__TCP_FASTOPEN # undef LCURL__TCP_FASTOPEN From aa8a06e7c1881d68b489a5d7eaa4b292a2eaf3de Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Tue, 1 May 2018 14:36:33 +0300 Subject: [PATCH 5/6] Add. RECURSIVE_API_CALL error code. --- src/lcerr_easy.h | 3 +++ src/lcerr_multi.h | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/lcerr_easy.h b/src/lcerr_easy.h index 8450ed4..94ad143 100644 --- a/src/lcerr_easy.h +++ b/src/lcerr_easy.h @@ -125,3 +125,6 @@ ERR_ENTRY ( SSL_INVALIDCERTSTATUS ) #if LCURL_CURL_VER_GE(7,49,0) ERR_ENTRY ( HTTP2_STREAM ) #endif +#if LCURL_CURL_VER_GE(7,59,0) +ERR_ENTRY ( RECURSIVE_API_CALL ) +#endif diff --git a/src/lcerr_multi.h b/src/lcerr_multi.h index 37d3b44..45322b7 100644 --- a/src/lcerr_multi.h +++ b/src/lcerr_multi.h @@ -9,3 +9,6 @@ ERR_ENTRY ( UNKNOWN_OPTION ) #if LCURL_CURL_VER_GE(7,32,1) ERR_ENTRY ( ADDED_ALREADY ) #endif +#if LCURL_CURL_VER_GE(7,59,0) +ERR_ENTRY ( RECURSIVE_API_CALL ) +#endif From 305a724809e7ded1262a5c7b993eca898eee88e9 Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Tue, 1 May 2018 14:47:13 +0300 Subject: [PATCH 6/6] Add. info_filetime_t --- src/lcinfoeasy.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lcinfoeasy.h b/src/lcinfoeasy.h index c6b2094..885771d 100644 --- a/src/lcinfoeasy.h +++ b/src/lcinfoeasy.h @@ -63,6 +63,10 @@ OPT_ENTRY( speed_download_t, SPEED_DOWNLOAD_T, OFF, 0) OPT_ENTRY( speed_upload_t, SPEED_UPLOAD_T, OFF, 0) #endif +#if LCURL_CURL_VER_GE(7,59,0) +OPT_ENTRY( filetime_t, FILETIME_T, OFF, 0) +#endif + // OPT_ENTRY( PRIVATE, void ) // OPT_ENTRY( TLS_SSL_PTR, struct curl_tlssessioninfo ** // OPT_ENTRY( TLS_SESSION, struct curl_tlssessioninfo *