@ -48,6 +48,7 @@ char curl_errorstr[CURL_ERROR_SIZE];
@@ -48,6 +48,7 @@ char curl_errorstr[CURL_ERROR_SIZE];
static int curl_ssl_verify = -1;
static int curl_ssl_try;
static const char *curl_http_version = NULL;
static const char *ssl_cert;
static const char *ssl_cipherlist;
static const char *ssl_version;
@ -284,6 +285,9 @@ static void process_curl_messages(void)
@@ -284,6 +285,9 @@ static void process_curl_messages(void)
static int http_options(const char *var, const char *value, void *cb)
{
if (!strcmp("http.version", var)) {
return git_config_string(&curl_http_version, var, value);
}
if (!strcmp("http.sslverify", var)) {
curl_ssl_verify = git_config_bool(var, value);
return 0;
@ -789,6 +793,31 @@ static long get_curl_allowed_protocols(int from_user)
@@ -789,6 +793,31 @@ 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;
}
}
warning("unknown value given to http.version: '%s'", version_string);
return -1; /* not found */
}
#endif
static CURL *get_curl_handle(void)
{
CURL *result = curl_easy_init();
@ -806,6 +835,16 @@ static CURL *get_curl_handle(void)
@@ -806,6 +835,16 @@ static CURL *get_curl_handle(void)
curl_easy_setopt(result, CURLOPT_SSL_VERIFYHOST, 2);
}
#if LIBCURL_VERSION_NUM >= 0x072f00 // 7.47.0
if (curl_http_version) {
long opt;
if (!get_curl_http_version_opt(curl_http_version, &opt)) {
/* Set request use http version */
curl_easy_setopt(result, CURLOPT_HTTP_VERSION, opt);
}
}
#endif
#if LIBCURL_VERSION_NUM >= 0x070907
curl_easy_setopt(result, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
#endif