sws: support extracting test number from CONNECT ipv6-address!
authorDaniel Stenberg <daniel@haxx.se>
Tue, 4 Jun 2013 20:50:58 +0000 (22:50 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 4 Jun 2013 20:50:58 +0000 (22:50 +0200)
If an ipv6-address is provided to CONNECT, the last hexadecimal group in
the address will be used as the test number! For example the address
"[1234::ff]" would be treated as test case 255.

tests/FILEFORMAT
tests/server/sws.c

index 019137a559cfe166544bd8f90c4a3b269b376f21..97afa967f050f515ae4c5b80d83de349f8416537 100644 (file)
@@ -257,7 +257,9 @@ data that is defined within the <reply><data></data></reply> section.
 If there's no test number found above, the HTTP test server will use the
 number following the last dot in the given hostname (made so that a CONNECT
 can still pass on test number) so that "foo.bar.123" gets treated as test case
-123.
+123. Alternatively, if an ipv6-address is provided to CONNECT, the last
+hexadecimal group in the address will be used as the test numer! For example
+the address "[1234::ff]" would be treated as test case 255.
 
 Set type="perl" to write the test case as a perl script. It implies that
 there's no memory debugging and valgrind gets shut off for this test.
index 7e1c44012f8316605c70510c30a4d3e0ab89a8f4..38658cb7472047075ab924260dcd95cce96f1f1f 100644 (file)
@@ -518,6 +518,7 @@ static int ProcessRequest(struct httprequest *req)
       if(sscanf(req->reqbuf, "CONNECT %" MAXDOCNAMELEN_TXT "s HTTP/%d.%d",
                 doc, &prot_major, &prot_minor) == 3) {
         char *portp = NULL;
+        unsigned long part=0;
 
         sprintf(logbuf, "Received a CONNECT %s HTTP/%d.%d request",
                 doc, prot_major, prot_minor);
@@ -530,14 +531,24 @@ static int ProcessRequest(struct httprequest *req)
 
         if(doc[0] == '[') {
           char *p = &doc[1];
-          while(*p && (ISXDIGIT(*p) || (*p == ':') || (*p == '.')))
-            p++;
+          /* scan through the hexgroups and store the value of the last group
+             in the 'part' variable and use as test case number!! */
+          while(*p && (ISXDIGIT(*p) || (*p == ':') || (*p == '.'))) {
+            char *endp;
+            part = strtoul(p, &endp, 16);
+            if(ISXDIGIT(*p))
+              p = endp;
+            else
+              p++;
+          }
           if(*p != ']')
             logmsg("Invalid CONNECT IPv6 address format");
           else if (*(p+1) != ':')
             logmsg("Invalid CONNECT IPv6 port format");
           else
             portp = p+1;
+
+          req->testno = part;
         }
         else
           portp = strchr(doc, ':');
@@ -548,7 +559,10 @@ static int ProcessRequest(struct httprequest *req)
             logmsg("Invalid CONNECT port received");
           else
             req->connect_port = curlx_ultous(ulnum);
+
         }
+        logmsg("Port number: %d, test case number: %ld",
+               req->connect_port, req->testno);
       }
     }