diff options
author | Daniel Stenberg <daniel@haxx.se> | 2021-05-06 13:04:03 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2021-05-08 10:49:16 +0200 |
commit | 51c0ebcff2140c38ff389b4fcfb8216f5e9d198c (patch) | |
tree | e4d6c1b35c99cae1e2fe054e1bab69bae07e33f7 /lib/http_proxy.h | |
parent | 63813a0325adec659bdb6866c061208266b68797 (diff) | |
download | curl-51c0ebcff2140c38ff389b4fcfb8216f5e9d198c.tar.gz |
http: deal with partial CONNECT sends
Also added 'CURL_SMALLSENDS' to make Curl_write() send short packets,
which helped verifying this even more.
Add test 363 to verify.
Reported-by: ustcqidi on github
Fixes #6950
Closes #7024
Diffstat (limited to 'lib/http_proxy.h')
-rw-r--r-- | lib/http_proxy.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/http_proxy.h b/lib/http_proxy.h index a78db0d04..f5a4cb07c 100644 --- a/lib/http_proxy.h +++ b/lib/http_proxy.h @@ -38,15 +38,39 @@ CURLcode Curl_proxy_connect(struct Curl_easy *data, int sockindex); bool Curl_connect_complete(struct connectdata *conn); bool Curl_connect_ongoing(struct connectdata *conn); +int Curl_connect_getsock(struct connectdata *conn); #else #define Curl_proxyCONNECT(x,y,z,w) CURLE_NOT_BUILT_IN #define Curl_proxy_connect(x,y) CURLE_OK #define Curl_connect_complete(x) CURLE_OK #define Curl_connect_ongoing(x) FALSE +#define Curl_connect_getsock(x) 0 #endif void Curl_connect_free(struct Curl_easy *data); void Curl_connect_done(struct Curl_easy *data); +/* struct for HTTP CONNECT state data */ +struct http_connect_state { + struct HTTP http_proxy; + struct HTTP *prot_save; + struct dynbuf rcvbuf; + struct dynbuf req; + size_t nsend; + enum keeponval { + KEEPON_DONE, + KEEPON_CONNECT, + KEEPON_IGNORE + } keepon; + curl_off_t cl; /* size of content to read and ignore */ + enum { + TUNNEL_INIT, /* init/default/no tunnel state */ + TUNNEL_CONNECT, /* CONNECT has been sent off */ + TUNNEL_COMPLETE /* CONNECT response received completely */ + } tunnel_state; + BIT(chunked_encoding); + BIT(close_connection); +}; + #endif /* HEADER_CURL_HTTP_PROXY_H */ |