if (err)
return cb(err);
+ if (!self._handle)
+ return cb(new Error('Socket is closed'));
+
// NOTE: That we have disabled OpenSSL's internal session storage in
// `node_crypto.cc` and hence its safe to rely on getting servername only
// from clienthello or this place.
if (err)
return cb(err);
+ if (!self._handle)
+ return cb(new Error('Socket is closed'));
+
// TODO(indutny): eventually disallow raw `SecureContext`
if (context)
self._handle.sni_context = context.context || context;
if (err)
return cb(err);
+ if (!self._handle)
+ return cb(new Error('Socket is closed'));
+
if (response)
self._handle.setOCSPResponse(response);
cb(null);
if (err)
return self.destroy(err);
+ if (!self._handle)
+ return cb(new Error('Socket is closed'));
+
self._handle.certCbDone();
});
});
return;
once = true;
+ if (!self._handle)
+ return cb(new Error('Socket is closed'));
+
self._handle.newSessionDone();
self._newSessionPending = false;
--- /dev/null
+'use strict';
+
+var common = require('../common');
+
+var assert = require('assert');
+var path = require('path');
+var fs = require('fs');
+var constants = require('constants');
+
+if (!common.hasCrypto) {
+ console.log('1..0 # Skipped: missing crypto');
+ process.exit();
+}
+
+var tls = require('tls');
+
+var options = {
+ secureOptions: constants.SSL_OP_NO_TICKET,
+ key: fs.readFileSync(path.join(common.fixturesDir, 'test_key.pem')),
+ cert: fs.readFileSync(path.join(common.fixturesDir, 'test_cert.pem'))
+};
+
+var server = tls.createServer(options, function(c) {
+});
+
+var sessionCb = null;
+var client = null;
+
+server.on('newSession', function(key, session, done) {
+ done();
+});
+
+server.on('resumeSession', function(id, cb) {
+ sessionCb = cb;
+
+ next();
+});
+
+server.listen(1443, function() {
+ var clientOpts = {
+ port: 1443,
+ rejectUnauthorized: false,
+ session: false
+ };
+
+ var s1 = tls.connect(clientOpts, function() {
+ clientOpts.session = s1.getSession();
+ console.log('1st secure');
+
+ s1.destroy();
+ var s2 = tls.connect(clientOpts, function(s) {
+ console.log('2nd secure');
+
+ s2.destroy();
+ }).on('connect', function() {
+ console.log('2nd connected');
+ client = s2;
+
+ next();
+ });
+ });
+});
+
+function next() {
+ if (!client || !sessionCb)
+ return;
+
+ client.destroy();
+ setTimeout(function() {
+ sessionCb();
+ server.close();
+ }, 100);
+}