Commit 65e8ba8e authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

writeout: -w now supports remote_ip/port and local_ip/port

Added mention to the curl.1 man page.

Test case 1223 verifies remote_ip/port.
parent 0b3180b4
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -1524,6 +1524,13 @@ same info.
The numerical code that was found in the last response (from a proxy) to a
curl CONNECT request. (Added in 7.12.4)
.TP
.B local_ip
The IP address of the local end of the most recently done connection - can be
either IPv4 or IPv6 (Added in 7.29.0)
.TP
.B local_port
The local port number of the most recently done connection (Added in 7.29.0)
.TP
.B num_connects
Number of new connects made in the recent transfer. (Added in 7.12.3)
.TP
@@ -1534,6 +1541,13 @@ Number of redirects that were followed in the request. (Added in 7.12.3)
When an HTTP request was made without -L to follow redirects, this variable
will show the actual URL a redirect \fIwould\fP take you to. (Added in 7.18.2)
.TP
.B remote_ip
The remote IP address of the most recently done connection - can be either
IPv4 or IPv6 (Added in 7.29.0)
.TP
.B remote_port
The remote port number of the most recently done connection (Added in 7.29.0)
.TP
.B size_download
The total amount of bytes that were downloaded.
.TP
+32 −0
Original line number Diff line number Diff line
@@ -54,6 +54,10 @@ typedef enum {
  VAR_REDIRECT_URL,
  VAR_SSL_VERIFY_RESULT,
  VAR_EFFECTIVE_FILENAME,
  VAR_PRIMARY_IP,
  VAR_PRIMARY_PORT,
  VAR_LOCAL_IP,
  VAR_LOCAL_PORT,
  VAR_NUM_OF_VARS /* must be the last */
} replaceid;

@@ -88,6 +92,10 @@ static const struct variable replacements[]={
  {"redirect_url", VAR_REDIRECT_URL},
  {"ssl_verify_result", VAR_SSL_VERIFY_RESULT},
  {"filename_effective", VAR_EFFECTIVE_FILENAME},
  {"remote_ip", VAR_PRIMARY_IP},
  {"remote_port", VAR_PRIMARY_PORT},
  {"local_ip", VAR_LOCAL_IP},
  {"local_port", VAR_LOCAL_PORT},
  {NULL, VAR_NONE}
};

@@ -247,6 +255,30 @@ void ourWriteOut(CURL *curl, struct OutStruct *outs, const char *writeinfo)
                if(outs->filename)
                  fprintf(stream, "%s", outs->filename);
                break;
              case VAR_PRIMARY_IP:
                if(CURLE_OK ==
                   curl_easy_getinfo(curl, CURLINFO_PRIMARY_IP,
                                     &stringp))
                  fprintf(stream, "%s", stringp);
                break;
              case VAR_PRIMARY_PORT:
                if(CURLE_OK ==
                   curl_easy_getinfo(curl, CURLINFO_PRIMARY_PORT,
                                     &longinfo))
                  fprintf(stream, "%ld", longinfo);
                break;
              case VAR_LOCAL_IP:
                if(CURLE_OK ==
                   curl_easy_getinfo(curl, CURLINFO_LOCAL_IP,
                                     &stringp))
                  fprintf(stream, "%s", stringp);
                break;
              case VAR_LOCAL_PORT:
                if(CURLE_OK ==
                   curl_easy_getinfo(curl, CURLINFO_LOCAL_PORT,
                                     &longinfo))
                  fprintf(stream, "%ld", longinfo);
                break;
              default:
                break;
              }
+1 −1
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ test1118 test1119 test1120 test1121 test1122 test1123 test1124 test1125 \
test1126 test1127 test1128 test1129 test1130 test1131 test1132 \
test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \
test1208 test1209 test1210 test1211 \
test1220 test1221 test1222 \
test1220 test1221 test1222 test1223 \
test1300 test1301 test1302 test1303 test1304 test1305	\
test1306 test1307 test1308 test1309 test1310 test1311 test1312 test1313 \
test1314 test1315 test1316 test1317 test1318 test1319 test1320 test1321 \

tests/data/test1223

0 → 100644
+60 −0
Original line number Diff line number Diff line
<testcase>
<info>
<keywords>
HTTP
HTTP GET
</keywords>
</info>

#
# disable data check since it gets sent to stdout and is verified there
<reply>
<data nocheck="yes">
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Content-Length: 4
Connection: close
Content-Type: text/html

hej
</data>
</reply>

#
# Client-side
<client>
<server>
http
</server>
 <name>
HTTP GET -w remote_ip and -w remote_port
 </name>
 <command>
http://%HOSTIP:%HTTPPORT/1223 -w 'IP %{remote_ip} and PORT %{remote_port}\n'
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
GET /1223 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

</protocol>
<stdout>
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Content-Length: 4
Connection: close
Content-Type: text/html

hej
IP %HOSTIP and PORT %HTTPPORT
</stdout>
</verify>
</testcase>