diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/http.c | 16 | ||||
| -rw-r--r-- | lib/url.c | 1 | ||||
| -rw-r--r-- | lib/urldata.h | 1 | 
3 files changed, 16 insertions, 2 deletions
| diff --git a/lib/http.c b/lib/http.c index 546c34aad..73d52aee5 100644 --- a/lib/http.c +++ b/lib/http.c @@ -1998,6 +1998,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)    const char *httpstring;    Curl_send_buffer *req_buffer;    curl_off_t postsize = 0; /* curl_off_t to handle large file sizes */ +  char *altused = NULL;    /* Always consider the DO phase done after this function call, even if there       may be parts of the request that is not yet sent, since we can deal with @@ -2592,6 +2593,14 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)    if(result)      return result; +#ifdef USE_ALTSVC +  if(conn->bits.altused && !Curl_checkheaders(conn, "Alt-Used")) { +    altused = aprintf("Alt-Used: %s:%d\r\n", +                      conn->conn_to_host.name, conn->conn_to_port); +    if(!altused) +      return CURLE_OUT_OF_MEMORY; +  } +#endif    result =      Curl_add_bufferf(&req_buffer,                       "%s" /* ftp typecode (;type=x) */ @@ -2606,7 +2615,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)                       "%s" /* accept-encoding */                       "%s" /* referer */                       "%s" /* Proxy-Connection */ -                     "%s",/* transfer-encoding */ +                     "%s" /* transfer-encoding */ +                     "%s",/* Alt-Used */                       ftp_typecode,                       httpstring, @@ -2632,13 +2642,15 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)                        !conn->bits.tunnel_proxy &&                        !Curl_checkProxyheaders(conn, "Proxy-Connection"))?                       "Proxy-Connection: Keep-Alive\r\n":"", -                     te +                     te, +                     altused ? altused : ""        );    /* clear userpwd and proxyuserpwd to avoid re-using old credentials     * from re-used connections */    Curl_safefree(conn->allocptr.userpwd);    Curl_safefree(conn->allocptr.proxyuserpwd); +  free(altused);    if(result)      return result; @@ -3187,6 +3187,7 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data,        conn->bits.conn_to_host = TRUE;        conn->conn_to_port = nport;        conn->bits.conn_to_port = TRUE; +      conn->bits.altused = TRUE;        infof(data, "Alt-svc connecting from [%s]%s:%d to [%s]%s:%d\n",              Curl_alpnid2str(salpnid), host, conn->remote_port,              Curl_alpnid2str(nalpnid), hostd, nport); diff --git a/lib/urldata.h b/lib/urldata.h index 395664d04..3129cb3ce 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -405,6 +405,7 @@ struct ConnectBits {                           the first time on the first connect function call */    bit close:1; /* if set, we close the connection after this request */    bit reuse:1; /* if set, this is a re-used connection */ +  bit altused:1; /* this is an alt-svc "redirect" */    bit conn_to_host:1; /* if set, this connection has a "connect to host"                           that overrides the host in the URL */    bit conn_to_port:1; /* if set, this connection has a "connect to port" | 
