diff options
author | Daniel Stenberg <daniel@haxx.se> | 2019-08-02 14:28:54 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2019-08-03 21:55:51 +0200 |
commit | cc28a502bc3555fc9ebbcbbda6d0cbe561516541 (patch) | |
tree | 2b3bad50af1369ec0b302c6968d0bcb2c491706f /lib/url.c | |
parent | a9a2b26830c9ecb38e6a02bc4e26684bf2cc5cc3 (diff) | |
download | curl-cc28a502bc3555fc9ebbcbbda6d0cbe561516541.tar.gz |
url: make use of new HTTP version if alt-svc has one
Diffstat (limited to 'lib/url.c')
-rw-r--r-- | lib/url.c | 33 |
1 files changed, 31 insertions, 2 deletions
@@ -3160,11 +3160,23 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data, const char *nhost; int nport; enum alpnid nalpnid; + enum alpnid salpnid; bool hit; host = conn->host.rawalloc; +#ifdef USE_NGHTTP2 + /* with h2 support, check that first */ + salpnid = ALPN_h2; hit = Curl_altsvc_lookup(data->asi, - ALPN_h1, host, conn->remote_port, /* from */ + salpnid, host, conn->remote_port, /* from */ &nalpnid, &nhost, &nport /* to */); + if(!hit) +#endif + { + salpnid = ALPN_h1; + hit = Curl_altsvc_lookup(data->asi, + salpnid, host, conn->remote_port, /* from */ + &nalpnid, &nhost, &nport /* to */); + } if(hit) { char *hostd = strdup((char *)nhost); if(!hostd) @@ -3175,8 +3187,25 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data, conn->conn_to_port = nport; conn->bits.conn_to_port = TRUE; infof(data, "Alt-svc connecting from [%s]%s:%d to [%s]%s:%d\n", - Curl_alpnid2str(ALPN_h1), host, conn->remote_port, + Curl_alpnid2str(salpnid), host, conn->remote_port, Curl_alpnid2str(nalpnid), hostd, nport); + if(salpnid != nalpnid) { + /* protocol version switch */ + switch(nalpnid) { + case ALPN_h1: + conn->httpversion = CURL_HTTP_VERSION_1_1; + break; + case ALPN_h2: + conn->httpversion = CURL_HTTP_VERSION_2TLS; + break; + case ALPN_h3: + conn->transport = TRNSPRT_QUIC; + conn->httpversion = CURL_HTTP_VERSION_LAST; /* for the moment */ + break; + default: /* shouldn't be possible */ + break; + } + } } } #endif |