All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Support for HTTP transfer timeouts based on transfer speed
@ 2005-10-19 18:59 Nick Hengeveld
  0 siblings, 0 replies; only message in thread
From: Nick Hengeveld @ 2005-10-19 18:59 UTC (permalink / raw)
  To: git

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>


---

It looks as though these curl options have been there since 1999 (before
version 6.5), so we shouldn't need to conditionally compile them 
based on LIBCURL_VERSION_NUM.


 http-fetch.c |   29 +++++++++++++++++++++++++++++
 1 files changed, 29 insertions(+), 0 deletions(-)

e624aa205da9861a7d70bffbd22df471c92f1561
diff --git a/http-fetch.c b/http-fetch.c
--- a/http-fetch.c
+++ b/http-fetch.c
@@ -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
 {
@@ -158,6 +160,17 @@ static int http_options(const char *var,
 	}
 #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);
 }
@@ -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;
 }
 
@@ -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') {
@@ -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)

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2005-10-19 19:00 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-10-19 18:59 [PATCH] Support for HTTP transfer timeouts based on transfer speed Nick Hengeveld

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.