summaryrefslogtreecommitdiff
path: root/libavformat/tls.c
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2013-02-27 11:13:47 +0200
committerMartin Storsjö <martin@martin.st>2013-02-27 21:32:13 +0200
commitde9cd1b173bab185e97995db09d40318378ab9ed (patch)
treecd251db979552b30873019bf8b3aec79da374b33 /libavformat/tls.c
parente2c272eb3660d7f4f1d7720980e30f6a617e7eb3 (diff)
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/tls.c')
-rw-r--r--libavformat/tls.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/libavformat/tls.c b/libavformat/tls.c
index 866e55f2ba..fecf096b02 100644
--- a/libavformat/tls.c
+++ b/libavformat/tls.c
@@ -116,10 +116,6 @@ static int tls_open(URLContext *h, const char *uri, int flags)
ff_tls_init();
- proxy_path = getenv("http_proxy");
- use_proxy = (proxy_path != NULL) && !getenv("no_proxy") &&
- av_strstart(proxy_path, "http://", NULL);
-
av_url_split(NULL, 0, NULL, 0, host, sizeof(host), &port, NULL, 0, uri);
ff_url_join(buf, sizeof(buf), "tcp", NULL, host, port, NULL);
@@ -129,6 +125,10 @@ static int tls_open(URLContext *h, const char *uri, int flags)
freeaddrinfo(ai);
}
+ proxy_path = getenv("http_proxy");
+ use_proxy = !ff_http_match_no_proxy(getenv("no_proxy"), host) &&
+ proxy_path != NULL && av_strstart(proxy_path, "http://", NULL);
+
if (use_proxy) {
char proxy_host[200], proxy_auth[200], dest[200];
int proxy_port;