From f4cc8153aeb5209ddb9698b2b0780ab2bfdb3d44 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sat, 7 Jan 2006 22:24:16 +0000 Subject: [PATCH] Mike Jean fixed so that the second CONNECT when doing FTP over a HTTP proxy actually used a new connection and not sent the second request on the first socket! --- CHANGES | 5 +++++ RELEASE-NOTES | 3 ++- lib/http.c | 21 +++++++++++++-------- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/CHANGES b/CHANGES index c4a66c950..33e4230d4 100644 --- a/CHANGES +++ b/CHANGES @@ -8,6 +8,11 @@ +Daniel (7 January 2006) +- Mike Jean fixed so that the second CONNECT when doing FTP over a HTTP proxy + actually used a new connection and not sent the second request on the first + socket! + Daniel (6 January 2006) - Alexander Lazic made the buildconf run the buildconf in the ares dir if that is present instead of trying to mimic that script in curl's buildconf diff --git a/RELEASE-NOTES b/RELEASE-NOTES index e0c56f8dd..8ea88cfc2 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -15,6 +15,7 @@ This release includes the following changes: This release includes the following bugfixes: + o FTP over HTTP proxy now sends the second CONNECT properly o numerous compiler warnings and build quirks for various compilers have been addressed o supports name and passwords up to 255 bytes long, embedded in URLs @@ -29,6 +30,6 @@ This release would not have looked like this without help, code, reports and advice from friends like these: Dov Murik, Jean Jacques Drouin, Andres Garcia, Yang Tse, Gisle Vanem, Dan - Fandrich, Alexander Lazic + Fandrich, Alexander Lazic, Mike Jean Thanks! (and sorry if I forgot to mention someone) diff --git a/lib/http.c b/lib/http.c index fe06c7dc7..e1ab7f9b4 100644 --- a/lib/http.c +++ b/lib/http.c @@ -845,8 +845,9 @@ send_buffer *add_buffer_init(void) static CURLcode add_buffer_send(send_buffer *in, struct connectdata *conn, - long *bytes_written) /* add the number of sent + long *bytes_written, /* add the number of sent bytes to this counter */ + int socketindex) { ssize_t amount; CURLcode res; @@ -854,7 +855,11 @@ CURLcode add_buffer_send(send_buffer *in, size_t size; struct HTTP *http = conn->proto.http; size_t sendsize; - curl_socket_t sockfd = conn->sock[FIRSTSOCKET]; + curl_socket_t sockfd; + + curlassert(socketindex <= SECONDARYSOCKET); + + sockfd = conn->sock[socketindex]; /* The looping below is required since we use non-blocking sockets, but due to the circumstances we will just loop and try again and again etc */ @@ -1166,7 +1171,7 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn, if(CURLE_OK == result) /* Now send off the request */ result = add_buffer_send(req_buffer, conn, - &data->info.request_size); + &data->info.request_size, sockindex); } if(result) failf(data, "Failed sending CONNECT to proxy"); @@ -2032,7 +2037,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done) return result; result = add_buffer_send(req_buffer, conn, - &data->info.request_size); + &data->info.request_size, FIRSTSOCKET); if(result) failf(data, "Failed sending POST request"); else @@ -2097,7 +2102,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done) /* fire away the whole request to the server */ result = add_buffer_send(req_buffer, conn, - &data->info.request_size); + &data->info.request_size, FIRSTSOCKET); if(result) failf(data, "Failed sending POST request"); else @@ -2141,7 +2146,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done) /* this sends the buffer and frees all the buffer resources */ result = add_buffer_send(req_buffer, conn, - &data->info.request_size); + &data->info.request_size, FIRSTSOCKET); if(result) failf(data, "Failed sending PUT request"); else @@ -2263,7 +2268,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done) } /* issue the request */ result = add_buffer_send(req_buffer, conn, - &data->info.request_size); + &data->info.request_size, FIRSTSOCKET); if(result) failf(data, "Failed sending HTTP POST request"); @@ -2280,7 +2285,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done) /* issue the request */ result = add_buffer_send(req_buffer, conn, - &data->info.request_size); + &data->info.request_size, FIRSTSOCKET); if(result) failf(data, "Failed sending HTTP request");