Merge commit '71549a857b13edf4c4f95037de6ed5bb4c4bd4af'
* commit '71549a857b13edf4c4f95037de6ed5bb4c4bd4af': http: Support auth method detection for POST Conflicts: libavformat/version.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
6b1b63df85
@ -79,6 +79,7 @@ typedef struct {
|
||||
uint8_t *inflate_buffer;
|
||||
#endif
|
||||
AVDictionary *chained_options;
|
||||
int send_expect_100;
|
||||
} HTTPContext;
|
||||
|
||||
#define OFFSET(x) offsetof(HTTPContext, x)
|
||||
@ -101,6 +102,7 @@ static const AVOption options[] = {
|
||||
{"auth_type", "HTTP authentication type", OFFSET(auth_state.auth_type), AV_OPT_TYPE_INT, {.i64 = HTTP_AUTH_NONE}, HTTP_AUTH_NONE, HTTP_AUTH_BASIC, 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" },
|
||||
{"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, "auth_type" },
|
||||
{NULL}
|
||||
};
|
||||
#define HTTP_CLASS(flavor)\
|
||||
@ -583,6 +585,7 @@ static int http_connect(URLContext *h, const char *path, const char *local_path,
|
||||
int64_t off = s->off;
|
||||
int len = 0;
|
||||
const char *method;
|
||||
int send_expect_100 = 0;
|
||||
|
||||
|
||||
/* send http header */
|
||||
@ -600,6 +603,16 @@ static int http_connect(URLContext *h, const char *path, const char *local_path,
|
||||
method);
|
||||
proxyauthstr = ff_http_auth_create_response(&s->proxy_auth_state, proxyauth,
|
||||
local_path, method);
|
||||
if (post && !s->post_data) {
|
||||
send_expect_100 = s->send_expect_100;
|
||||
/* The user has supplied authentication but we don't know the auth type,
|
||||
* send Expect: 100-continue to get the 401 response including the
|
||||
* WWW-Authenticate header, or an 100 continue if no auth actually
|
||||
* is needed. */
|
||||
if (auth && s->auth_state.auth_type == HTTP_AUTH_NONE &&
|
||||
s->http_code != 401)
|
||||
send_expect_100 = 1;
|
||||
}
|
||||
|
||||
/* set default headers if needed */
|
||||
if (!has_header(s->headers, "\r\nUser-Agent: "))
|
||||
@ -614,6 +627,9 @@ static int http_connect(URLContext *h, const char *path, const char *local_path,
|
||||
if (!has_header(s->headers, "\r\nRange: ") && !post && (s->off > 0 || s->seekable == -1))
|
||||
len += av_strlcatf(headers + len, sizeof(headers) - len,
|
||||
"Range: bytes=%"PRId64"-\r\n", s->off);
|
||||
if (send_expect_100 && !has_header(s->headers, "\r\nExpect: "))
|
||||
len += av_strlcatf(headers + len, sizeof(headers) - len,
|
||||
"Expect: 100-continue\r\n");
|
||||
|
||||
if (!has_header(s->headers, "\r\nConnection: ")) {
|
||||
if (s->multiple_requests) {
|
||||
@ -684,7 +700,7 @@ static int http_connect(URLContext *h, const char *path, const char *local_path,
|
||||
s->willclose = 0;
|
||||
s->end_chunked_post = 0;
|
||||
s->end_header = 0;
|
||||
if (post && !s->post_data) {
|
||||
if (post && !s->post_data && !send_expect_100) {
|
||||
/* 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
|
||||
* function will check http_code after we return. */
|
||||
|
@ -31,7 +31,7 @@
|
||||
|
||||
#define LIBAVFORMAT_VERSION_MAJOR 55
|
||||
#define LIBAVFORMAT_VERSION_MINOR 19
|
||||
#define LIBAVFORMAT_VERSION_MICRO 101
|
||||
#define LIBAVFORMAT_VERSION_MICRO 102
|
||||
|
||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
||||
LIBAVFORMAT_VERSION_MINOR, \
|
||||
|
Loading…
x
Reference in New Issue
Block a user