From: Daniel Stenberg Date: Tue, 4 Jun 2013 20:50:58 +0000 (+0200) Subject: sws: support extracting test number from CONNECT ipv6-address! X-Git-Tag: curl-7_31_0~29 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a7452b8b8c824e4227372a21a0517d34c8185f85;p=curl sws: support extracting test number from CONNECT ipv6-address! 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. --- diff --git a/tests/FILEFORMAT b/tests/FILEFORMAT index 019137a55..97afa967f 100644 --- a/tests/FILEFORMAT +++ b/tests/FILEFORMAT @@ -257,7 +257,9 @@ data that is defined within the 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. diff --git a/tests/server/sws.c b/tests/server/sws.c index 7e1c44012..38658cb74 100644 --- a/tests/server/sws.c +++ b/tests/server/sws.c @@ -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); } }