CURLINFO_NUM_CONNECTS and more
authorDaniel Stenberg <daniel@haxx.se>
Tue, 19 Oct 2004 15:30:08 +0000 (15:30 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 19 Oct 2004 15:30:08 +0000 (15:30 +0000)
12 files changed:
CHANGES
RELEASE-NOTES
TODO-RELEASE
docs/libcurl/curl_easy_getinfo.3
include/curl/curl.h
lib/connect.c
lib/getinfo.c
lib/urldata.h
src/writeout.c
tests/data/Makefile.am
tests/data/test192 [new file with mode: 0644]
tests/data/test193 [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index f36bf87..97e4d33 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,12 @@
                                   Changelog
 
 Daniel (19 October 2004)
+- Guillaume Arluison added CURLINFO_NUM_CONNECTS to allow an app to figure
+  out how many new connects a previous transfer required.
+
+  I added %{num_connects} to the curl tool and added test case 192 and 193
+  to verify the new code.
+
 - Test case 165 modified to use a charset define older iconv versions
   understand. ISO-8859-1 instead of ISO8859-1. Bug report #1049275 (anonymous)
 
index 0717531..1d8a8a8 100644 (file)
@@ -10,18 +10,21 @@ Curl and libcurl 7.12.3
 
 This release includes the following changes:
 
- o 
+ o added CURLINFO_NUM_CONNECTS
 
 This release includes the following bugfixes:
 
- o 
+ o test 165 works with older iconv versions as well
+ o use setlocale() for better IDN functionality by default
 
 Other curl-related news since the previous public release:
 
- o 
+ o pycurl 7.12.2: http://pycurl.sf.net/
+ o TclCurl 0.12.2: http://personal1.iddeo.es/andresgarci/tclcurl/english/
 
 This release would not have looked like this without help, code, reports and
 advice from friends like these:
 
+ Peter Wullinger, Guillaume Arluison
 
         Thanks! (and sorry if I forgot to mention someone)
index 386fcde..9174273 100644 (file)
@@ -1,11 +1,9 @@
 Issues not sorted in any particular order.
 
-To get fixed in 7.12.2 (planned release: mid October 2004)
-======================
-
 To get fixed in 7.12.3 (planned release: December 2004)
 ======================
 
 47 - Peter Sylvester's patch for SRP on the TLS layer
 
 48 - MSVC Makefile improvements by Samuel Díaz García
+
index 4176e49..ce6bab9 100644 (file)
@@ -113,6 +113,13 @@ method(s) available for your proxy authentication.  (Added in 7.10.8)
 .IP CURLINFO_OS_ERRNO
 Pass a pointer to a long to receive the errno variable from a connect failure.
 (Added in 7.12.2)
+.IP CURLINFO_NUM_CONNECTS
+Pass a pointer to a long to receive how many new connections libcurl had to
+create to achieve the previous transfer (only the successful connects are
+counted).  Combined with \fICURLINFO_REDIRECT_COUNT\fP you are able to know
+how many times libcurl successfully reused existing connection(s) or not.  See
+the Connection Options of \fIcurl_easy_setopt(3)\fP to see how libcurl tries
+to make persistent connections to save time.  (Added in 7.12.3)
 .SH RETURN VALUE
 If the operation was successful, CURLE_OK is returned. Otherwise an
 appropriate error code will be returned.
index 210d063..c631fc1 100644 (file)
@@ -1179,9 +1179,10 @@ typedef enum {
   CURLINFO_HTTPAUTH_AVAIL   = CURLINFO_LONG   + 23,
   CURLINFO_PROXYAUTH_AVAIL  = CURLINFO_LONG   + 24,
   CURLINFO_OS_ERRNO         = CURLINFO_LONG   + 25,
+  CURLINFO_NUM_CONNECTS     = CURLINFO_LONG   + 26,
   /* Fill in new entries below here! */
 
-  CURLINFO_LASTONE          = 26
+  CURLINFO_LASTONE          = 27
 } CURLINFO;
 
 /* CURLINFO_RESPONSE_CODE is the new name for the option previously known as
index 7343756..5d464ac 100644 (file)
@@ -784,5 +784,7 @@ CURLcode Curl_connecthost(struct connectdata *conn,  /* context */
   if(sockconn)
     *sockconn = sockfd;    /* the socket descriptor we've connected */
 
+  data->info.numconnects++; /* to track the number of connections made */
+
   return CURLE_OK;
 }
index 88627d6..e554931 100644 (file)
@@ -38,7 +38,7 @@
 #include "memdebug.h"
 
 /*
- * This is supposed to be called in the beginning of a permform() session
+ * This is supposed to be called in the beginning of a perform() session
  * and should reset all session-info variables
  */
 CURLcode Curl_initinfo(struct SessionHandle *data)
@@ -63,6 +63,7 @@ CURLcode Curl_initinfo(struct SessionHandle *data)
 
   info->header_size = 0;
   info->request_size = 0;
+  info->numconnects = 0;
   return CURLE_OK;
 }
 
