diff options
author | Daniel Stenberg <daniel@haxx.se> | 2019-05-28 16:17:51 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2019-05-28 23:00:42 +0200 |
commit | a6183ab23a702f45b14affe7ab25996960cd8b1b (patch) | |
tree | 24381f33f36ced0c0388267d2829faa4357d1fe0 | |
parent | 2f11fbf208c78d38e9a19b1224238c4ecff5989f (diff) |
url: default conn->port to the same as conn->remote_port
... so that it has a sensible value when ConnectionExists() is called which
needs it set to differentiate host "bundles" correctly on port number!
Also, make conncache:hashkey() use correct port for bundles that are proxy vs
host connections.
Probably a regression from 7.62.0
Reported-by: Tom van der Woerdt
Fixes #3956
Closes #3957
-rw-r--r-- | lib/conncache.c | 7 | ||||
-rw-r--r-- | lib/url.c | 2 |
2 files changed, 6 insertions, 3 deletions
diff --git a/lib/conncache.c b/lib/conncache.c index 2cdfd34d9..88463354b 100644 --- a/lib/conncache.c +++ b/lib/conncache.c @@ -163,9 +163,12 @@ static void hashkey(struct connectdata *conn, char *buf, const char **hostp) { const char *hostname; + long port = conn->remote_port; - if(conn->bits.httpproxy && !conn->bits.tunnel_proxy) + if(conn->bits.httpproxy && !conn->bits.tunnel_proxy) { hostname = conn->http_proxy.host.name; + port = conn->port; + } else if(conn->bits.conn_to_host) hostname = conn->conn_to_host.name; else @@ -178,7 +181,7 @@ static void hashkey(struct connectdata *conn, char *buf, DEBUGASSERT(len > 32); /* put the number first so that the hostname gets cut off if too long */ - msnprintf(buf, len, "%ld%s", conn->port, hostname); + msnprintf(buf, len, "%ld%s", port, hostname); } void Curl_conncache_unlock(struct Curl_easy *data) @@ -2027,7 +2027,7 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data, } else { unsigned long port = strtoul(data->state.up.port, NULL, 10); - conn->remote_port = curlx_ultous(port); + conn->port = conn->remote_port = curlx_ultous(port); } (void)curl_url_get(uh, CURLUPART_QUERY, &data->state.up.query, 0); |