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.
This commit is contained in:
Daniel Stenberg 2005-04-18 17:14:58 +00:00
Родитель 6a27449922
Коммит c904b6b5bf
6 изменённых файлов: 46 добавлений и 34 удалений

Просмотреть файл

@ -6,6 +6,14 @@
Changelog 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) Daniel (8 April 2005)
- Cory Nelson reported a problem with a HTTP server that responded with a 304 - Cory Nelson reported a problem with a HTTP server that responded with a 304
response containing an "illegal" Content-Length: header, which was not response containing an "illegal" Content-Length: header, which was not

Просмотреть файл

@ -1347,6 +1347,27 @@ CURLcode Curl_http_done(struct connectdata *conn,
return CURLE_OK; 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 * 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 * 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; return result;
} }
if((data->set.httpversion != CURL_HTTP_VERSION_1_0) && result = expect100(data, req_buffer);
!checkheaders(data, "Expect:")) { if(result)
/* if not doing HTTP 1.0 or disabled explicitly, we add a Expect: return result;
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;
}
if(!checkheaders(data, "Content-Type:")) { if(!checkheaders(data, "Content-Type:")) {
/* Get Content-Type: line from Curl_formpostheader. /* Get Content-Type: line from Curl_formpostheader.
@ -2002,18 +2014,9 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
return result; return result;
} }
if((data->set.httpversion != CURL_HTTP_VERSION_1_0) && result = expect100(data, req_buffer);
!checkheaders(data, "Expect:")) { if(result)
/* if not HTTP 1.0 or disabled explicitly, we add a Expect: return result;
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 = add_buffer(req_buffer, "\r\n", 2); /* end of headers */ result = add_buffer(req_buffer, "\r\n", 2); /* end of headers */
if(result) if(result)
@ -2121,21 +2124,18 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
/* set the upload size to the progress meter */ /* set the upload size to the progress meter */
Curl_pgrsSetUploadSize(data, http->postsize); Curl_pgrsSetUploadSize(data, http->postsize);
if((data->set.httpversion != CURL_HTTP_VERSION_1_0) && result = expect100(data, req_buffer);
!checkheaders(data, "Expect:")) { if(result)
/* if not HTTP 1.0 or disabled explicitly, we add a Expect: return result;
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;
}
add_buffer(req_buffer, "\r\n", 2); /* end of headers! */ add_buffer(req_buffer, "\r\n", 2); /* end of headers! */
} }
} }
else { else {
result = expect100(data, req_buffer);
if(result)
return result;
add_buffer(req_buffer, "\r\n", 2); /* end of headers! */ add_buffer(req_buffer, "\r\n", 2); /* end of headers! */
if(data->set.postfieldsize) { if(data->set.postfieldsize) {

Просмотреть файл

@ -40,6 +40,7 @@ Pragma: no-cache
Accept: */* Accept: */*
Content-Length: 45 Content-Length: 45
Content-Type: application/x-www-form-urlencoded Content-Type: application/x-www-form-urlencoded
Expect: 100-continue
this is what we post to the silly web server this is what we post to the silly web server
</protocol> </protocol>

Просмотреть файл

@ -40,6 +40,7 @@ Pragma: no-cache
Accept: */* Accept: */*
Transfer-Encoding: chunked Transfer-Encoding: chunked
Content-Type: application/x-www-form-urlencoded Content-Type: application/x-www-form-urlencoded
Expect: 100-continue
3 3
one one

Просмотреть файл

@ -31,6 +31,7 @@ Pragma: no-cache
Accept: */* Accept: */*
Content-Length: 1 Content-Length: 1
Content-Type: application/x-www-form-urlencoded Content-Type: application/x-www-form-urlencoded
Expect: 100-continue
</protocol> </protocol>
# 42 - aborted by callback # 42 - aborted by callback

Просмотреть файл

@ -41,6 +41,7 @@ Pragma: no-cache
Accept: */* Accept: */*
Content-Length: 0 Content-Length: 0
Content-Type: application/x-www-form-urlencoded Content-Type: application/x-www-form-urlencoded
Expect: 100-continue
</protocol> </protocol>
</verify> </verify>