1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-21 23:58:49 -05:00

transfer: make Expect: 100-continue timeout configurable.

Replaced the #define CURL_TIMEOUT_EXPECT_100 in transfer.c with the
CURLOPT_EXPECT_100_TIMEOUT_MS option to make the timeout configurable.
This commit is contained in:
Tiit Pikma 2014-02-13 11:49:27 +02:00 committed by Daniel Stenberg
parent bcb32e915e
commit c021a60bcc
6 changed files with 26 additions and 5 deletions

View File

@ -1649,6 +1649,12 @@ Pass a long to tell libcurl how to act on transfer decoding. If set to zero,
transfer decoding will be disabled, if set to 1 it is enabled transfer decoding will be disabled, if set to 1 it is enabled
(default). libcurl does chunked transfer decoding by default unless this (default). libcurl does chunked transfer decoding by default unless this
option is set to zero. (added in 7.16.2) option is set to zero. (added in 7.16.2)
.IP CURLOPT_EXPECT_100_TIMEOUT_MS
Pass a long to tell libcurl the number of milliseconds to wait for a server
response with the HTTP status 100 (Continue), 417 (Expectation Failed) or
similar after sending a HTTP request containing an Expect: 100-continue
header. If this times out before a response is received, the request body is
sent anyway. By default, libcurl waits 1000 milliseconds. (Added in 7.36.0)
.SH SMTP OPTIONS .SH SMTP OPTIONS
.IP CURLOPT_MAIL_FROM .IP CURLOPT_MAIL_FROM
Pass a pointer to a zero terminated string as parameter. This should be used Pass a pointer to a zero terminated string as parameter. This should be used

View File

@ -341,6 +341,7 @@ CURLOPT_DNS_USE_GLOBAL_CACHE 7.9.3 7.11.1
CURLOPT_EGDSOCKET 7.7 CURLOPT_EGDSOCKET 7.7
CURLOPT_ENCODING 7.10 CURLOPT_ENCODING 7.10
CURLOPT_ERRORBUFFER 7.1 CURLOPT_ERRORBUFFER 7.1
CURLOPT_EXPECT_100_TIMEOUT_MS 7.36.0
CURLOPT_FAILONERROR 7.1 CURLOPT_FAILONERROR 7.1
CURLOPT_FILE 7.1 7.9.7 CURLOPT_FILE 7.1 7.9.7
CURLOPT_FILETIME 7.5 CURLOPT_FILETIME 7.5

View File

@ -1577,6 +1577,10 @@ typedef enum {
/* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */
CINIT(SSL_ENABLE_ALPN, LONG, 226), CINIT(SSL_ENABLE_ALPN, LONG, 226),
/* Time to wait for a response to a HTTP request containing an
* Expect: 100-continue header before sending the data anyway. */
CINIT(EXPECT_100_TIMEOUT_MS, LONG, 227),
CURLOPT_LASTENTRY /* the last unused */ CURLOPT_LASTENTRY /* the last unused */
} CURLoption; } CURLoption;

View File

@ -87,8 +87,6 @@
/* The last #include file should be: */ /* The last #include file should be: */
#include "memdebug.h" #include "memdebug.h"
#define CURL_TIMEOUT_EXPECT_100 1000 /* counting ms here */
/* /*
* This function will call the read callback to fill our buffer with data * This function will call the read callback to fill our buffer with data
* to upload. * to upload.
@ -839,7 +837,7 @@ static CURLcode readwrite_upload(struct SessionHandle *data,
*didwhat &= ~KEEP_SEND; /* we didn't write anything actually */ *didwhat &= ~KEEP_SEND; /* we didn't write anything actually */
/* set a timeout for the multi interface */ /* set a timeout for the multi interface */
Curl_expire(data, CURL_TIMEOUT_EXPECT_100); Curl_expire(data, data->set.expect_100_timeout);
break; break;
} }
@ -1075,7 +1073,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
*/ */
long ms = Curl_tvdiff(k->now, k->start100); long ms = Curl_tvdiff(k->now, k->start100);
if(ms >= CURL_TIMEOUT_EXPECT_100) { if(ms >= data->set.expect_100_timeout) {
/* we've waited long enough, continue anyway */ /* we've waited long enough, continue anyway */
k->exp100 = EXP100_SEND_DATA; k->exp100 = EXP100_SEND_DATA;
k->keepon |= KEEP_SEND; k->keepon |= KEEP_SEND;
@ -1969,7 +1967,7 @@ Curl_setup_transfer(
/* Set a timeout for the multi interface. Add the inaccuracy margin so /* Set a timeout for the multi interface. Add the inaccuracy margin so
that we don't fire slightly too early and get denied to run. */ that we don't fire slightly too early and get denied to run. */
Curl_expire(data, CURL_TIMEOUT_EXPECT_100); Curl_expire(data, data->set.expect_100_timeout);
} }
else { else {
if(data->state.expect100header) if(data->state.expect100header)

View File

@ -565,6 +565,8 @@ CURLcode Curl_init_userdefined(struct UserDefined *set)
set->ssl_enable_npn = TRUE; set->ssl_enable_npn = TRUE;
set->ssl_enable_alpn = TRUE; set->ssl_enable_alpn = TRUE;
set->expect_100_timeout = 1000L; /* Wait for a second by default. */
return res; return res;
} }
@ -1256,6 +1258,14 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
} }
break; break;
case CURLOPT_EXPECT_100_TIMEOUT_MS:
/*
* Time to wait for a response to a HTTP request containing an
* Expect: 100-continue header before sending the data anyway.
*/
data->set.expect_100_timeout = va_arg(param, long);
break;
#endif /* CURL_DISABLE_HTTP */ #endif /* CURL_DISABLE_HTTP */
case CURLOPT_CUSTOMREQUEST: case CURLOPT_CUSTOMREQUEST:

View File

@ -1596,6 +1596,8 @@ struct UserDefined {
bool ssl_enable_npn; /* TLS NPN extension? */ bool ssl_enable_npn; /* TLS NPN extension? */
bool ssl_enable_alpn; /* TLS ALPN extension? */ bool ssl_enable_alpn; /* TLS ALPN extension? */
long expect_100_timeout; /* in milliseconds */
}; };
struct Names { struct Names {