mirror of
https://github.com/moparisthebest/curl
synced 2024-12-22 08:08:50 -05:00
http2: init the pushed transfer properly
This commit is contained in:
parent
f65ab8864e
commit
e9f0dd43bc
@ -958,9 +958,16 @@ CURLMcode Curl_multi_add_perform(struct Curl_multi *multi,
|
|||||||
|
|
||||||
rc = curl_multi_add_handle(multi, data);
|
rc = curl_multi_add_handle(multi, data);
|
||||||
if(!rc) {
|
if(!rc) {
|
||||||
|
struct SingleRequest *k = &data->req;
|
||||||
|
|
||||||
|
/* pass in NULL for 'conn' here since we don't want to init the
|
||||||
|
connection, only this transfer */
|
||||||
|
Curl_init_do(data, NULL);
|
||||||
|
|
||||||
/* take this handle to the perform state right away */
|
/* take this handle to the perform state right away */
|
||||||
multistate(data, CURLM_STATE_PERFORM);
|
multistate(data, CURLM_STATE_PERFORM);
|
||||||
data->easy_conn = conn;
|
data->easy_conn = conn;
|
||||||
|
k->keepon |= KEEP_RECV; /* setup to receive! */
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
21
lib/url.c
21
lib/url.c
@ -142,7 +142,6 @@ find_oldest_idle_connection_in_bundle(struct SessionHandle *data,
|
|||||||
struct connectbundle *bundle);
|
struct connectbundle *bundle);
|
||||||
static void conn_free(struct connectdata *conn);
|
static void conn_free(struct connectdata *conn);
|
||||||
static void signalPipeClose(struct curl_llist *pipeline, bool pipe_broke);
|
static void signalPipeClose(struct curl_llist *pipeline, bool pipe_broke);
|
||||||
static CURLcode do_init(struct connectdata *conn);
|
|
||||||
static CURLcode parse_url_login(struct SessionHandle *data,
|
static CURLcode parse_url_login(struct SessionHandle *data,
|
||||||
struct connectdata *conn,
|
struct connectdata *conn,
|
||||||
char **userptr, char **passwdptr,
|
char **userptr, char **passwdptr,
|
||||||
@ -5651,7 +5650,7 @@ static CURLcode create_conn(struct SessionHandle *data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* since we skip do_init() */
|
/* since we skip do_init() */
|
||||||
do_init(conn);
|
Curl_init_do(data, conn);
|
||||||
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
@ -5830,7 +5829,7 @@ static CURLcode create_conn(struct SessionHandle *data,
|
|||||||
conn->inuse = TRUE;
|
conn->inuse = TRUE;
|
||||||
|
|
||||||
/* Setup and init stuff before DO starts, in preparing for the transfer. */
|
/* Setup and init stuff before DO starts, in preparing for the transfer. */
|
||||||
do_init(conn);
|
Curl_init_do(data, conn);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup whatever necessary for a resumed transfer
|
* Setup whatever necessary for a resumed transfer
|
||||||
@ -6112,20 +6111,24 @@ CURLcode Curl_done(struct connectdata **connp,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* do_init() inits the readwrite session. This is inited each time (in the DO
|
* Curl_init_do() inits the readwrite session. This is inited each time (in
|
||||||
* function before the protocol-specific DO functions are invoked) for a
|
* the DO function before the protocol-specific DO functions are invoked) for
|
||||||
* transfer, sometimes multiple times on the same SessionHandle. Make sure
|
* a transfer, sometimes multiple times on the same SessionHandle. Make sure
|
||||||
* nothing in here depends on stuff that are setup dynamically for the
|
* nothing in here depends on stuff that are setup dynamically for the
|
||||||
* transfer.
|
* transfer.
|
||||||
|
*
|
||||||
|
* Allow this function to get called with 'conn' set to NULL.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static CURLcode do_init(struct connectdata *conn)
|
CURLcode Curl_init_do(struct SessionHandle *data, struct connectdata *conn)
|
||||||
{
|
{
|
||||||
struct SessionHandle *data = conn->data;
|
|
||||||
struct SingleRequest *k = &data->req;
|
struct SingleRequest *k = &data->req;
|
||||||
|
|
||||||
|
if(conn)
|
||||||
|
conn->bits.do_more = FALSE; /* by default there's no curl_do_more() to
|
||||||
|
* use */
|
||||||
|
|
||||||
data->state.done = FALSE; /* Curl_done() is not called yet */
|
data->state.done = FALSE; /* Curl_done() is not called yet */
|
||||||
conn->bits.do_more = FALSE; /* by default there's no curl_do_more() to use */
|
|
||||||
data->state.expect100header = FALSE;
|
data->state.expect100header = FALSE;
|
||||||
|
|
||||||
if(data->set.opt_no_body)
|
if(data->set.opt_no_body)
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@ -27,6 +27,7 @@
|
|||||||
* Prototypes for library-wide functions provided by url.c
|
* Prototypes for library-wide functions provided by url.c
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
CURLcode Curl_init_do(struct SessionHandle *data, struct connectdata *conn);
|
||||||
CURLcode Curl_open(struct SessionHandle **curl);
|
CURLcode Curl_open(struct SessionHandle **curl);
|
||||||
CURLcode Curl_init_userdefined(struct UserDefined *set);
|
CURLcode Curl_init_userdefined(struct UserDefined *set);
|
||||||
CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
|
CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
|
||||||
|
Loading…
Reference in New Issue
Block a user