@@ -170,6 +171,9 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
   case CURLINFO_OS_ERRNO:
     *param_longp = data->state.os_errno;
     break;
+  case CURLINFO_NUM_CONNECTS:
+    *param_longp = data->info.numconnects;
+    break;
   default:
     return CURLE_BAD_FUNCTION_ARGUMENT;
   }
index 08db4d6..764ca3c 100644 (file)
@@ -624,6 +624,8 @@ struct PureInfo {
   long proxyauthavail;
   long httpauthavail;
 
+  long numconnects; /* how many new connection did libcurl created */
+
   char *contenttype; /* the content type of the object */
 };
 
index 9ba9c80..b60319b 100644 (file)
@@ -56,6 +56,7 @@ typedef enum {
   VAR_REQUEST_SIZE,
   VAR_EFFECTIVE_URL,
   VAR_CONTENT_TYPE,
+  VAR_NUM_CONNECTS,
   VAR_NUM_OF_VARS /* must be the last */
 } replaceid;
 
@@ -80,6 +81,7 @@ static struct variable replacements[]={
   {"speed_download", VAR_SPEED_DOWNLOAD},
   {"speed_upload", VAR_SPEED_UPLOAD},
   {"content_type", VAR_CONTENT_TYPE},
+  {"num_connects", VAR_NUM_CONNECTS},
   {NULL, VAR_NONE}
 };
 
@@ -131,6 +133,11 @@ void ourWriteOut(CURL *curl, char *writeinfo)
                    curl_easy_getinfo(curl, CURLINFO_REQUEST_SIZE, &longinfo))
                   fprintf(stream, "%ld", longinfo);
                 break;
+              case VAR_NUM_CONNECTS:
+                if(CURLE_OK ==
+                   curl_easy_getinfo(curl, CURLINFO_NUM_CONNECTS, &longinfo))
+                  fprintf(stream, "%ld", longinfo);
+                break;
               case VAR_TOTAL_TIME:
                 if(CURLE_OK ==
                    curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &doubleinfo))
index 3a317ea..0f63d5f 100644 (file)
@@ -26,7 +26,8 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46        \
  test512 test165 test166 test167 test168 test169 test170 test171       \
  test172 test204 test205 test173 test174 test175 test176 test177       \
  test513 test514 test178 test179 test180 test181 test182 test183       \
- test184 test185 test186 test187 test188 test189 test191
+ test184 test185 test186 test187 test188 test189 test191 test192       \
+ test193
 
 # The following tests have been removed from the dist since they no longer
 # work. We need to fix the test suite's FTPS server first, then bring them
diff --git a/tests/data/test192 b/tests/data/test192
new file mode 100644 (file)
index 0000000..0973cdb
--- /dev/null
@@ -0,0 +1,51 @@
+#
+# Server-side
+<reply>
+<data nocheck=1>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+
+monster
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET -w num_connects with one simple connect
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/192 -w '%{num_connects}\n'
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /192 HTTP/1.1\r
+Host: 127.0.0.1:%HTTPPORT\r
+Pragma: no-cache\r
+Accept: */*\r
+\r
+</protocol>
+
+<stdout>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+
+monster
+1
+</stdout>
+</verify>
diff --git a/tests/data/test193 b/tests/data/test193
new file mode 100644 (file)
index 0000000..0d7cbc5
--- /dev/null
@@ -0,0 +1,73 @@
+#
+# Server-side
+<reply>
+<data nocheck=1>
+HTTP/1.1 302 OK swsbounce swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+Location: ./193
+
+monster
+</data>
+<data1 nocheck=1>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+
+monster
+</data1>
+
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP GET -w num_connects with redirected fetch (2 connects)
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/193 -w '%{num_connects}\n' -L
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /193 HTTP/1.1\r
+Host: 127.0.0.1:%HTTPPORT\r
+Pragma: no-cache\r
+Accept: */*\r
+\r
+GET /193 HTTP/1.1\r
+Host: 127.0.0.1:%HTTPPORT\r
+Pragma: no-cache\r
+Accept: */*\r
+\r
+</protocol>
+
+<stdout>
+HTTP/1.1 302 OK swsbounce swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+Location: ./193
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 8
+Connection: close
+
+monster
+2
+</stdout>
+
+</verify>