Commit c021a60b authored by Tiit Pikma's avatar Tiit Pikma Committed by Daniel Stenberg
Browse files

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.
parent bcb32e91
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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
(default). libcurl does chunked transfer decoding by default unless this
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
.IP CURLOPT_MAIL_FROM
Pass a pointer to a zero terminated string as parameter. This should be used
+1 −0
Original line number Diff line number Diff line
@@ -341,6 +341,7 @@ CURLOPT_DNS_USE_GLOBAL_CACHE 7.9.3 7.11.1
CURLOPT_EGDSOCKET               7.7
CURLOPT_ENCODING                7.10
CURLOPT_ERRORBUFFER             7.1
CURLOPT_EXPECT_100_TIMEOUT_MS   7.36.0
CURLOPT_FAILONERROR             7.1
CURLOPT_FILE                    7.1           7.9.7
CURLOPT_FILETIME                7.5
+4 −0
Original line number Diff line number Diff line
@@ -1577,6 +1577,10 @@ typedef enum {
  /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */
  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 */
} CURLoption;

+3 −5
Original line number Diff line number Diff line
@@ -87,8 +87,6 @@
/* The last #include file should be: */
#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
 * to upload.
@@ -839,7 +837,7 @@ static CURLcode readwrite_upload(struct SessionHandle *data,
          *didwhat &= ~KEEP_SEND;  /* we didn't write anything actually */

          /* set a timeout for the multi interface */
          Curl_expire(data, CURL_TIMEOUT_EXPECT_100);
          Curl_expire(data, data->set.expect_100_timeout);
          break;
        }

@@ -1075,7 +1073,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
      */

      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 */
        k->exp100 = EXP100_SEND_DATA;
        k->keepon |= KEEP_SEND;
@@ -1969,7 +1967,7 @@ Curl_setup_transfer(

        /* 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. */
        Curl_expire(data, CURL_TIMEOUT_EXPECT_100);
        Curl_expire(data, data->set.expect_100_timeout);
      }
      else {
        if(data->state.expect100header)
+10 −0
Original line number Diff line number Diff line
@@ -565,6 +565,8 @@ CURLcode Curl_init_userdefined(struct UserDefined *set)

  set->ssl_enable_npn = TRUE;
  set->ssl_enable_alpn = TRUE;

  set->expect_100_timeout = 1000L; /* Wait for a second by default. */
  return res;
}

@@ -1256,6 +1258,14 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
  }
  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 */

  case CURLOPT_CUSTOMREQUEST:
Loading