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
/* 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
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 */