Index: sdk/lib/io/http_impl.dart |
diff --git a/sdk/lib/io/http_impl.dart b/sdk/lib/io/http_impl.dart |
index 1f794570966bd9fc7259047a629568abcc8b79e3..c1272d3e12a7bb28d34e22eef687cb07e2ed1b25 100644 |
--- a/sdk/lib/io/http_impl.dart |
+++ b/sdk/lib/io/http_impl.dart |
@@ -1258,6 +1258,56 @@ class _HttpClient implements HttpClient { |
_credentials.removeAt(index); |
} |
} |
+ |
+ static String _findProxyFromEnvironment(Uri url, |
+ Map<String, String> environment) { |
+ checkNoProxy(String option) { |
+ if (option == null) return null; |
+ Iterator<String> names = option.split(",").map((s) => s.trim()).iterator; |
+ while (names.moveNext()) { |
+ if (url.domain.endsWith(names.current)) { |
+ return "DIRECT"; |
+ } |
+ } |
+ return null; |
+ } |
+ |
+ checkProxy(String option) { |
+ if (option == null) return null; |
+ int pos = option.indexOf("://"); |
+ if (pos >= 0) { |
+ option = option.substring(pos + 3); |
+ } |
+ if (option.indexOf(":") == -1) option = "$option:1080"; |
+ return "PROXY $option"; |
+ } |
+ |
+ // Default to using the process current environment. |
+ if (environment == null) environment = Platform.environment; |
+ |
+ String proxyCfg; |
+ |
+ String noProxy = environment["no_proxy"]; |
+ if (noProxy == null) noProxy = environment["NO_PROXY"]; |
+ if ((proxyCfg = checkNoProxy(noProxy)) != null) { |
+ return proxyCfg; |
+ } |
+ |
+ if (url.scheme == "http") { |
+ String proxy = environment["http_proxy"]; |
+ if (proxy == null) proxy = environment["HTTP_PROXY"]; |
+ if ((proxyCfg = checkProxy(proxy)) != null) { |
+ return proxyCfg; |
+ } |
+ } else if (url.scheme == "https") { |
+ String proxy = environment["https_proxy"]; |
+ if (proxy == null) proxy = environment["HTTPS_PROXY"]; |
+ if ((proxyCfg = checkProxy(proxy)) != null) { |
+ return proxyCfg; |
+ } |
+ } |
+ return "DIRECT"; |
+ } |
} |