|
|
@@ -103,7 +103,6 @@ static int http_open_cnx(URLContext *h) |
|
|
int port, use_proxy, err, location_changed = 0, redirects = 0, attempts = 0; |
|
|
int port, use_proxy, err, location_changed = 0, redirects = 0, attempts = 0; |
|
|
HTTPAuthType cur_auth_type, cur_proxy_auth_type; |
|
|
HTTPAuthType cur_auth_type, cur_proxy_auth_type; |
|
|
HTTPContext *s = h->priv_data; |
|
|
HTTPContext *s = h->priv_data; |
|
|
URLContext *hd = NULL; |
|
|
|
|
|
|
|
|
|
|
|
proxy_path = getenv("http_proxy"); |
|
|
proxy_path = getenv("http_proxy"); |
|
|
use_proxy = (proxy_path != NULL) && !getenv("no_proxy") && |
|
|
use_proxy = (proxy_path != NULL) && !getenv("no_proxy") && |
|
|
@@ -144,12 +143,10 @@ static int http_open_cnx(URLContext *h) |
|
|
ff_url_join(buf, sizeof(buf), lower_proto, NULL, hostname, port, NULL); |
|
|
ff_url_join(buf, sizeof(buf), lower_proto, NULL, hostname, port, NULL); |
|
|
|
|
|
|
|
|
if (!s->hd) { |
|
|
if (!s->hd) { |
|
|
err = ffurl_open(&hd, buf, AVIO_FLAG_READ_WRITE, |
|
|
|
|
|
|
|
|
err = ffurl_open(&s->hd, buf, AVIO_FLAG_READ_WRITE, |
|
|
&h->interrupt_callback, NULL); |
|
|
&h->interrupt_callback, NULL); |
|
|
if (err < 0) |
|
|
if (err < 0) |
|
|
goto fail; |
|
|
goto fail; |
|
|
|
|
|
|
|
|
s->hd = hd; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
cur_auth_type = s->auth_state.auth_type; |
|
|
cur_auth_type = s->auth_state.auth_type; |
|
|
@@ -160,8 +157,8 @@ static int http_open_cnx(URLContext *h) |
|
|
if (s->http_code == 401) { |
|
|
if (s->http_code == 401) { |
|
|
if ((cur_auth_type == HTTP_AUTH_NONE || s->auth_state.stale) && |
|
|
if ((cur_auth_type == HTTP_AUTH_NONE || s->auth_state.stale) && |
|
|
s->auth_state.auth_type != HTTP_AUTH_NONE && attempts < 4) { |
|
|
s->auth_state.auth_type != HTTP_AUTH_NONE && attempts < 4) { |
|
|
ffurl_close(hd); |
|
|
|
|
|
s->hd = hd = NULL; |
|
|
|
|
|
|
|
|
ffurl_close(s->hd); |
|
|
|
|
|
s->hd = NULL; |
|
|
goto redo; |
|
|
goto redo; |
|
|
} else |
|
|
} else |
|
|
goto fail; |
|
|
goto fail; |
|
|
@@ -169,8 +166,8 @@ static int http_open_cnx(URLContext *h) |
|
|
if (s->http_code == 407) { |
|
|
if (s->http_code == 407) { |
|
|
if ((cur_proxy_auth_type == HTTP_AUTH_NONE || s->proxy_auth_state.stale) && |
|
|
if ((cur_proxy_auth_type == HTTP_AUTH_NONE || s->proxy_auth_state.stale) && |
|
|
s->proxy_auth_state.auth_type != HTTP_AUTH_NONE && attempts < 4) { |
|
|
s->proxy_auth_state.auth_type != HTTP_AUTH_NONE && attempts < 4) { |
|
|
ffurl_close(hd); |
|
|
|
|
|
s->hd = hd = NULL; |
|
|
|
|
|
|
|
|
ffurl_close(s->hd); |
|
|
|
|
|
s->hd = NULL; |
|
|
goto redo; |
|
|
goto redo; |
|
|
} else |
|
|
} else |
|
|
goto fail; |
|
|
goto fail; |
|
|
@@ -178,8 +175,8 @@ static int http_open_cnx(URLContext *h) |
|
|
if ((s->http_code == 301 || s->http_code == 302 || s->http_code == 303 || s->http_code == 307) |
|
|
if ((s->http_code == 301 || s->http_code == 302 || s->http_code == 303 || s->http_code == 307) |
|
|
&& location_changed == 1) { |
|
|
&& location_changed == 1) { |
|
|
/* url moved, get next */ |
|
|
/* url moved, get next */ |
|
|
ffurl_close(hd); |
|
|
|
|
|
s->hd = hd = NULL; |
|
|
|
|
|
|
|
|
ffurl_close(s->hd); |
|
|
|
|
|
s->hd = NULL; |
|
|
if (redirects++ >= MAX_REDIRECTS) |
|
|
if (redirects++ >= MAX_REDIRECTS) |
|
|
return AVERROR(EIO); |
|
|
return AVERROR(EIO); |
|
|
/* Restart the authentication process with the new target, which |
|
|
/* Restart the authentication process with the new target, which |
|
|
@@ -191,8 +188,8 @@ static int http_open_cnx(URLContext *h) |
|
|
} |
|
|
} |
|
|
return 0; |
|
|
return 0; |
|
|
fail: |
|
|
fail: |
|
|
if (hd) |
|
|
|
|
|
ffurl_close(hd); |
|
|
|
|
|
|
|
|
if (s->hd) |
|
|
|
|
|
ffurl_close(s->hd); |
|
|
s->hd = NULL; |
|
|
s->hd = NULL; |
|
|
return AVERROR(EIO); |
|
|
return AVERROR(EIO); |
|
|
} |
|
|
} |
|
|
|