diff options
author | Martin Storsjö <martin@martin.st> | 2013-02-27 11:13:47 +0200 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2013-02-27 21:32:13 +0200 |
commit | de9cd1b173bab185e97995db09d40318378ab9ed (patch) | |
tree | cd251db979552b30873019bf8b3aec79da374b33 /libavformat/http.c | |
parent | e2c272eb3660d7f4f1d7720980e30f6a617e7eb3 (diff) | |
download | ffmpeg-de9cd1b173bab185e97995db09d40318378ab9ed.tar.gz |
lavf: Handle the environment variable no_proxy more properly
The handling of the environment variable no_proxy, present since
one of the initial commits (de6d9b6404), is inconsistent with
how many other applications and libraries interpret this
variable. Its bare presence does not indicate that the use of
proxies should be skipped, but it is some sort of pattern for
hosts that does not need using a proxy (e.g. for a local network).
As investigated by Rudolf Polzer, different libraries handle this
in different ways, some supporting IP address masks, some supporting
arbitrary globbing using *, some just checking that the pattern matches
the end of the hostname without regard for whether it actually is
the right domain or a domain that ends in the same string.
This simple logic should be pretty similar to the logic used by
lynx and curl.
Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavformat/http.c')
-rw-r--r-- | libavformat/http.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/libavformat/http.c b/libavformat/http.c index 9666ca3206..9645bd1ffb 100644 --- a/libavformat/http.c +++ b/libavformat/http.c @@ -106,10 +106,6 @@ static int http_open_cnx(URLContext *h) HTTPAuthType cur_auth_type, cur_proxy_auth_type; HTTPContext *s = h->priv_data; - proxy_path = getenv("http_proxy"); - use_proxy = (proxy_path != NULL) && !getenv("no_proxy") && - av_strstart(proxy_path, "http://", NULL); - /* fill the dest addr */ redo: /* needed in any case to build the host string */ @@ -118,6 +114,10 @@ static int http_open_cnx(URLContext *h) path1, sizeof(path1), s->location); ff_url_join(hoststr, sizeof(hoststr), NULL, NULL, hostname, port, NULL); + proxy_path = getenv("http_proxy"); + use_proxy = !ff_http_match_no_proxy(getenv("no_proxy"), hostname) && + proxy_path != NULL && av_strstart(proxy_path, "http://", NULL); + if (!strcmp(proto, "https")) { lower_proto = "tls"; use_proxy = 0; |