123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- var HttpAgent = require('http').Agent;
- var HttpsAgent = require('https').Agent;
- var inherits = require('util').inherits;
-
- var Client;
-
- [HttpAgent, HttpsAgent].forEach((ctor) => {
- function SSHAgent(connectCfg, agentOptions) {
- if (!(this instanceof SSHAgent))
- return new SSHAgent(connectCfg, agentOptions);
-
- ctor.call(this, agentOptions);
-
- this._connectCfg = connectCfg;
- this._defaultSrcIP = (agentOptions && agentOptions.srcIP) || 'localhost';
- }
- inherits(SSHAgent, ctor);
-
- SSHAgent.prototype.createConnection = createConnection;
-
- exports[ctor === HttpAgent ? 'SSHTTPAgent' : 'SSHTTPSAgent'] = SSHAgent;
- });
-
- function createConnection(options, cb) {
- var srcIP = (options && options.localAddress) || this._defaultSrcIP;
- var srcPort = (options && options.localPort) || 0;
- var dstIP = options.host;
- var dstPort = options.port;
-
- if (Client === undefined)
- Client = require('./client').Client;
-
- var client = new Client();
- var triedForward = false;
- client.on('ready', () => {
- client.forwardOut(srcIP, srcPort, dstIP, dstPort, (err, stream) => {
- triedForward = true;
- if (err) {
- client.end();
- return cb(err);
- }
- stream.once('close', () => {
- client.end();
- });
- cb(null, decorateStream(stream));
- });
- }).on('error', cb).on('close', () => {
- if (!triedForward)
- cb(new Error('Unexpected connection loss'));
- }).connect(this._connectCfg);
- }
-
- function noop() {}
-
- function decorateStream(stream) {
- stream.setKeepAlive = noop;
- stream.setNoDelay = noop;
- stream.setTimeout = noop;
- stream.ref = noop;
- stream.unref = noop;
- stream.destroySoon = stream.destroy;
- return stream;
- }
|