Commit c904b6b5 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

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.
parent 6a274499
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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
+34 −34
Original line number Diff line number Diff line
@@ -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");
      result = expect100(data, req_buffer);
      if(result)
        return result;
        data->set.expect100header = TRUE;
      }

      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");
      result = expect100(data, req_buffer);
      if(result)
        return result;
        data->set.expect100header = TRUE;
      }

      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) {
+1 −0
Original line number Diff line number Diff line
@@ -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>
+1 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ Pragma: no-cache
Accept: */*
Transfer-Encoding: chunked
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue

3
one
+1 −0
Original line number Diff line number Diff line
@@ -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
Loading