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:
parent
bcb32e915e
commit
c021a60bcc
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
10
lib/url.c
10
lib/url.c
@ -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:
|
||||||
|
@ -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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user