tls: fix setting NPN protocols

The NPN protocols was set on `require('tls')` or `global` object instead
of being a local property. This fact lead to strange persistence of NPN
protocols, and sometimes incorrect protocol selection (when no NPN
protocols were passed in client options).

fix #6168
This commit is contained in:
Fedor Indutny 2013-09-09 18:18:05 +04:00
Родитель 3546825b14
Коммит 1c3863abfd
2 изменённых файлов: 15 добавлений и 4 удалений

Просмотреть файл

@ -1321,12 +1321,13 @@ exports.connect = function(/* [port, host], options, cb */) {
var sslcontext = crypto.createCredentials(options);
convertNPNProtocols(options.NPNProtocols, this);
var NPN = {};
convertNPNProtocols(options.NPNProtocols, NPN);
var hostname = options.servername || options.host || 'localhost',
pair = new SecurePair(sslcontext, false, true,
options.rejectUnauthorized === true ? true : false,
{
NPNProtocols: this.NPNProtocols,
NPNProtocols: NPN.NPNProtocols,
servername: hostname,
cleartext: options.cleartext,
encrypted: options.encrypted

Просмотреть файл

@ -61,6 +61,12 @@ var clientsOptions = [{
crl: serverOptions.crl,
NPNProtocols: ['c', 'b', 'e'],
rejectUnauthorized: false
},{
port: serverPort,
key: serverOptions.key,
cert: serverOptions.cert,
crl: serverOptions.crl,
rejectUnauthorized: false
},{
port: serverPort,
key: serverOptions.key,
@ -91,7 +97,9 @@ function startTest() {
connectClient(clientsOptions[0], function() {
connectClient(clientsOptions[1], function() {
connectClient(clientsOptions[2], function() {
server.close();
connectClient(clientsOptions[3], function() {
server.close();
});
});
});
});
@ -100,6 +108,8 @@ function startTest() {
process.on('exit', function() {
assert.equal(serverResults[0], clientsResults[0]);
assert.equal(serverResults[1], clientsResults[1]);
assert.equal(serverResults[2], 'first-priority-unsupported');
assert.equal(serverResults[2], 'http/1.1');
assert.equal(clientsResults[2], false);
assert.equal(serverResults[3], 'first-priority-unsupported');
assert.equal(clientsResults[3], false);
});