[vlc-commits] http: add manager flag for requests with payload
Rémi Denis-Courmont
git at videolan.org
Sun Oct 4 16:24:52 CEST 2020
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Oct 4 17:02:29 2020 +0300| [db8b32e0b4bfa72224d8055476d7dc5d05c867a2] | committer: Rémi Denis-Courmont
http: add manager flag for requests with payload
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=db8b32e0b4bfa72224d8055476d7dc5d05c867a2
---
modules/access/http/connmgr.c | 25 ++++++++++++++-----------
modules/access/http/connmgr.h | 3 ++-
modules/access/http/file_test.c | 3 ++-
modules/access/http/resource.c | 2 +-
4 files changed, 19 insertions(+), 14 deletions(-)
diff --git a/modules/access/http/connmgr.c b/modules/access/http/connmgr.c
index 7f16405536..ca734853fc 100644
--- a/modules/access/http/connmgr.c
+++ b/modules/access/http/connmgr.c
@@ -124,13 +124,14 @@ static void vlc_http_mgr_release(struct vlc_http_mgr *mgr,
static
struct vlc_http_msg *vlc_http_mgr_reuse(struct vlc_http_mgr *mgr,
const char *host, unsigned port,
- const struct vlc_http_msg *req)
+ const struct vlc_http_msg *req,
+ bool payload)
{
struct vlc_http_conn *conn = vlc_http_mgr_find(mgr, host, port);
if (conn == NULL)
return NULL;
- struct vlc_http_stream *stream = vlc_http_stream_open(conn, req, false);
+ struct vlc_http_stream *stream = vlc_http_stream_open(conn, req, payload);
if (stream != NULL)
{
struct vlc_http_msg *m = vlc_http_msg_get_initial(stream);
@@ -145,7 +146,7 @@ struct vlc_http_msg *vlc_http_mgr_reuse(struct vlc_http_mgr *mgr,
static struct vlc_http_msg *vlc_https_request(struct vlc_http_mgr *mgr,
const char *host, unsigned port,
const struct vlc_http_msg *req,
- bool idempotent)
+ bool idempotent, bool payload)
{
vlc_tls_t *tls;
bool http2 = true;
@@ -166,7 +167,8 @@ static struct vlc_http_msg *vlc_https_request(struct vlc_http_mgr *mgr,
* the nonidempotent request was processed if the connection fails
* before the response is received.
*/
- struct vlc_http_msg *resp = vlc_http_mgr_reuse(mgr, host, port, req);
+ struct vlc_http_msg *resp = vlc_http_mgr_reuse(mgr, host, port, req,
+ payload);
if (resp != NULL)
return resp; /* existing connection reused */
}
@@ -208,20 +210,21 @@ static struct vlc_http_msg *vlc_https_request(struct vlc_http_mgr *mgr,
vlc_http_mgr_release(mgr, mgr->conn);
mgr->conn = conn;
- return vlc_http_mgr_reuse(mgr, host, port, req);
+ return vlc_http_mgr_reuse(mgr, host, port, req, payload);
}
static struct vlc_http_msg *vlc_http_request(struct vlc_http_mgr *mgr,
const char *host, unsigned port,
const struct vlc_http_msg *req,
- bool idempotent)
+ bool idempotent, bool payload)
{
if (mgr->creds != NULL && mgr->conn != NULL)
return NULL; /* switch from HTTPS to HTTP not implemented */
if (idempotent)
{
- struct vlc_http_msg *resp = vlc_http_mgr_reuse(mgr, host, port, req);
+ struct vlc_http_msg *resp = vlc_http_mgr_reuse(mgr, host, port, req,
+ payload);
if (resp != NULL)
return resp;
}
@@ -240,7 +243,7 @@ static struct vlc_http_msg *vlc_http_request(struct vlc_http_mgr *mgr,
if (url.psz_host != NULL)
stream = vlc_h1_request(mgr->logger, url.psz_host,
url.i_port ? url.i_port : 80, true, req,
- idempotent, false, &conn);
+ idempotent, payload, &conn);
else
stream = NULL;
@@ -248,7 +251,7 @@ static struct vlc_http_msg *vlc_http_request(struct vlc_http_mgr *mgr,
}
else
stream = vlc_h1_request(mgr->logger, host, port ? port : 80, false,
- req, idempotent, false, &conn);
+ req, idempotent, payload, &conn);
if (stream == NULL)
return NULL;
@@ -270,13 +273,13 @@ static struct vlc_http_msg *vlc_http_request(struct vlc_http_mgr *mgr,
struct vlc_http_msg *vlc_http_mgr_request(struct vlc_http_mgr *mgr, bool https,
const char *host, unsigned port,
const struct vlc_http_msg *m,
- bool idempotent)
+ bool idempotent, bool payload)
{
if (port && vlc_http_port_blocked(port))
return NULL;
return (https ? vlc_https_request : vlc_http_request)(mgr, host, port, m,
- idempotent);
+ idempotent, payload);
}
struct vlc_http_cookie_jar_t *vlc_http_mgr_get_jar(struct vlc_http_mgr *mgr)
diff --git a/modules/access/http/connmgr.h b/modules/access/http/connmgr.h
index e853e1fde6..84bbb3c400 100644
--- a/modules/access/http/connmgr.h
+++ b/modules/access/http/connmgr.h
@@ -46,13 +46,14 @@ struct vlc_http_cookie_jar_t;
* @param port TCP server port number, or 0 for the default port number
* @param req HTTP request header to send
* @param idempotent whether the request is idempotent
+ * @param payload whether the request will carry a payload
*
* @return The initial HTTP response header, or NULL in case of failure.
*/
struct vlc_http_msg *vlc_http_mgr_request(struct vlc_http_mgr *mgr, bool https,
const char *host, unsigned port,
const struct vlc_http_msg *req,
- bool idempotent);
+ bool idempotent, bool payload);
struct vlc_http_cookie_jar_t *vlc_http_mgr_get_jar(struct vlc_http_mgr *);
diff --git a/modules/access/http/file_test.c b/modules/access/http/file_test.c
index fbe55d4689..b66e9e6240 100644
--- a/modules/access/http/file_test.c
+++ b/modules/access/http/file_test.c
@@ -337,7 +337,7 @@ static struct vlc_http_stream stream = { &stream_callbacks };
struct vlc_http_msg *vlc_http_mgr_request(struct vlc_http_mgr *mgr, bool https,
const char *host, unsigned port,
const struct vlc_http_msg *req,
- bool idempotent)
+ bool idempotent, bool payload)
{
const char *str;
char *end;
@@ -347,6 +347,7 @@ struct vlc_http_msg *vlc_http_mgr_request(struct vlc_http_mgr *mgr, bool https,
assert(!strcmp(host, "www.example.com"));
assert(port == 8443);
assert(idempotent);
+ assert(!payload);
str = vlc_http_msg_get_method(req);
assert(!strcmp(str, "GET"));
diff --git a/modules/access/http/resource.c b/modules/access/http/resource.c
index 2550146d00..e9669450e5 100644
--- a/modules/access/http/resource.c
+++ b/modules/access/http/resource.c
@@ -91,7 +91,7 @@ retry:
return NULL;
struct vlc_http_msg *resp = vlc_http_mgr_request(res->manager, res->secure,
- res->host, res->port, req, true);
+ res->host, res->port, req, true, false);
vlc_http_msg_destroy(req);
resp = vlc_http_msg_get_final(resp);
More information about the vlc-commits
mailing list