http: add support selecting http version
Usually we don't need to set libcurl to choose which version of the HTTP protocol to use to communicate with a server. But different versions of libcurl, the default value is not the same. CURL >= 7.62.0: CURL_HTTP_VERSION_2TLS CURL < 7.62: CURL_HTTP_VERSION_1_1 In order to give users the freedom to control the HTTP version, we need to add a setting to choose which HTTP version to use. Signed-off-by: Force Charlie <charlieio@outlook.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
8858448bb4
commit
d73019feb4
@ -1935,6 +1935,15 @@ http.saveCookies::
|
|||||||
If set, store cookies received during requests to the file specified by
|
If set, store cookies received during requests to the file specified by
|
||||||
http.cookieFile. Has no effect if http.cookieFile is unset.
|
http.cookieFile. Has no effect if http.cookieFile is unset.
|
||||||
|
|
||||||
|
http.version::
|
||||||
|
Use the specified HTTP protocol version when communicating with a server.
|
||||||
|
If you want to force the default. The available and default version depend
|
||||||
|
on libcurl. Actually the possible values of
|
||||||
|
this option are:
|
||||||
|
|
||||||
|
- HTTP/2
|
||||||
|
- HTTP/1.1
|
||||||
|
|
||||||
http.sslVersion::
|
http.sslVersion::
|
||||||
The SSL version to use when negotiating an SSL connection, if you
|
The SSL version to use when negotiating an SSL connection, if you
|
||||||
want to force the default. The available and default version
|
want to force the default. The available and default version
|
||||||
|
39
http.c
39
http.c
@ -48,6 +48,7 @@ char curl_errorstr[CURL_ERROR_SIZE];
|
|||||||
|
|
||||||
static int curl_ssl_verify = -1;
|
static int curl_ssl_verify = -1;
|
||||||
static int curl_ssl_try;
|
static int curl_ssl_try;
|
||||||
|
static const char *curl_http_version = NULL;
|
||||||
static const char *ssl_cert;
|
static const char *ssl_cert;
|
||||||
static const char *ssl_cipherlist;
|
static const char *ssl_cipherlist;
|
||||||
static const char *ssl_version;
|
static const char *ssl_version;
|
||||||
@ -284,6 +285,9 @@ static void process_curl_messages(void)
|
|||||||
|
|
||||||
static int http_options(const char *var, const char *value, void *cb)
|
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)) {
|
if (!strcmp("http.sslverify", var)) {
|
||||||
curl_ssl_verify = git_config_bool(var, value);
|
curl_ssl_verify = git_config_bool(var, value);
|
||||||
return 0;
|
return 0;
|
||||||
@ -789,6 +793,31 @@ static long get_curl_allowed_protocols(int from_user)
|
|||||||
}
|
}
|
||||||
#endif
|
#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)
|
static CURL *get_curl_handle(void)
|
||||||
{
|
{
|
||||||
CURL *result = curl_easy_init();
|
CURL *result = curl_easy_init();
|
||||||
@ -806,6 +835,16 @@ static CURL *get_curl_handle(void)
|
|||||||
curl_easy_setopt(result, CURLOPT_SSL_VERIFYHOST, 2);
|
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
|
#if LIBCURL_VERSION_NUM >= 0x070907
|
||||||
curl_easy_setopt(result, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
|
curl_easy_setopt(result, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user