aboutsummaryrefslogtreecommitdiff
path: root/node_modules/agentkeepalive/lib/https_agent.js
blob: 36b32d663cd971574a72b0731b69d494ade7609c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/**
 * Https Agent base on custom http agent
 *
 * Copyright(c) node-modules and other contributors.
 * MIT Licensed
 *
 * Authors:
 *   fengmk2 <m@fengmk2.com> (http://fengmk2.com)
 */

'use strict';

/**
 * Module dependencies.
 */

var https = require('https');
var utils = require('./utils');
var HttpAgent = require('./agent');
var OriginalHttpsAgent = https.Agent;

var HttpsAgent;

if (utils.isNode10) {
  // node v0.10
  HttpsAgent = function HttpsAgent(options) {
    HttpAgent.call(this, options);
    this.defaultPort = 443;
    this.protocol = 'https:';
  };

  utils.inherits(HttpsAgent, HttpAgent);

  HttpsAgent.prototype.createConnection = https.globalAgent.createConnection;
  HttpsAgent.prototype.getName = function(options) {
    var name = HttpAgent.prototype.getName.call(this, options);

    name += ':';
    if (options.ca)
      name += options.ca;

    name += ':';
    if (options.cert)
      name += options.cert;

    name += ':';
    if (options.ciphers)
      name += options.ciphers;

    name += ':';
    if (options.key)
      name += options.key;

    name += ':';
    if (options.pfx)
      name += options.pfx;

    name += ':';
    if (options.rejectUnauthorized !== undefined)
      name += options.rejectUnauthorized;

    return name;
  };
} else {
  HttpsAgent = function HttpsAgent(options) {
    HttpAgent.call(this, options);
    this.defaultPort = 443;
    this.protocol = 'https:';
    this.maxCachedSessions = this.options.maxCachedSessions;
    if (this.maxCachedSessions === undefined)
      this.maxCachedSessions = 100;

    this._sessionCache = {
      map: {},
      list: []
    };
  };

  utils.inherits(HttpsAgent, HttpAgent);

  [
    'createConnection',
    'getName',
    '_getSession',
    '_cacheSession',
    // https://github.com/nodejs/node/pull/4982
    '_evictSession',
  ].forEach(function(method) {
    if (typeof OriginalHttpsAgent.prototype[method] === 'function') {
      HttpsAgent.prototype[method] = OriginalHttpsAgent.prototype[method];
    }
  });
}

module.exports = HttpsAgent;