Support for HTTP transfer timeouts based on transfer speed
Add configuration settings to abort HTTP requests if the transfer rate drops below a threshold for a specified length of time. Environment variables override config file settings. Signed-off-by: Nick Hengeveld <nickh@reactrix.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
960deccb26
commit
e0004e286c
29
http-fetch.c
29
http-fetch.c
@ -100,6 +100,8 @@ static char *ssl_key = NULL;
|
|||||||
static char *ssl_capath = NULL;
|
static char *ssl_capath = NULL;
|
||||||
#endif
|
#endif
|
||||||
static char *ssl_cainfo = NULL;
|
static char *ssl_cainfo = NULL;
|
||||||
|
static long curl_low_speed_limit = -1;
|
||||||
|
static long curl_low_speed_time = -1;
|
||||||
|
|
||||||
struct buffer
|
struct buffer
|
||||||
{
|
{
|
||||||
@ -158,6 +160,17 @@ static int http_options(const char *var, const char *value)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (!strcmp("http.lowspeedlimit", var)) {
|
||||||
|
if (curl_low_speed_limit == -1)
|
||||||
|
curl_low_speed_limit = (long)git_config_int(var, value);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (!strcmp("http.lowspeedtime", var)) {
|
||||||
|
if (curl_low_speed_time == -1)
|
||||||
|
curl_low_speed_time = (long)git_config_int(var, value);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Fall back on the default ones */
|
/* Fall back on the default ones */
|
||||||
return git_default_config(var, value);
|
return git_default_config(var, value);
|
||||||
}
|
}
|
||||||
@ -246,6 +259,13 @@ static CURL* get_curl_handle(void)
|
|||||||
curl_easy_setopt(result, CURLOPT_CAINFO, ssl_cainfo);
|
curl_easy_setopt(result, CURLOPT_CAINFO, ssl_cainfo);
|
||||||
curl_easy_setopt(result, CURLOPT_FAILONERROR, 1);
|
curl_easy_setopt(result, CURLOPT_FAILONERROR, 1);
|
||||||
|
|
||||||
|
if (curl_low_speed_limit > 0 && curl_low_speed_time > 0) {
|
||||||
|
curl_easy_setopt(result, CURLOPT_LOW_SPEED_LIMIT,
|
||||||
|
curl_low_speed_limit);
|
||||||
|
curl_easy_setopt(result, CURLOPT_LOW_SPEED_TIME,
|
||||||
|
curl_low_speed_time);
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1177,6 +1197,8 @@ int main(int argc, char **argv)
|
|||||||
char *url;
|
char *url;
|
||||||
int arg = 1;
|
int arg = 1;
|
||||||
struct active_request_slot *slot;
|
struct active_request_slot *slot;
|
||||||
|
char *low_speed_limit;
|
||||||
|
char *low_speed_time;
|
||||||
|
|
||||||
while (arg < argc && argv[arg][0] == '-') {
|
while (arg < argc && argv[arg][0] == '-') {
|
||||||
if (argv[arg][1] == 't') {
|
if (argv[arg][1] == 't') {
|
||||||
@ -1232,6 +1254,13 @@ int main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
ssl_cainfo = getenv("GIT_SSL_CAINFO");
|
ssl_cainfo = getenv("GIT_SSL_CAINFO");
|
||||||
|
|
||||||
|
low_speed_limit = getenv("GIT_HTTP_LOW_SPEED_LIMIT");
|
||||||
|
if (low_speed_limit != NULL)
|
||||||
|
curl_low_speed_limit = strtol(low_speed_limit, NULL, 10);
|
||||||
|
low_speed_time = getenv("GIT_HTTP_LOW_SPEED_TIME");
|
||||||
|
if (low_speed_time != NULL)
|
||||||
|
curl_low_speed_time = strtol(low_speed_time, NULL, 10);
|
||||||
|
|
||||||
git_config(http_options);
|
git_config(http_options);
|
||||||
|
|
||||||
if (curl_ssl_verify == -1)
|
if (curl_ssl_verify == -1)
|
||||||
|
Loading…
Reference in New Issue
Block a user