Commit e999b641 authored by Samuel Pitoiset's avatar Samuel Pitoiset Committed by Martin Storsjö

http: Add support for reusing the http socket for subsequent requests

Introduce ff_http_do_new_request(), a new function which sends a new
HTTP request, reusing the existing connection to the server.
Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
parent 3bdb438e
...@@ -139,12 +139,16 @@ static int http_open_cnx(URLContext *h) ...@@ -139,12 +139,16 @@ static int http_open_cnx(URLContext *h)
} }
ff_url_join(buf, sizeof(buf), lower_proto, NULL, hostname, port, NULL); ff_url_join(buf, sizeof(buf), lower_proto, NULL, hostname, port, NULL);
err = ffurl_open(&hd, buf, AVIO_FLAG_READ_WRITE,
&h->interrupt_callback, NULL);
if (err < 0)
goto fail;
s->hd = hd; if (!s->hd) {
err = ffurl_open(&hd, buf, AVIO_FLAG_READ_WRITE,
&h->interrupt_callback, NULL);
if (err < 0)
goto fail;
s->hd = hd;
}
cur_auth_type = s->auth_state.auth_type; cur_auth_type = s->auth_state.auth_type;
cur_proxy_auth_type = s->auth_state.auth_type; cur_proxy_auth_type = s->auth_state.auth_type;
if (http_connect(h, path, local_path, hoststr, auth, proxyauth, &location_changed) < 0) if (http_connect(h, path, local_path, hoststr, auth, proxyauth, &location_changed) < 0)
...@@ -187,6 +191,16 @@ static int http_open_cnx(URLContext *h) ...@@ -187,6 +191,16 @@ static int http_open_cnx(URLContext *h)
return AVERROR(EIO); return AVERROR(EIO);
} }
int ff_http_do_new_request(URLContext *h, const char *uri)
{
HTTPContext *s = h->priv_data;
s->off = 0;
av_strlcpy(s->location, uri, sizeof(s->location));
return http_open_cnx(h);
}
static int http_open(URLContext *h, const char *uri, int flags) static int http_open(URLContext *h, const char *uri, int flags)
{ {
HTTPContext *s = h->priv_data; HTTPContext *s = h->priv_data;
...@@ -430,6 +444,7 @@ static int http_connect(URLContext *h, const char *path, const char *local_path, ...@@ -430,6 +444,7 @@ static int http_connect(URLContext *h, const char *path, const char *local_path,
s->filesize = -1; s->filesize = -1;
s->willclose = 0; s->willclose = 0;
s->end_chunked_post = 0; s->end_chunked_post = 0;
s->end_header = 0;
if (post) { if (post) {
/* Pretend that it did work. We didn't read any header yet, since /* Pretend that it did work. We didn't read any header yet, since
* we've still to send the POST data, but the code calling this * we've still to send the POST data, but the code calling this
......
...@@ -35,4 +35,14 @@ ...@@ -35,4 +35,14 @@
*/ */
void ff_http_init_auth_state(URLContext *dest, const URLContext *src); void ff_http_init_auth_state(URLContext *dest, const URLContext *src);
/**
* Send a new HTTP request, reusing the old connection.
*
* @param h pointer to the ressource
* @param uri uri used to perform the request
* @return a negative value if an error condition occured, 0
* otherwise
*/
int ff_http_do_new_request(URLContext *h, const char *uri);
#endif /* AVFORMAT_HTTP_H */ #endif /* AVFORMAT_HTTP_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment