Use CURL_TIMEOUT and not CURL_CONNECTTIMEOUT for FETCHER_TIMEOUT in curl
authorMartin Willi <martin@revosec.ch>
Fri, 8 Feb 2013 09:12:10 +0000 (10:12 +0100)
committerMartin Willi <martin@revosec.ch>
Fri, 8 Feb 2013 10:08:06 +0000 (11:08 +0100)
This allows us to use this timeout beyond DNS resolution. For the initial
connect, we use a hardcoded timeout of 10s for now.

src/libstrongswan/plugins/curl/curl_fetcher.c

index c68b74f..b49961a 100644 (file)
@@ -21,7 +21,7 @@
 
 #include "curl_fetcher.h"
 
-#define DEFAULT_TIMEOUT 10
+#define CONNECT_TIMEOUT 10
 
 typedef struct private_curl_fetcher_t private_curl_fetcher_t;
 
@@ -48,6 +48,11 @@ struct private_curl_fetcher_t {
         * Callback function
         */
        fetcher_callback_t cb;
+
+       /**
+        * Timeout for a transfer
+        */
+       long timeout;
 };
 
 /**
@@ -94,7 +99,11 @@ METHOD(fetcher_t, fetch, status_t,
        curl_easy_setopt(this->curl, CURLOPT_ERRORBUFFER, error);
        curl_easy_setopt(this->curl, CURLOPT_FAILONERROR, TRUE);
        curl_easy_setopt(this->curl, CURLOPT_NOSIGNAL, TRUE);
-       curl_easy_setopt(this->curl, CURLOPT_CONNECTTIMEOUT, DEFAULT_TIMEOUT);
+       if (this->timeout)
+       {
+               curl_easy_setopt(this->curl, CURLOPT_TIMEOUT, this->timeout);
+       }
+       curl_easy_setopt(this->curl, CURLOPT_CONNECTTIMEOUT, CONNECT_TIMEOUT);
        curl_easy_setopt(this->curl, CURLOPT_WRITEFUNCTION, (void*)curl_cb);
        curl_easy_setopt(this->curl, CURLOPT_WRITEDATA, &data);
        if (this->headers)
@@ -160,8 +169,7 @@ METHOD(fetcher_t, set_option, bool,
                }
                case FETCH_TIMEOUT:
                {
-                       curl_easy_setopt(this->curl, CURLOPT_CONNECTTIMEOUT,
-                                                        va_arg(args, u_int));
+                       this->timeout = va_arg(args, u_int);
                        break;
                }
                case FETCH_CALLBACK:
@@ -211,4 +219,3 @@ curl_fetcher_t *curl_fetcher_create()
        }
        return &this->public;
 }
-