Merge pull request #386 from brianc/js-ssl

Fix long-standing hanging SSL connection but with JavaScript
This commit is contained in:
Brian C 2013-07-01 12:43:54 -07:00
commit 58b4f266ea
2 changed files with 48 additions and 34 deletions

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) {

View File

@ -0,0 +1,25 @@
var helper = require(__dirname + '/../test-helper');
var pg = helper.pg;
var host = 'ec2-107-20-224-218.compute-1.amazonaws.com';
var database = 'db6kfntl5qhp2';
var user = 'kwdzdnqpdiilfs';
var port = 5432;
var config = {
host: host,
port: port,
database: database,
user: user,
password: 'uaZoSSHgi7mVM7kYaROtusClKu',
ssl: true
};
//connect & disconnect from heroku
pg.connect(config, assert.success(function(client, done) {
client.query('SELECT NOW() as time', assert.success(function(res) {
assert(res.rows[0].time.getTime());
done();
pg.end();
}))
}));