From f9b63c1e4fd0bbdce4bc31e9f288d798f28d2d78 Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Sat, 3 Nov 2018 11:42:47 +0300 Subject: [PATCH 1/9] Add. New options from libcurl 7.60.0 --- appveyor.yml | 2 +- msvc/lcurl.sln | 14 +++++++++++--- src/lcopteasy.h | 5 +++++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 1fdfb3d..9d8897f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,7 +7,7 @@ shallow_clone: true environment: LR_EXTERNAL: c:\external - CURL_VER: 7.59.0 + CURL_VER: 7.60.0 matrix: - LUA: "lua 5.1" diff --git a/msvc/lcurl.sln b/msvc/lcurl.sln index fb537a0..e9920fc 100644 --- a/msvc/lcurl.sln +++ b/msvc/lcurl.sln @@ -1,18 +1,26 @@  -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lcurl", "lcurl.vcproj", "{200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}" +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lcurl", "lcurl.vcxproj", "{200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 + Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}.Debug|Win32.ActiveCfg = Debug|Win32 {200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}.Debug|Win32.Build.0 = Debug|Win32 + {200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}.Debug|x64.ActiveCfg = Debug|x64 + {200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}.Debug|x64.Build.0 = Debug|x64 {200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}.Release|Win32.ActiveCfg = Release|Win32 {200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}.Release|Win32.Build.0 = Release|Win32 + {200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}.Release|x64.ActiveCfg = Release|x64 + {200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/lcopteasy.h b/src/lcopteasy.h index d4741c4..38eff29 100644 --- a/src/lcopteasy.h +++ b/src/lcopteasy.h @@ -439,6 +439,11 @@ OPT_ENTRY( happy_eyeballs_timeout_ms,HAPPY_EYEBALLS_TIMEOUT_MS,LNG, 0, CURL_HET_ OPT_ENTRY( timevalue_large, TIMEVALUE_LARGE ,OFF, 0, LCURL_DEFAULT_VALUE) #endif +#if LCURL_CURL_VER_GE(7,60,0) +OPT_ENTRY(dns_shuffle_addresses, DNS_SHUFFLE_ADDRESSES, LNG, 0, LCURL_DEFAULT_VALUE) +OPT_ENTRY(haproxyprotocol, HAPROXYPROTOCOL, LNG, 0, LCURL_DEFAULT_VALUE) +#endif + //{ Restore system macros #ifdef LCURL__TCP_FASTOPEN From a4338b2cd5f50228705afbf900d5419eda6600c1 Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Sat, 3 Nov 2018 12:02:08 +0300 Subject: [PATCH 2/9] Add. Supprt new options for libcurl 7.61.0 --- appveyor.yml | 2 +- src/lcflags.h | 3 +++ src/lcinfoeasy.h | 10 ++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 9d8897f..9dce3ea 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,7 +7,7 @@ shallow_clone: true environment: LR_EXTERNAL: c:\external - CURL_VER: 7.60.0 + CURL_VER: 7.61.0 matrix: - LUA: "lua 5.1" diff --git a/src/lcflags.h b/src/lcflags.h index 543a239..aba9bc9 100644 --- a/src/lcflags.h +++ b/src/lcflags.h @@ -21,6 +21,9 @@ FLG_ENTRY(AUTH_ANYSAFE ) #if LCURL_CURL_VER_GE(7,55,0) FLG_ENTRY(AUTH_GSSAPI ) #endif +#if LCURL_CURL_VER_GE(7,61,0) +FLG_ENTRY(AUTH_BEARER ) +#endif #ifdef CURLSSH_AUTH_ANY FLG_ENTRY(SSH_AUTH_ANY ) diff --git a/src/lcinfoeasy.h b/src/lcinfoeasy.h index 885771d..d6374d7 100644 --- a/src/lcinfoeasy.h +++ b/src/lcinfoeasy.h @@ -67,6 +67,16 @@ OPT_ENTRY( speed_upload_t, SPEED_UPLOAD_T, OFF, 0) OPT_ENTRY( filetime_t, FILETIME_T, OFF, 0) #endif +#if LCURL_CURL_VER_GE(7,61,0) +OPT_ENTRY(appconnect_time_t, APPCONNECT_TIME_T, OFF, 0) +OPT_ENTRY(connect_time_t, CONNECT_TIME_T, OFF, 0) +OPT_ENTRY(namelookup_time_t, NAMELOOKUP_TIME_T, OFF, 0) +OPT_ENTRY(pretransfer_time_t, PRETRANSFER_TIME_T, OFF, 0) +OPT_ENTRY(redirect_time_t, REDIRECT_TIME_T, OFF, 0) +OPT_ENTRY(starttransfer_time_t, STARTTRANSFER_TIME_T, OFF, 0) +OPT_ENTRY(total_time_t, TOTAL_TIME_T, OFF, 0) +#endif + // OPT_ENTRY( PRIVATE, void ) // OPT_ENTRY( TLS_SSL_PTR, struct curl_tlssessioninfo ** // OPT_ENTRY( TLS_SESSION, struct curl_tlssessioninfo * From 12909fd5d401264499f767a5afc8459e35522b60 Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Sat, 3 Nov 2018 12:09:19 +0300 Subject: [PATCH 3/9] Add. missing options --- src/lcopteasy.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/lcopteasy.h b/src/lcopteasy.h index 38eff29..3e7ae0b 100644 --- a/src/lcopteasy.h +++ b/src/lcopteasy.h @@ -444,6 +444,12 @@ OPT_ENTRY(dns_shuffle_addresses, DNS_SHUFFLE_ADDRESSES, LNG, 0, LCURL_DEFAULT_VA OPT_ENTRY(haproxyprotocol, HAPROXYPROTOCOL, LNG, 0, LCURL_DEFAULT_VALUE) #endif +#if LCURL_CURL_VER_GE(7,61,0) +OPT_ENTRY(disallow_username_in_url, DISALLOW_USERNAME_IN_URL, LNG, 0, LCURL_DEFAULT_VALUE) +OPT_ENTRY(proxy_tls13_ciphers, PROXY_TLS13_CIPHERS, STR, 0, LCURL_DEFAULT_VALUE) +OPT_ENTRY(tls13_ciphers, TLS13_CIPHERS, STR, 0, LCURL_DEFAULT_VALUE) +#endif + //{ Restore system macros #ifdef LCURL__TCP_FASTOPEN From a2c3708d2e0ac1a7f6df66e56eb74f6224ac0e82 Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Sat, 3 Nov 2018 12:46:22 +0300 Subject: [PATCH 4/9] Add. Support new options from libcurl 7.62.0 --- appveyor.yml | 2 +- src/lceasy.c | 15 +++++++++++++++ src/lcerr_easy.h | 4 ++++ src/lcopteasy.h | 7 +++++++ src/lua/cURL/impl/cURL.lua | 1 + 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 9dce3ea..e8959da 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,7 +7,7 @@ shallow_clone: true environment: LR_EXTERNAL: c:\external - CURL_VER: 7.61.0 + CURL_VER: 7.62.0 matrix: - LUA: "lua 5.1" diff --git a/src/lceasy.c b/src/lceasy.c index a5b8685..0328648 100644 --- a/src/lceasy.c +++ b/src/lceasy.c @@ -291,6 +291,20 @@ static int lcurl_easy_mime(lua_State *L){ #endif +#if LCURL_CURL_VER_GE(7,62,0) + +static int lcurl_easy_upkeep(lua_State *L){ + lcurl_easy_t *p = lcurl_geteasy(L); + CURLcode code = curl_easy_upkeep(p->curl); + if(code == CURLE_OK){ + lua_settop(L, 1); + return 1; + } + return lcurl_fail_ex(L, p->err_mode, LCURL_ERROR_EASY, code); +} + +#endif + //{ OPTIONS //{ set @@ -1760,6 +1774,7 @@ static const struct luaL_Reg lcurl_easy_methods[] = { { "escape", lcurl_easy_escape }, { "unescape", lcurl_easy_unescape }, { "perform", lcurl_easy_perform }, + { "upkeep", lcurl_easy_upkeep }, { "close", lcurl_easy_cleanup }, { "__gc", lcurl_easy_cleanup }, { "__tostring", lcurl_easy_to_s }, diff --git a/src/lcerr_easy.h b/src/lcerr_easy.h index 94ad143..d294e6b 100644 --- a/src/lcerr_easy.h +++ b/src/lcerr_easy.h @@ -71,7 +71,11 @@ ERR_ENTRY ( RECV_ERROR ) ERR_ENTRY ( OBSOLETE57 ) ERR_ENTRY ( SSL_CERTPROBLEM ) ERR_ENTRY ( SSL_CIPHER ) +#if LCURL_CURL_VER_GE(7,62,0) +ERR_ENTRY ( OBSOLETE51 ) +#else ERR_ENTRY ( SSL_CACERT ) +#endif ERR_ENTRY ( BAD_CONTENT_ENCODING ) ERR_ENTRY ( LDAP_INVALID_URL ) ERR_ENTRY ( FILESIZE_EXCEEDED ) diff --git a/src/lcopteasy.h b/src/lcopteasy.h index 3e7ae0b..d61edef 100644 --- a/src/lcopteasy.h +++ b/src/lcopteasy.h @@ -450,6 +450,13 @@ OPT_ENTRY(proxy_tls13_ciphers, PROXY_TLS13_CIPHERS, STR, 0, LCURL_DEFA OPT_ENTRY(tls13_ciphers, TLS13_CIPHERS, STR, 0, LCURL_DEFAULT_VALUE) #endif +#if LCURL_CURL_VER_GE(7,61,0) +OPT_ENTRY(upkeep_interval_ms, UPKEEP_INTERVAL_MS, LNG, 0, CURL_UPKEEP_INTERVAL_DEFAULT) +OPT_ENTRY(doh_url, DOH_URL, STR, 0, LCURL_DEFAULT_VALUE) +// thre no named value for default value. It just defined as 64kB in documentation +OPT_ENTRY(upload_buffersize, UPLOAD_BUFFERSIZE, LNG, 0, 64 * 1024) +#endif + //{ Restore system macros #ifdef LCURL__TCP_FASTOPEN diff --git a/src/lua/cURL/impl/cURL.lua b/src/lua/cURL/impl/cURL.lua index 2e1fbce..e7243a9 100644 --- a/src/lua/cURL/impl/cURL.lua +++ b/src/lua/cURL/impl/cURL.lua @@ -381,6 +381,7 @@ Easy.setopt_httpauth = wrap_setopt_flags("httpauth", { ["ONLY" ] = curl.AUTH_ONLY; ["ANY" ] = curl.AUTH_ANY; ["ANYSAFE" ] = curl.AUTH_ANYSAFE; + ["BEARER" ] = curl.AUTH_BEARER; }) Easy.setopt_ssh_auth_types = wrap_setopt_flags("ssh_auth_types", { From 44e86bb3ab086591e9a41563fe7ee9f7a811b8ed Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Sat, 3 Nov 2018 12:52:25 +0300 Subject: [PATCH 5/9] Revert MSVC project --- msvc/lcurl.sln | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/msvc/lcurl.sln b/msvc/lcurl.sln index e9920fc..fb537a0 100644 --- a/msvc/lcurl.sln +++ b/msvc/lcurl.sln @@ -1,26 +1,18 @@  -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lcurl", "lcurl.vcxproj", "{200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}" +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lcurl", "lcurl.vcproj", "{200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 - Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}.Debug|Win32.ActiveCfg = Debug|Win32 {200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}.Debug|Win32.Build.0 = Debug|Win32 - {200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}.Debug|x64.ActiveCfg = Debug|x64 - {200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}.Debug|x64.Build.0 = Debug|x64 {200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}.Release|Win32.ActiveCfg = Release|Win32 {200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}.Release|Win32.Build.0 = Release|Win32 - {200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}.Release|x64.ActiveCfg = Release|x64 - {200D5C0C-8123-48F6-9EA0-CF0E6A6943F2}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 6c6c31a27b86c966e2fb9c20b6b59fc5a432524c Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Sun, 4 Nov 2018 14:18:42 +0300 Subject: [PATCH 6/9] Fix. Define upkeep function for correct versions --- src/lceasy.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lceasy.c b/src/lceasy.c index 0328648..def7482 100644 --- a/src/lceasy.c +++ b/src/lceasy.c @@ -1774,7 +1774,9 @@ static const struct luaL_Reg lcurl_easy_methods[] = { { "escape", lcurl_easy_escape }, { "unescape", lcurl_easy_unescape }, { "perform", lcurl_easy_perform }, +#if LCURL_CURL_VER_GE(7,62,0) { "upkeep", lcurl_easy_upkeep }, +#endif { "close", lcurl_easy_cleanup }, { "__gc", lcurl_easy_cleanup }, { "__tostring", lcurl_easy_to_s }, From e9c0c294f10260d140222aaf937d244eafbdb769 Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Sun, 4 Nov 2018 14:28:50 +0300 Subject: [PATCH 7/9] Fix. Use correct version for options --- src/lcopteasy.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lcopteasy.h b/src/lcopteasy.h index d61edef..225bea5 100644 --- a/src/lcopteasy.h +++ b/src/lcopteasy.h @@ -450,7 +450,7 @@ OPT_ENTRY(proxy_tls13_ciphers, PROXY_TLS13_CIPHERS, STR, 0, LCURL_DEFA OPT_ENTRY(tls13_ciphers, TLS13_CIPHERS, STR, 0, LCURL_DEFAULT_VALUE) #endif -#if LCURL_CURL_VER_GE(7,61,0) +#if LCURL_CURL_VER_GE(7,62,0) OPT_ENTRY(upkeep_interval_ms, UPKEEP_INTERVAL_MS, LNG, 0, CURL_UPKEEP_INTERVAL_DEFAULT) OPT_ENTRY(doh_url, DOH_URL, STR, 0, LCURL_DEFAULT_VALUE) // thre no named value for default value. It just defined as 64kB in documentation From 82c65e2ffafc3aec78d55132822d8808343366de Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Sun, 4 Nov 2018 14:41:30 +0300 Subject: [PATCH 8/9] Update test --- test/test_curl.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/test_curl.lua b/test/test_curl.lua index c28a5f9..c4d8c40 100644 --- a/test/test_curl.lua +++ b/test/test_curl.lua @@ -186,7 +186,11 @@ function test_add_handle() c = nil if i == 3 then - assert_equal(curl.error(curl.ERROR_EASY, curl.E_UNSUPPORTED_PROTOCOL), data) + if is_curl_ge(7, 62,0) then + assert_equal(curl.error(curl.ERROR_EASY, curl.E_URL_MALFORMAT), data) + else + assert_equal(curl.error(curl.ERROR_EASY, curl.E_UNSUPPORTED_PROTOCOL), data) + end else local data = json_data() assert_table(data.args) From acbf52146ebd8f00e233fb7e430cb711b31c20d1 Mon Sep 17 00:00:00 2001 From: Alexey Melnichuk Date: Sun, 4 Nov 2018 14:45:33 +0300 Subject: [PATCH 9/9] Update test --- test/test_curl.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/test_curl.lua b/test/test_curl.lua index c4d8c40..ca7d806 100644 --- a/test/test_curl.lua +++ b/test/test_curl.lua @@ -20,6 +20,8 @@ local fname = "./test.download" local utils = require "utils" +local is_curl_ge = utils.is_curl_ge + local function weak_ptr(val) return setmetatable({value = val},{__mode = 'v'}) end