提交 b584049a 编写于 作者: C Christof Marti

Fall back to original proxy (#68531)

上级 03f9b487
......@@ -31,14 +31,14 @@ export function connectProxyResolver(
extHostLogService: ExtHostLogService,
mainThreadTelemetry: MainThreadTelemetryShape
) {
const agents = createProxyAgents(extHostWorkspace, configProvider, extHostLogService, mainThreadTelemetry);
const lookup = createPatchedModules(configProvider, agents);
const resolveProxy = setupProxyResolution(extHostWorkspace, configProvider, extHostLogService, mainThreadTelemetry);
const lookup = createPatchedModules(configProvider, resolveProxy);
return configureModuleLoading(extensionService, lookup);
}
const maxCacheEntries = 5000; // Cache can grow twice that much due to 'oldCache'.
function createProxyAgents(
function setupProxyResolution(
extHostWorkspace: ExtHostWorkspaceProvider,
configProvider: ExtHostConfigProvider,
extHostLogService: ExtHostLogService,
......@@ -168,11 +168,7 @@ function createProxyAgents(
});
}
const httpAgent: http.Agent = new ProxyAgent({ resolveProxy });
(<any>httpAgent).defaultPort = 80;
const httpsAgent: http.Agent = new ProxyAgent({ resolveProxy });
(<any>httpsAgent).defaultPort = 443;
return { http: httpAgent, https: httpsAgent };
return resolveProxy;
}
function collectResult(results: ConnectionResult[], resolveProxy: string, connection: string, req: http.ClientRequest) {
......@@ -218,7 +214,7 @@ function proxyFromConfigURL(configURL: string) {
return undefined;
}
function createPatchedModules(configProvider: ExtHostConfigProvider, agents: { http: http.Agent; https: http.Agent; }) {
function createPatchedModules(configProvider: ExtHostConfigProvider, resolveProxy: ReturnType<typeof setupProxyResolution>) {
const setting = {
config: configProvider.getConfiguration('http')
.get<string>('proxySupport') || 'off'
......@@ -230,23 +226,23 @@ function createPatchedModules(configProvider: ExtHostConfigProvider, agents: { h
return {
http: {
off: assign({}, http, patches(http, agents.http, agents.https, { config: 'off' }, true)),
on: assign({}, http, patches(http, agents.http, agents.https, { config: 'on' }, true)),
override: assign({}, http, patches(http, agents.http, agents.https, { config: 'override' }, true)),
onRequest: assign({}, http, patches(http, agents.http, agents.https, setting, true)),
default: assign(http, patches(http, agents.http, agents.https, setting, false)) // run last
off: assign({}, http, patches(http, resolveProxy, { config: 'off' }, true)),
on: assign({}, http, patches(http, resolveProxy, { config: 'on' }, true)),
override: assign({}, http, patches(http, resolveProxy, { config: 'override' }, true)),
onRequest: assign({}, http, patches(http, resolveProxy, setting, true)),
default: assign(http, patches(http, resolveProxy, setting, false)) // run last
},
https: {
off: assign({}, https, patches(https, agents.https, agents.http, { config: 'off' }, true)),
on: assign({}, https, patches(https, agents.https, agents.http, { config: 'on' }, true)),
override: assign({}, https, patches(https, agents.https, agents.http, { config: 'override' }, true)),
onRequest: assign({}, https, patches(https, agents.https, agents.http, setting, true)),
default: assign(https, patches(https, agents.https, agents.http, setting, false)) // run last
off: assign({}, https, patches(https, resolveProxy, { config: 'off' }, true)),
on: assign({}, https, patches(https, resolveProxy, { config: 'on' }, true)),
override: assign({}, https, patches(https, resolveProxy, { config: 'override' }, true)),
onRequest: assign({}, https, patches(https, resolveProxy, setting, true)),
default: assign(https, patches(https, resolveProxy, setting, false)) // run last
}
};
}
function patches(originals: typeof http | typeof https, agent: http.Agent, otherAgent: http.Agent, setting: { config: string; }, onRequest: boolean) {
function patches(originals: typeof http | typeof https, resolveProxy: ReturnType<typeof setupProxyResolution>, setting: { config: string; }, onRequest: boolean) {
return {
get: patch(originals.get),
request: patch(originals.request)
......@@ -270,7 +266,7 @@ function patches(originals: typeof http | typeof https, agent: http.Agent, other
return original.apply(null, arguments as unknown as any[]);
}
if (!options.socketPath && (config === 'override' || config === 'on' && !options.agent) && options.agent !== agent && options.agent !== otherAgent) {
if (!options.socketPath && (config === 'override' || config === 'on' && !options.agent) && !(options.agent instanceof ProxyAgent)) {
if (url) {
const parsed = typeof url === 'string' ? new nodeurl.URL(url) : url;
const urlOptions = {
......@@ -286,7 +282,11 @@ function patches(originals: typeof http | typeof https, agent: http.Agent, other
} else {
options = { ...options };
}
options.agent = agent;
options.agent = new ProxyAgent({
resolveProxy,
defaultPort: originals === https ? 443 : 80,
originalAgent: options.agent
});
return original(options, callback);
}
......
......@@ -9408,10 +9408,10 @@ vscode-nsfw@1.1.1:
lodash.isundefined "^3.0.1"
nan "^2.10.0"
vscode-proxy-agent@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/vscode-proxy-agent/-/vscode-proxy-agent-0.3.0.tgz#b5c8bea5046761966e1fa71f89d9cef11c457894"
integrity sha512-R6qz8Sc0ocNfeFPOp3k6QLP/Y8HzK1yqXwfgB1f0GakVzUGMDmniRe8RLxIiCAqlxGaWMn2yqpTSNUYZ1obPsQ==
vscode-proxy-agent@0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/vscode-proxy-agent/-/vscode-proxy-agent-0.4.0.tgz#574833e65405c6333f350f1b9fef9909deccb6b5"
integrity sha512-L+WKjDOXRPxpq31Uj1Wr3++jaNNmhykn8JnGoYcwepbTnUwJKCbyyXRgb/hlBx0LXsF+k3BsnXt+r+5Q8rm97g==
dependencies:
debug "3.1.0"
http-proxy-agent "2.1.0"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册