CityBEM-CityLayers-SaeedRay.../node_modules/global-tunnel-ng/lib/agents.js

53 lines
1.4 KiB
JavaScript

/* jshint node:true */
'use strict';
var util = require('util');
var http = require('http');
var HttpAgent = http.Agent;
var https = require('https');
var HttpsAgent = https.Agent;
var pick = require('lodash/pick');
/**
* Proxy some traffic over HTTP.
*/
function OuterHttpAgent(opts) {
HttpAgent.call(this, opts);
mixinProxying(this, opts.proxy);
}
util.inherits(OuterHttpAgent, HttpAgent);
exports.OuterHttpAgent = OuterHttpAgent;
/**
* Proxy some traffic over HTTPS.
*/
function OuterHttpsAgent(opts) {
HttpsAgent.call(this, opts);
mixinProxying(this, opts.proxy);
}
util.inherits(OuterHttpsAgent, HttpsAgent);
exports.OuterHttpsAgent = OuterHttpsAgent;
/**
* Override createConnection and addRequest methods on the supplied agent.
* http.Agent and https.Agent will set up createConnection in the constructor.
*/
function mixinProxying(agent, proxyOpts) {
agent.proxy = proxyOpts;
var orig = pick(agent, 'createConnection', 'addRequest');
// Make the tcp or tls connection go to the proxy, ignoring the
// destination host:port arguments.
agent.createConnection = function(port, host, options) {
return orig.createConnection.call(this, this.proxy.port, this.proxy.host, options);
};
agent.addRequest = function(req, options) {
req.path =
this.proxy.innerProtocol + '//' + options.host + ':' + options.port + req.path;
return orig.addRequest.call(this, req, options);
};
}