Commit 4bcc866c authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

The fread() callback pointer and associated pointer is now stored in the

connectdata struct instead, and is no longer modified within the 'set' struct
as previously (which was a really BAAAD thing).
parent c65e088c
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1591,8 +1591,8 @@ CURLcode Curl_ftp_nextconnect(struct connectdata *conn)
            readthisamountnow = BUFSIZE;

          actuallyread =
            data->set.fread(data->state.buffer, 1, readthisamountnow,
                            data->set.in);
            conn->fread(data->state.buffer, 1, readthisamountnow,
                        conn->fread_in);

          passed += actuallyread;
          if(actuallyread != readthisamountnow) {
@@ -1623,7 +1623,7 @@ CURLcode Curl_ftp_nextconnect(struct connectdata *conn)
      }
    }

    /* Send everything on data->set.in to the socket */
    /* Send everything on data->state.in to the socket */
    if(data->set.ftp_append) {
      /* we append onto the file instead of rewriting it */
      FTPSENDF(conn, "APPE %s", ftp->file);
+18 −18
Original line number Diff line number Diff line
@@ -126,8 +126,11 @@ send_buffer *add_buffer_init(void)
 * add_buffer_send() sends a buffer and frees all associated memory.
 */
static
CURLcode add_buffer_send(int sockfd, struct connectdata *conn, send_buffer *in,
                         long *bytes_written)
CURLcode add_buffer_send(send_buffer *in,
                         int sockfd,
                         struct connectdata *conn,
                         long *bytes_written) /* add the number of sent
                                                 bytes to this counter */
{
  ssize_t amount;
  CURLcode res;
@@ -149,6 +152,8 @@ CURLcode add_buffer_send(int sockfd, struct connectdata *conn, send_buffer *in,
      /* this data _may_ contain binary stuff */
      Curl_debug(conn->data, CURLINFO_HEADER_OUT, ptr, amount);

    *bytes_written += amount;

    if(amount != size) {
      size -= amount;
      ptr += amount;
@@ -162,8 +167,6 @@ CURLcode add_buffer_send(int sockfd, struct connectdata *conn, send_buffer *in,
    free(in->buffer);
  free(in);

  *bytes_written += amount;

  return res;
}

@@ -517,8 +520,9 @@ CURLcode Curl_http_done(struct connectdata *conn)
      
    Curl_formclean(http->sendit); /* Now free that whole lot */

    data->set.fread = http->storefread; /* restore */
    data->set.in = http->in; /* restore */
    /* set the proper values */
    conn->fread = data->set.fread; /* restore */
    conn->fread_in = data->set.in; /* restore */
  }
  else if(HTTPREQ_PUT == data->set.httpreq)
    conn->bytecount = http->readbytecount + http->writebytecount;
@@ -923,13 +927,9 @@ CURLcode Curl_http(struct connectdata *conn)
        return CURLE_HTTP_POST_ERROR;
      }

      http->storefread = data->set.fread; /* backup */
      http->in = data->set.in; /* backup */
          
      data->set.fread = (curl_read_callback)
        Curl_FormReader; /* set the read function to read from the
                            generated form data */
      data->set.in = (FILE *)&http->form;
      /* set the read function to read from the generated form data */
      conn->fread = (curl_read_callback)Curl_FormReader;
      conn->fread_in = &http->form;

      if(!conn->bits.upload_chunky)
        /* only add Content-Length if not uploading chunked */
@@ -974,7 +974,7 @@ CURLcode Curl_http(struct connectdata *conn)
      Curl_pgrsSetUploadSize(data, http->postsize);

      /* fire away the whole request to the server */
      result = add_buffer_send(conn->firstsocket, conn, req_buffer,
      result = add_buffer_send(req_buffer, conn->firstsocket, conn, 
                               &data->info.request_size);
      if(result)
        failf(data, "Failed sending POST request");
@@ -1004,10 +1004,10 @@ CURLcode Curl_http(struct connectdata *conn)
      Curl_pgrsSetUploadSize(data, data->set.infilesize);

      /* this sends the buffer and frees all the buffer resources */
      result = add_buffer_send(conn->firstsocket, conn, req_buffer,
      result = add_buffer_send(req_buffer, conn->firstsocket, conn,
                               &data->info.request_size);
      if(result)
        failf(data, "Faied sending POST request");
        failf(data, "Failed sending POST request");
      else
        /* prepare for transfer */
        result = Curl_Transfer(conn, conn->firstsocket, -1, TRUE,
@@ -1053,7 +1053,7 @@ CURLcode Curl_http(struct connectdata *conn)
                    data->set.postfields );

      /* issue the request */
      result = add_buffer_send(conn->firstsocket, conn, req_buffer,
      result = add_buffer_send(req_buffer, conn->firstsocket, conn,
                               &data->info.request_size);

      if(result)
@@ -1070,7 +1070,7 @@ CURLcode Curl_http(struct connectdata *conn)
      add_buffer(req_buffer, "\r\n", 2);
      
      /* issue the request */
      result = add_buffer_send(conn->firstsocket, conn, req_buffer,
      result = add_buffer_send(req_buffer, conn->firstsocket, conn,
                               &data->info.request_size);

      if(result)
+2 −1
Original line number Diff line number Diff line
@@ -275,7 +275,8 @@ int cert_stuff(struct connectdata *conn,
      if (SSL_CTX_use_PrivateKey_file(conn->ssl.ctx,
                                      key_file,
                                      file_type) != 1) {
        failf(data, "unable to set private key file\n");
        failf(data, "unable to set private key file: '%s' type %s\n",
              key_file, key_type?key_type:"PEM");
        return 0;
      }
      break;
+211 −211
Original line number Diff line number Diff line
@@ -793,8 +793,8 @@ k->timeofdoc = curl_getdate(k->p+strlen("Last-Modified:"),
            }
            if(k->badheader < HEADER_ALLBAD) {
              /* This switch handles various content encodings. If there's an
               error here, be sure to check over the almost identical code in
               http_chunk.c. 08/29/02 jhrg */
                 error here, be sure to check over the almost identical code
                 in http_chunk.c. 08/29/02 jhrg */
#ifdef HAVE_LIBZ
              switch (k->content_encoding) {
              case IDENTITY:
@@ -874,8 +874,8 @@ k->timeofdoc = curl_getdate(k->p+strlen("Last-Modified:"),
              conn->upload_fromhere += 10; /* 32bit hex + CRLF */
            }

            nread = data->set.fread(conn->upload_fromhere, 1,
                                    buffersize, data->set.in);
            nread = conn->fread(conn->upload_fromhere, 1,
                                buffersize, conn->fread_in);
          
            if(conn->bits.upload_chunky) {
              /* if chunked Transfer-Encoding */
@@ -944,12 +944,12 @@ k->timeofdoc = curl_getdate(k->p+strlen("Last-Modified:"),
             that instead of reading more data */
        }

        /* write to socket */
        /* write to socket (send away data) */
        result = Curl_write(conn,
                            conn->writesockfd,
                            conn->upload_fromhere,
                            conn->upload_present,
                            &bytes_written);
                            conn->writesockfd,     /* socket to send to */
                            conn->upload_fromhere, /* buffer pointer */
                            conn->upload_present,  /* buffer size */
                            &bytes_written);       /* actually send away */
        if(result)
          return result;
        else if(conn->upload_present != bytes_written) {
+3 −0
Original line number Diff line number Diff line
@@ -1789,6 +1789,9 @@ static CURLcode CreateConnection(struct SessionHandle *data,
  /* else, no chunky upload */
  FALSE;

  conn->fread = data->set.fread;
  conn->fread_in = data->set.in;

  /***********************************************************
   * We need to allocate memory to store the path in. We get the size of the
   * full URL to be sure, and we need to make it at least 256 bytes since
Loading