http: do not send PROXY more than once

Unlike `CONNECT`, currently we don't keep track whether `PROXY` is
already sent or not. This causes `PROXY` header to be sent twice during
`MSTATE_TUNNELING` and `MSTATE_PROTOCONNECT`.

Closes #9878
Fixes #9442
This commit is contained in:
Fata Nugraha 2022-11-09 16:38:00 +07:00 committed by Daniel Stenberg
parent 6d75115406
commit 11ad25fff4
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
2 changed files with 8 additions and 1 deletions

View File

@ -1572,11 +1572,14 @@ CURLcode Curl_http_connect(struct Curl_easy *data, bool *done)
/* nothing else to do except wait right now - we're not done here. */
return CURLE_OK;
if(data->set.haproxyprotocol) {
if(data->set.haproxyprotocol && !data->state.is_haproxy_hdr_sent) {
/* add HAProxy PROXY protocol header */
result = add_haproxy_protocol_header(data);
if(result)
return result;
/* do not send the header again after successful try */
data->state.is_haproxy_hdr_sent = TRUE;
}
#endif

View File

@ -1461,6 +1461,10 @@ struct UrlState {
trailers_state trailers_state; /* whether we are sending trailers
and what stage are we at */
#endif
#ifndef CURL_DISABLE_PROXY
/* to keep track whether we already sent PROXY header or not */
BIT(is_haproxy_hdr_sent);
#endif
#ifdef USE_HYPER
bool hconnect; /* set if a CONNECT request */
CURLcode hresult; /* used to pass return codes back from hyper callbacks */