diff --git a/appveyor.yml b/appveyor.yml index 1fdfb3d..e8959da 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.62.0 matrix: - LUA: "lua 5.1" diff --git a/src/lceasy.c b/src/lceasy.c index 4e09658..620b157 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,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 }, 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/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 * diff --git a/src/lcopteasy.h b/src/lcopteasy.h index d4741c4..225bea5 100644 --- a/src/lcopteasy.h +++ b/src/lcopteasy.h @@ -439,6 +439,24 @@ 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 + +#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 + +#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 +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", { diff --git a/test/test_curl.lua b/test/test_curl.lua index c28a5f9..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 @@ -186,7 +188,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)