[vlc-devel] [PATCH 3/3] access/http: Implement STREAM_GET_HTTP_HEADER
Marvin Scholz
epirat07 at gmail.com
Mon Aug 12 11:56:08 CEST 2019
---
modules/access/http/access.c | 7 +++++++
modules/access/http/file.h | 1 +
modules/access/http/live.h | 1 +
modules/access/http/resource.c | 10 ++++++++++
modules/access/http/resource.h | 7 +++++++
5 files changed, 26 insertions(+)
diff --git a/modules/access/http/access.c b/modules/access/http/access.c
index a3805d0d42..bab49e4752 100644
--- a/modules/access/http/access.c
+++ b/modules/access/http/access.c
@@ -104,6 +104,13 @@ static int FileControl(stream_t *access, int query, va_list args)
*va_arg(args, char **) = vlc_http_file_get_type(sys->resource);
break;
+ case STREAM_GET_HTTP_HEADER:
+ {
+ const char *header = va_arg(args, const char*);
+ *va_arg(args, char **) = vlc_http_file_get_header(sys->resource, header);
+ break;
+ }
+
case STREAM_SET_PAUSE_STATE:
break;
diff --git a/modules/access/http/file.h b/modules/access/http/file.h
index 802cf8f93a..e6107aa0b2 100644
--- a/modules/access/http/file.h
+++ b/modules/access/http/file.h
@@ -82,6 +82,7 @@ struct block_t *vlc_http_file_read(struct vlc_http_resource *);
#define vlc_http_file_get_status vlc_http_res_get_status
#define vlc_http_file_get_redirect vlc_http_res_get_redirect
#define vlc_http_file_get_type vlc_http_res_get_type
+#define vlc_http_file_get_header vlc_http_res_get_header
#define vlc_http_file_destroy vlc_http_res_destroy
/** @} */
diff --git a/modules/access/http/live.h b/modules/access/http/live.h
index 80af97119b..bbedd2f1f3 100644
--- a/modules/access/http/live.h
+++ b/modules/access/http/live.h
@@ -36,6 +36,7 @@ struct block_t *vlc_http_live_read(struct vlc_http_resource *);
#define vlc_http_live_get_status vlc_http_res_get_status
#define vlc_http_live_get_redirect vlc_http_res_get_redirect
#define vlc_http_live_get_type vlc_http_res_get_type
+#define vlc_http_live_get_header vlc_http_res_get_header
#define vlc_http_live_destroy vlc_http_res_destroy
/** @} */
diff --git a/modules/access/http/resource.c b/modules/access/http/resource.c
index 9a28bb50f3..240b8b8f22 100644
--- a/modules/access/http/resource.c
+++ b/modules/access/http/resource.c
@@ -319,6 +319,16 @@ char *vlc_http_res_get_type(struct vlc_http_resource *res)
return (type != NULL) ? strdup(type) : NULL;
}
+char *vlc_http_res_get_header(struct vlc_http_resource *res, const char *header)
+{
+ int status = vlc_http_res_get_status(res);
+ if (status < 200 || status >= 300)
+ return NULL;
+
+ const char *value = vlc_http_msg_get_header(res->response, header);
+ return (value != NULL) ? strdup(value) : NULL;
+}
+
struct block_t *vlc_http_res_read(struct vlc_http_resource *res)
{
int status = vlc_http_res_get_status(res);
diff --git a/modules/access/http/resource.h b/modules/access/http/resource.h
index 22b5abac64..c2f1ef7dd5 100644
--- a/modules/access/http/resource.h
+++ b/modules/access/http/resource.h
@@ -91,6 +91,13 @@ char *vlc_http_res_get_redirect(struct vlc_http_resource *);
*/
char *vlc_http_res_get_type(struct vlc_http_resource *);
+/**
+ * Gets a HTTP header value
+ *
+ * @return Heap-allocated header value string, or NULL if unknown.
+ */
+char *vlc_http_res_get_header(struct vlc_http_resource *res, const char *header);
+
/**
* Reads data.
*/
--
2.19.1
More information about the vlc-devel
mailing list