var tls = require('tls'); var http = require('http'); var inherits = require('util').inherits; var NPN_ENABLED = process.binding('constants').NPN_ENABLED; function Server(opts, requestListener){ if (!(this instanceof Server)) return new Server(opts, requestListener); if (NPN_ENABLED && !opts.NPNProtocols) { opts.NPNProtocols = ['http/1.1', 'http/1.0'] ; } tls.Server.call(this, opts, http._connectionListener); this.httpAllowHalfOpen = false ; if (requestListener) { this.addListener('request', requestListener); } } inherits(Server, tls.Server); exports.Server = Server; exports.createServer = function (opts, requestListener){ return new Server(opts, requestListener); } ; var agents = { } ; function Agent(options){ http.Agent.call(this, options); } inherits(Agent, http.Agent); Agent.prototype.defaultPort = 443; Agent.prototype._getConnection = function (options, cb){ if (NPN_ENABLED && !this.options.NPNProtocols) { this.options.NPNProtocols = ['http/1.1', 'http/1.0'] ; } var s = tls.connect(_AN_Read_port('port', options), _AN_Read_host('host', options), this.options, function (){ if (cb) cb(); } ); return s; } ; function getAgent(options){ if (!_AN_Read_port('port', options)) _AN_Write_port('port', options, false , 443); var id = _AN_Read_host('host', options) + ':' + _AN_Read_port('port', options); var agent = agents[id]; if (!agent) { agent = agents[id] = new Agent(options); } return agent; } exports.getAgent = getAgent; exports.Agent = Agent; exports.request = function (options, cb){ if (options.agent === undefined) { options.agent = getAgent(options); } else if (options.agent === false ) { options.agent = new Agent(options); } return http._requestFromAgent(options, cb); } ; exports.get = function (options, cb){ options.method = 'GET'; var req = exports.request(options, cb); req.end(); return req; } ;