From: Force Charlie <charlieio@xxxxxxxxxxx> Signed-off-by: Force Charlie <charlieio@xxxxxxxxxxx> --- http.c | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/http.c b/http.c index 86e454cff5..0ad797caea 100644 --- a/http.c +++ b/http.c @@ -48,7 +48,7 @@ char curl_errorstr[CURL_ERROR_SIZE]; static int curl_ssl_verify = -1; static int curl_ssl_try; -static int curl_http_version = 0; +static const char *curl_http_version = NULL; static const char *ssl_cert; static const char *ssl_cipherlist; static const char *ssl_version; @@ -286,8 +286,7 @@ static void process_curl_messages(void) static int http_options(const char *var, const char *value, void *cb) { if (!strcmp("http.version",var)) { - curl_http_version=git_config_int(var,value); - return 0; + return git_config_string(&curl_http_version, var, value); } if (!strcmp("http.sslverify", var)) { curl_ssl_verify = git_config_bool(var, value); @@ -794,6 +793,30 @@ static long get_curl_allowed_protocols(int from_user) } #endif +#if LIBCURL_VERSION_NUM >=0x072f00 +static int get_curl_http_version_opt(const char *version_string, long *opt) +{ + int i; + static struct { + const char *name; + long opt_token; + } choice[] = { + { "HTTP/1.1", CURL_HTTP_VERSION_1_1 }, + { "HTTP/2", CURL_HTTP_VERSION_2 } + }; + + for (i = 0; i < ARRAY_SIZE(choice); i++) { + if (!strcmp(version_string, choice[i].name)) { + *opt = choice[i].opt_token; + return 0; + } + } + + return -1; /* not found */ +} + +#endif + static CURL *get_curl_handle(void) { CURL *result = curl_easy_init(); @@ -812,12 +835,10 @@ static CURL *get_curl_handle(void) } #if LIBCURL_VERSION_NUM >= 0x072f00 // 7.47.0 - // curl_http_version 0 is default. - if (curl_http_version == 20) { - /* Enable HTTP2*/ - curl_easy_setopt(result, CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_2TLS); - } else if (curl_http_version == 11) { - curl_easy_setopt(result, CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1); + long opt=-1; + if (curl_http_version &&!get_curl_http_version_opt(curl_http_version, &opt)) { + /* Set request use http version */ + curl_easy_setopt(result, CURLOPT_HTTP_VERSION,opt); } #endif -- gitgitgadget