Merge commit 'be4edda6731a341d3fdeaa0e57753dc396790362'
* commit 'be4edda6731a341d3fdeaa0e57753dc396790362': http: Expose the content location via an AVOption Conflicts: libavformat/http.c libavformat/version.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@ -55,7 +55,7 @@ typedef struct {
|
|||||||
int64_t off, filesize;
|
int64_t off, filesize;
|
||||||
int icy_data_read; ///< how much data was read since last ICY metadata packet
|
int icy_data_read; ///< how much data was read since last ICY metadata packet
|
||||||
int icy_metaint; ///< after how many bytes of read data a new metadata packet will be found
|
int icy_metaint; ///< after how many bytes of read data a new metadata packet will be found
|
||||||
char location[MAX_URL_SIZE];
|
char *location;
|
||||||
HTTPAuthState auth_state;
|
HTTPAuthState auth_state;
|
||||||
HTTPAuthState proxy_auth_state;
|
HTTPAuthState proxy_auth_state;
|
||||||
char *headers;
|
char *headers;
|
||||||
@ -104,6 +104,7 @@ static const AVOption options[] = {
|
|||||||
{"none", "No auth method set, autodetect", 0, AV_OPT_TYPE_CONST, {.i64 = HTTP_AUTH_NONE}, 0, 0, D|E, "auth_type" },
|
{"none", "No auth method set, autodetect", 0, AV_OPT_TYPE_CONST, {.i64 = HTTP_AUTH_NONE}, 0, 0, D|E, "auth_type" },
|
||||||
{"basic", "HTTP basic authentication", 0, AV_OPT_TYPE_CONST, {.i64 = HTTP_AUTH_BASIC}, 0, 0, D|E, "auth_type" },
|
{"basic", "HTTP basic authentication", 0, AV_OPT_TYPE_CONST, {.i64 = HTTP_AUTH_BASIC}, 0, 0, D|E, "auth_type" },
|
||||||
{"send_expect_100", "Force sending an Expect: 100-continue header for POST", OFFSET(send_expect_100), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, E },
|
{"send_expect_100", "Force sending an Expect: 100-continue header for POST", OFFSET(send_expect_100), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, E },
|
||||||
|
{"location", "The actual location of the data received", OFFSET(location), AV_OPT_TYPE_STRING, { 0 }, 0, 0, D|E },
|
||||||
{NULL}
|
{NULL}
|
||||||
};
|
};
|
||||||
#define HTTP_CLASS(flavor)\
|
#define HTTP_CLASS(flavor)\
|
||||||
@ -236,7 +237,10 @@ int ff_http_do_new_request(URLContext *h, const char *uri)
|
|||||||
|
|
||||||
s->off = 0;
|
s->off = 0;
|
||||||
s->icy_data_read = 0;
|
s->icy_data_read = 0;
|
||||||
av_strlcpy(s->location, uri, sizeof(s->location));
|
av_free(s->location);
|
||||||
|
s->location = av_strdup(uri);
|
||||||
|
if (!s->location)
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
|
||||||
av_dict_copy(&options, s->chained_options, 0);
|
av_dict_copy(&options, s->chained_options, 0);
|
||||||
ret = http_open_cnx(h, &options);
|
ret = http_open_cnx(h, &options);
|
||||||
@ -256,7 +260,9 @@ static int http_open(URLContext *h, const char *uri, int flags,
|
|||||||
h->is_streamed = 1;
|
h->is_streamed = 1;
|
||||||
|
|
||||||
s->filesize = -1;
|
s->filesize = -1;
|
||||||
av_strlcpy(s->location, uri, sizeof(s->location));
|
s->location = av_strdup(uri);
|
||||||
|
if (!s->location)
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
if (options)
|
if (options)
|
||||||
av_dict_copy(&s->chained_options, *options, 0);
|
av_dict_copy(&s->chained_options, *options, 0);
|
||||||
|
|
||||||
@ -356,10 +362,14 @@ static int process_line(URLContext *h, char *line, int line_count,
|
|||||||
while (av_isspace(*p))
|
while (av_isspace(*p))
|
||||||
p++;
|
p++;
|
||||||
if (!av_strcasecmp(tag, "Location")) {
|
if (!av_strcasecmp(tag, "Location")) {
|
||||||
char redirected_location[MAX_URL_SIZE];
|
char redirected_location[MAX_URL_SIZE], *new_loc;
|
||||||
ff_make_absolute_url(redirected_location, sizeof(redirected_location),
|
ff_make_absolute_url(redirected_location, sizeof(redirected_location),
|
||||||
s->location, p);
|
s->location, p);
|
||||||
av_strlcpy(s->location, redirected_location, sizeof(s->location));
|
new_loc = av_strdup(redirected_location);
|
||||||
|
if (!new_loc)
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
av_free(s->location);
|
||||||
|
s->location = new_loc;
|
||||||
*new_location = 1;
|
*new_location = 1;
|
||||||
} else if (!av_strcasecmp (tag, "Content-Length") && s->filesize == -1) {
|
} else if (!av_strcasecmp (tag, "Content-Length") && s->filesize == -1) {
|
||||||
s->filesize = strtoll(p, NULL, 10);
|
s->filesize = strtoll(p, NULL, 10);
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
#define LIBAVFORMAT_VERSION_MAJOR 55
|
#define LIBAVFORMAT_VERSION_MAJOR 55
|
||||||
#define LIBAVFORMAT_VERSION_MINOR 21
|
#define LIBAVFORMAT_VERSION_MINOR 21
|
||||||
#define LIBAVFORMAT_VERSION_MICRO 100
|
#define LIBAVFORMAT_VERSION_MICRO 101
|
||||||
|
|
||||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
||||||
LIBAVFORMAT_VERSION_MINOR, \
|
LIBAVFORMAT_VERSION_MINOR, \
|
||||||
|
Reference in New Issue
Block a user