diff --git a/lib/multi.c b/lib/multi.c index 121a44593..b106c9495 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -1642,10 +1642,11 @@ static CURLcode protocol_connect(struct connectdata *conn, } /* - * preconnect() is called immediately before a connect starts. When a redirect - * is followed, this is then called multiple times during a single transfer. + * Curl_preconnect() is called immediately before a connect starts. When a + * redirect is followed, this is then called multiple times during a single + * transfer. */ -static CURLcode preconnect(struct Curl_easy *data) +CURLcode Curl_preconnect(struct Curl_easy *data) { if(!data->state.buffer) { data->state.buffer = malloc(data->set.buffer_size + 1); @@ -1763,7 +1764,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, case CURLM_STATE_CONNECT: /* Connect. We want to get a connection identifier filled in. */ /* init this transfer. */ - result = preconnect(data); + result = Curl_preconnect(data); if(result) break; diff --git a/lib/multiif.h b/lib/multiif.h index c07587baf..7d574df92 100644 --- a/lib/multiif.h +++ b/lib/multiif.h @@ -37,6 +37,7 @@ void Curl_detach_connnection(struct Curl_easy *data); bool Curl_multiplex_wanted(const struct Curl_multi *multi); void Curl_set_in_callback(struct Curl_easy *data, bool value); bool Curl_is_in_callback(struct Curl_easy *easy); +CURLcode Curl_preconnect(struct Curl_easy *data); /* Internal version of curl_multi_init() accepts size parameters for the socket and connection hashes */ diff --git a/lib/url.c b/lib/url.c index 4021c5d78..8225e617a 100644 --- a/lib/url.c +++ b/lib/url.c @@ -3981,6 +3981,11 @@ CURLcode Curl_init_do(struct Curl_easy *data, struct connectdata *conn) { struct SingleRequest *k = &data->req; + /* if this is a pushed stream, we need this: */ + CURLcode result = Curl_preconnect(data); + if(result) + return result; + if(conn) { conn->bits.do_more = FALSE; /* by default there's no curl_do_more() to use */