avformat/http: export http_version from response

Can be used by the api user to figure out what http features the server supports based on the response received.

Signed-off-by: Aman Gupta <aman@tmm1.net>
pull/274/head
Aman Gupta 7 years ago
parent ac19e63b18
commit 039007c928
  1. 3
      doc/protocols.texi
  2. 8
      libavformat/http.c

@ -321,6 +321,9 @@ Sets the maximum delay in seconds after which to give up reconnecting
@item mime_type @item mime_type
Export the MIME type. Export the MIME type.
@item http_version
Exports the HTTP response version number. Usually "1.0" or "1.1".
@item icy @item icy
If set to 1 request ICY (SHOUTcast) metadata from the server. If the server If set to 1 request ICY (SHOUTcast) metadata from the server. If the server
supports this, the metadata has to be retrieved by the application by reading supports this, the metadata has to be retrieved by the application by reading

@ -74,6 +74,7 @@ typedef struct HTTPContext {
char *http_proxy; char *http_proxy;
char *headers; char *headers;
char *mime_type; char *mime_type;
char *http_version;
char *user_agent; char *user_agent;
#if FF_API_HTTP_USER_AGENT #if FF_API_HTTP_USER_AGENT
char *user_agent_deprecated; char *user_agent_deprecated;
@ -144,6 +145,7 @@ static const AVOption options[] = {
{ "multiple_requests", "use persistent connections", OFFSET(multiple_requests), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, D | E }, { "multiple_requests", "use persistent connections", OFFSET(multiple_requests), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, D | E },
{ "post_data", "set custom HTTP post data", OFFSET(post_data), AV_OPT_TYPE_BINARY, .flags = D | E }, { "post_data", "set custom HTTP post data", OFFSET(post_data), AV_OPT_TYPE_BINARY, .flags = D | E },
{ "mime_type", "export the MIME type", OFFSET(mime_type), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, AV_OPT_FLAG_EXPORT | AV_OPT_FLAG_READONLY }, { "mime_type", "export the MIME type", OFFSET(mime_type), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, AV_OPT_FLAG_EXPORT | AV_OPT_FLAG_READONLY },
{ "http_version", "export the http response version", OFFSET(http_version), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, AV_OPT_FLAG_EXPORT | AV_OPT_FLAG_READONLY },
{ "cookies", "set cookies to be sent in applicable future requests, use newline delimited Set-Cookie HTTP field value syntax", OFFSET(cookies), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, D }, { "cookies", "set cookies to be sent in applicable future requests, use newline delimited Set-Cookie HTTP field value syntax", OFFSET(cookies), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, D },
{ "icy", "request ICY metadata", OFFSET(icy), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, D }, { "icy", "request ICY metadata", OFFSET(icy), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, D },
{ "icy_metadata_headers", "return ICY metadata headers", OFFSET(icy_metadata_headers), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, AV_OPT_FLAG_EXPORT }, { "icy_metadata_headers", "return ICY metadata headers", OFFSET(icy_metadata_headers), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, AV_OPT_FLAG_EXPORT },
@ -919,6 +921,12 @@ static int process_line(URLContext *h, char *line, int line_count,
} else { } else {
if (av_strncasecmp(p, "HTTP/1.0", 8) == 0) if (av_strncasecmp(p, "HTTP/1.0", 8) == 0)
s->willclose = 1; s->willclose = 1;
while (*p != '/' && *p != '\0')
p++;
while (*p == '/')
p++;
av_freep(&s->http_version);
s->http_version = av_strndup(p, 3);
while (!av_isspace(*p) && *p != '\0') while (!av_isspace(*p) && *p != '\0')
p++; p++;
while (av_isspace(*p)) while (av_isspace(*p))

Loading…
Cancel
Save