Skip to content

Commit

Permalink
Support for HTTP transfer timeouts based on transfer speed
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Nick Hengeveld authored and Junio C Hamano committed Oct 19, 2005
1 parent 960decc commit e0004e2
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions http-fetch.c
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,8 @@ static char *ssl_key = NULL;
static char *ssl_capath = NULL;
#endif
static char *ssl_cainfo = NULL;
static long curl_low_speed_limit = -1;
static long curl_low_speed_time = -1;

struct buffer
{
Expand Down Expand Up @@ -158,6 +160,17 @@ static int http_options(const char *var, const char *value)
}
#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 */
return git_default_config(var, value);
}
Expand Down Expand Up @@ -246,6 +259,13 @@ static CURL* get_curl_handle(void)
curl_easy_setopt(result, CURLOPT_CAINFO, ssl_cainfo);
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;
}

Expand Down Expand Up @@ -1177,6 +1197,8 @@ int main(int argc, char **argv)
char *url;
int arg = 1;
struct active_request_slot *slot;
char *low_speed_limit;
char *low_speed_time;

while (arg < argc && argv[arg][0] == '-') {
if (argv[arg][1] == 't') {
Expand Down Expand Up @@ -1232,6 +1254,13 @@ int main(int argc, char **argv)
#endif
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);

if (curl_ssl_verify == -1)
Expand Down

0 comments on commit e0004e2

Please sign in to comment.