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

read_callback: move to SessionHandle from connectdata

With many easy handles using the same connection for multiplexing, it is
important we store and keep the transfer-oriented stuff in the
SessionHandle so that callbacks and callback data work fine even when
many easy handles share the same physical connection.
parent 6a688976
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -315,8 +315,6 @@ static CURLcode file_upload(struct connectdata *conn)
   * Since FILE: doesn't do the full init, we need to provide some extra
   * assignments here.
   */
  conn->fread_func = data->set.fread_func;
  conn->fread_in = data->set.in;
  conn->data->req.upload_fromhere = buf;

  if(!dir)
+2 −2
Original line number Diff line number Diff line
@@ -1670,8 +1670,8 @@ static CURLcode ftp_state_ul_setup(struct connectdata *conn,
            BUFSIZE : curlx_sotouz(data->state.resume_from - passed);

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

          passed += actuallyread;
          if((actuallyread == 0) || (actuallyread > readthisamountnow)) {
+14 −14
Original line number Diff line number Diff line
@@ -1016,8 +1016,8 @@ static size_t readmoredata(char *buffer,
      /* move backup data into focus and continue on that */
      http->postdata = http->backup.postdata;
      http->postsize = http->backup.postsize;
      conn->fread_func = http->backup.fread_func;
      conn->fread_in = http->backup.fread_in;
      conn->data->set.fread_func = http->backup.fread_func;
      conn->data->set.in = http->backup.fread_in;

      http->sending++; /* move one step up */

@@ -1172,14 +1172,14 @@ CURLcode Curl_add_buffer_send(Curl_send_buffer *in,
        ptr = in->buffer + amount;

        /* backup the currently set pointers */
        http->backup.fread_func = conn->fread_func;
        http->backup.fread_in = conn->fread_in;
        http->backup.fread_func = conn->data->set.fread_func;
        http->backup.fread_in = conn->data->set.in;
        http->backup.postdata = http->postdata;
        http->backup.postsize = http->postsize;

        /* set the new pointers for the request-sending */
        conn->fread_func = (curl_read_callback)readmoredata;
        conn->fread_in = (void *)conn;
        conn->data->set.fread_func = (curl_read_callback)readmoredata;
        conn->data->set.in = (void *)conn;
        http->postdata = ptr;
        http->postsize = (curl_off_t)size;

@@ -1475,8 +1475,8 @@ CURLcode Curl_http_done(struct connectdata *conn,
#endif

  /* set the proper values (possibly modified on POST) */
  conn->fread_func = data->set.fread_func; /* restore */
  conn->fread_in = data->set.in; /* restore */
  data->set.fread_func = data->set.fread_func; /* restore */
  data->set.in = data->set.in; /* restore */
  conn->seek_func = data->set.seek_func; /* restore */
  conn->seek_client = data->set.seek_client; /* restore */

@@ -2447,14 +2447,14 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)

    /* Get the currently set callback function pointer and store that in the
       form struct since we might want the actual user-provided callback later
       on. The conn->fread_func pointer itself will be changed for the
       on. The data->set.fread_func pointer itself will be changed for the
       multipart case to the function that returns a multipart formatted
       stream. */
    http->form.fread_func = conn->fread_func;
    http->form.fread_func = data->set.fread_func;

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

    http->sending = HTTPSEND_BODY;

@@ -2672,8 +2672,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)

        http->sending = HTTPSEND_BODY;

        conn->fread_func = (curl_read_callback)readmoredata;
        conn->fread_in = (void *)conn;
        data->set.fread_func = (curl_read_callback)readmoredata;
        data->set.in = (void *)conn;

        /* set the upload size to the progress meter */
        Curl_pgrsSetUploadSize(data, http->postsize);
+1 −1
Original line number Diff line number Diff line
@@ -1513,7 +1513,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
                   __LINE__));

      /* read/write data if it is ready to do so */
      result = Curl_readwrite(data->easy_conn, &done);
      result = Curl_readwrite(data->easy_conn, data, &done);

      k = &data->req;

+2 −2
Original line number Diff line number Diff line
@@ -1737,8 +1737,8 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
                BUFSIZE : curlx_sotouz(data->state.resume_from - passed);

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

              passed += actuallyread;
              if((actuallyread == 0) || (actuallyread > readthisamountnow)) {
Loading