Fix JavaScript SSL upgrade logic

I had accepted the pull request way back without proper test coverage.
I've added test coverage & fixed this long-standing bug.
This commit is contained in:
bmc 2013-06-29 23:20:48 -07:00
parent 53a772af49
commit 44784fa2f3

View File

@ -53,41 +53,30 @@ Connection.prototype.connect = function(port, host) {
self.emit('end');
});
if(this.ssl) {
this.stream.once('data', function(buffer) {
self.setBuffer(buffer);
var msg = self.readSslResponse();
self.emit('message', msg);
self.emit(msg.name, msg);
});
this.once('sslresponse', function(msg) {
if(msg.text == 0x53) {
var tls = require('tls');
self.stream.removeAllListeners();
self.stream = tls.connect({
socket: self.stream,
servername: host,
rejectUnauthorized: self.ssl.rejectUnauthorized,
ca: self.ssl.ca,
pfx: self.ssl.pfx,
key: self.ssl.key,
passphrase: self.ssl.passphrase,
cert: self.ssl.cert,
NPNProtocols: self.ssl.NPNProtocols
});
self.attachListeners(self.stream);
self.emit('sslconnect');
} else {
self.emit(
'error',
new Error("The server doesn't support SSL/TLS connections.")
);
}
});
} else {
this.attachListeners(this.stream);
if(!this.ssl) {
return this.attachListeners(this.stream);
}
this.stream.once('data', function(buffer) {
var responseCode = buffer.toString('utf8');
if(responseCode != 'S') {
return self.emit('error', new Error('The server does not support SSL connections'));
}
var tls = require('tls');
self.stream = tls.connect({
socket: self.stream,
servername: host,
rejectUnauthorized: self.ssl.rejectUnauthorized,
ca: self.ssl.ca,
pfx: self.ssl.pfx,
key: self.ssl.key,
passphrase: self.ssl.passphrase,
cert: self.ssl.cert,
NPNProtocols: self.ssl.NPNProtocols
});
self.attachListeners(self.stream);
self.emit('sslconnect');
});
};
Connection.prototype.attachListeners = function(stream) {