aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2005-04-18 17:14:58 +0000
committerDaniel Stenberg <daniel@haxx.se>2005-04-18 17:14:58 +0000
commitc904b6b5bf6c6e980480e63cd066dc2ae2aace23 (patch)
tree7e39a3652e6cfb4e12c4b87cba3dd868b6a4b65a
parent6a2744992285c39d0cb69295228722ed1e3037c5 (diff)
Toshiyuki Maezawa reported that when doing a POST with a read callback,
libcurl didn't properly send an Expect: 100-continue header. It does now.
-rw-r--r--CHANGES8
-rw-r--r--lib/http.c68
-rw-r--r--tests/data/test5081
-rw-r--r--tests/data/test5101
-rw-r--r--tests/data/test5131
-rw-r--r--tests/data/test5151
6 files changed, 46 insertions, 34 deletions
diff --git a/CHANGES b/CHANGES
index 7340b4cde..9b1fd6127 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,14 @@
Changelog
+Daniel (18 April 2005)
+- Toshiyuki Maezawa reported that when doing a POST with a read callback,
+ libcurl didn't properly send an Expect: 100-continue header. It does now.
+
+- I committed by mig change in the test suite's FTP server that moves out all
+ socket/TCP code to a separate C program named sockfilt. And added 4 new
+ test cases for FTP over IPv6.
+
Daniel (8 April 2005)
- Cory Nelson reported a problem with a HTTP server that responded with a 304
response containing an "illegal" Content-Length: header, which was not
diff --git a/lib/http.c b/lib/http.c
index 392e70657..c3c805956 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -1347,6 +1347,27 @@ CURLcode Curl_http_done(struct connectdata *conn,
return CURLE_OK;
}
+/* check and possibly add an Expect: header */
+static CURLcode expect100(struct SessionHandle *data,
+ send_buffer *req_buffer)
+{
+ CURLcode result = CURLE_OK;
+ if((data->set.httpversion != CURL_HTTP_VERSION_1_0) &&
+ !checkheaders(data, "Expect:")) {
+ /* if not doing HTTP 1.0 or disabled explicitly, we add a Expect:
+ 100-continue to the headers which actually speeds up post
+ operations (as there is one packet coming back from the web
+ server) */
+ result = add_bufferf(req_buffer,
+ "Expect: 100-continue\r\n");
+ if(result == CURLE_OK)
+ data->set.expect100header = TRUE;
+ }
+ return result;
+}
+
+
+
/*
* Curl_http() gets called from the generic Curl_do() function when a HTTP
* request is to be performed. This creates and sends a properly constructed
@@ -1928,18 +1949,9 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
return result;
}
- if((data->set.httpversion != CURL_HTTP_VERSION_1_0) &&
- !checkheaders(data, "Expect:")) {
- /* if not doing HTTP 1.0 or disabled explicitly, we add a Expect:
- 100-continue to the headers which actually speeds up post
- operations (as there is one packet coming back from the web
- server) */
- result = add_bufferf(req_buffer,
- "Expect: 100-continue\r\n");
- if(result)
- return result;
- data->set.expect100header = TRUE;
- }
+ result = expect100(data, req_buffer);
+ if(result)
+ return result;
if(!checkheaders(data, "Content-Type:")) {
/* Get Content-Type: line from Curl_formpostheader.
@@ -2002,18 +2014,9 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
return result;
}
- if((data->set.httpversion != CURL_HTTP_VERSION_1_0) &&
- !checkheaders(data, "Expect:")) {
- /* if not HTTP 1.0 or disabled explicitly, we add a Expect:
- 100-continue to the headers which actually speeds up post
- operations (as there is one packet coming back from the web
- server) */
- result = add_bufferf(req_buffer,
- "Expect: 100-continue\r\n");
- if(result)
- return result;
- data->set.expect100header = TRUE;
- }
+ result = expect100(data, req_buffer);
+ if(result)
+ return result;
result = add_buffer(req_buffer, "\r\n", 2); /* end of headers */
if(result)
@@ -2121,21 +2124,18 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
/* set the upload size to the progress meter */
Curl_pgrsSetUploadSize(data, http->postsize);
- if((data->set.httpversion != CURL_HTTP_VERSION_1_0) &&
- !checkheaders(data, "Expect:")) {
- /* if not HTTP 1.0 or disabled explicitly, we add a Expect:
- 100-continue to the headers which actually speeds up post
- operations (as there is one packet coming back from the web
- server) */
- add_bufferf(req_buffer,
- "Expect: 100-continue\r\n");
- data->set.expect100header = TRUE;
- }
+ result = expect100(data, req_buffer);
+ if(result)
+ return result;
add_buffer(req_buffer, "\r\n", 2); /* end of headers! */
}
}
else {
+ result = expect100(data, req_buffer);
+ if(result)
+ return result;
+
add_buffer(req_buffer, "\r\n", 2); /* end of headers! */
if(data->set.postfieldsize) {
diff --git a/tests/data/test508 b/tests/data/test508
index 08217effb..51e3f8154 100644
--- a/tests/data/test508
+++ b/tests/data/test508
@@ -40,6 +40,7 @@ Pragma: no-cache
Accept: */*
Content-Length: 45
Content-Type: application/x-www-form-urlencoded
+Expect: 100-continue
this is what we post to the silly web server
</protocol>
diff --git a/tests/data/test510 b/tests/data/test510
index a82452a89..6ab346678 100644
--- a/tests/data/test510
+++ b/tests/data/test510
@@ -40,6 +40,7 @@ Pragma: no-cache
Accept: */*
Transfer-Encoding: chunked
Content-Type: application/x-www-form-urlencoded
+Expect: 100-continue
3
one
diff --git a/tests/data/test513 b/tests/data/test513
index d97607e58..8b1fcf61f 100644
--- a/tests/data/test513
+++ b/tests/data/test513
@@ -31,6 +31,7 @@ Pragma: no-cache
Accept: */*
Content-Length: 1
Content-Type: application/x-www-form-urlencoded
+Expect: 100-continue
</protocol>
# 42 - aborted by callback
diff --git a/tests/data/test515 b/tests/data/test515
index 7e72858a3..5feb4a94a 100644
--- a/tests/data/test515
+++ b/tests/data/test515
@@ -41,6 +41,7 @@ Pragma: no-cache
Accept: */*
Content-Length: 0
Content-Type: application/x-www-form-urlencoded
+Expect: 100-continue
</protocol>
</verify>