]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
timeleft_accept: ack global timeout, moved to ftp.c
authorDaniel Stenberg <daniel@haxx.se>
Tue, 20 Dec 2011 19:55:54 +0000 (20:55 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 20 Dec 2011 19:55:54 +0000 (20:55 +0100)
First off the timeout for accepting a server connect back must of course
respect a global timeout. Then the timeleft function is only used by ftp
code so it was moved to ftp.c and made static.

lib/connect.c
lib/connect.h
lib/ftp.c
lib/ftp.h

index cc835808bc413af61f115da8736d3d2a39d627c8..bcd5384062e62da2967d990a9571c7d3347f2894 100644 (file)
@@ -98,34 +98,6 @@ singleipconnect(struct connectdata *conn,
                 curl_socket_t *sock,
                 bool *connected);
 
-/*
- * Curl_timeleft_accept() returns the amount of milliseconds left allowed for
- * waiting server to connect. If the value is negative, the timeout time has
- * already elapsed.
- *
- * The start time is stored in progress.t_acceptdata - as set with
- * Curl_pgrsTime(..., TIMER_STARTACCEPT);
- *
- */
-long Curl_timeleft_accept(struct SessionHandle *data)
-{
-  long timeout_ms = DEFAULT_ACCEPT_TIMEOUT;
-  struct timeval now;
-
-  if(data->set.accepttimeout > 0)
-    timeout_ms = data->set.accepttimeout;
-
-  now = Curl_tvnow();
-
-  /* subtract elapsed time */
-  timeout_ms -= Curl_tvdiff(now, data->progress.t_acceptdata);
-  if(!timeout_ms)
-    /* avoid returning 0 as that means no timeout! */
-    return -1;
-
-  return timeout_ms;
-}
-
 /*
  * Curl_timeleft() returns the amount of milliseconds left allowed for the
  * transfer/connection. If the value is negative, the timeout time has already
index 4e905bdf51a5c4f118967edf3194ec269a79befc..f84361f2e285331a14d436b7d5b38483796ce9a5 100644 (file)
@@ -43,12 +43,7 @@ long Curl_timeleft(struct SessionHandle *data,
                    struct timeval *nowp,
                    bool duringconnect);
 
-/* function that returns how much time there's left to wait for incoming
-   server connect */
-long Curl_timeleft_accept(struct SessionHandle *data);
-
 #define DEFAULT_CONNECT_TIMEOUT 300000 /* milliseconds == five minutes */
-#define DEFAULT_ACCEPT_TIMEOUT   60000 /* milliseconds == one minute */
 
 /*
  * Used to extract socket and connectdata struct for the most recent
index a4512e900dbe8bce0ad0fb3e950073386fd09d32..6f6a54a6d41e47da96d4adc22fd66fe661523603 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -355,6 +355,44 @@ static CURLcode AcceptServerConnect(struct connectdata *conn)
 
 }
 
+/*
+ * ftp_timeleft_accept() returns the amount of milliseconds left allowed for
+ * waiting server to connect. If the value is negative, the timeout time has
+ * already elapsed.
+ *
+ * The start time is stored in progress.t_acceptdata - as set with
+ * Curl_pgrsTime(..., TIMER_STARTACCEPT);
+ *
+ */
+static long ftp_timeleft_accept(struct SessionHandle *data)
+{
+  long timeout_ms = DEFAULT_ACCEPT_TIMEOUT;
+  long other;
+  struct timeval now;
+
+  if(data->set.accepttimeout > 0)
+    timeout_ms = data->set.accepttimeout;
+
+  now = Curl_tvnow();
+
+  /* check if the generic timeout possibly is set shorter */
+  other =  Curl_timeleft(data, &now, FALSE);
+  if(other && (other < timeout_ms))
+    /* note that this also works fine for when other happens to be negative
+       due to it already having elapsed */
+    timeout_ms = other;
+  else {
+    /* subtract elapsed time */
+    timeout_ms -= Curl_tvdiff(now, data->progress.t_acceptdata);
+    if(!timeout_ms)
+      /* avoid returning 0 as that means no timeout! */
+      return -1;
+  }
+
+  return timeout_ms;
+}
+
+
 /***********************************************************************
  *
  * ReceivedServerConnect()
@@ -378,7 +416,7 @@ static CURLcode ReceivedServerConnect(struct connectdata* conn, bool* received)
 
   *received = FALSE;
 
-  timeout_ms = Curl_timeleft_accept(data);
+  timeout_ms = ftp_timeleft_accept(data);
   infof(data, "Checking for server connect\n");
   if(timeout_ms < 0) {
     /* if a timeout was already reached, bail out */
@@ -502,7 +540,7 @@ static CURLcode AllowServerConnect(struct connectdata *conn, bool *connected)
   Curl_pgrsTime(data, TIMER_STARTACCEPT);
 
   for(;;) {
-    timeout_ms = Curl_timeleft_accept(data);
+    timeout_ms = ftp_timeleft_accept(data);
     if(timeout_ms < 0) {
       /* if a timeout was already reached, bail out */
       failf(data, "Accept timeout occurred while waiting server connect");
index 21e47374b66b64e35601370fc5b23eef94356aa3..d359f28f35a8669537c13e7190470dbd8d2334d2 100644 (file)
--- a/lib/ftp.h
+++ b/lib/ftp.h
@@ -156,4 +156,6 @@ struct ftp_conn {
                                 it */
 };
 
+#define DEFAULT_ACCEPT_TIMEOUT   60000 /* milliseconds == one minute */
+
 #endif /* HEADER_CURL_FTP_H */