if (!conn->sniObject_.IsEmpty()) {
conn->sni_context_.Reset();
+ Local<Object> sni_obj = PersistentToLocal(env->isolate(),
+ conn->sniObject_);
+
Local<Value> arg = PersistentToLocal(env->isolate(), conn->servername_);
- Local<Value> ret = conn->MakeCallback(env->onselect_string(), 1, &arg);
+ Local<Value> ret = node::MakeCallback(env->isolate(),
+ sni_obj,
+ env->onselect_string(),
+ 1,
+ &arg);
// If ret is SecureContext
Local<FunctionTemplate> secure_context_constructor_template =
--- /dev/null
+'use strict';
+var common = require('../common');
+var assert = require('assert');
+
+if (!common.hasCrypto) {
+ console.log('1..0 # Skipped: missing crypto');
+ return;
+}
+var tls = require('tls');
+var net = require('net');
+
+var fs = require('fs');
+
+var success = false;
+
+function filenamePEM(n) {
+ return require('path').join(common.fixturesDir, 'keys', n + '.pem');
+}
+
+function loadPEM(n) {
+ return fs.readFileSync(filenamePEM(n));
+}
+
+var server = net.Server(function(raw) {
+ var pair = tls.createSecurePair(null, true, false, false);
+ pair.on('error', function() {});
+ pair.ssl.setSNICallback(function() {
+ raw.destroy();
+ server.close();
+ success = true;
+ });
+ require('_tls_legacy').pipe(pair, raw);
+}).listen(common.PORT, function() {
+ tls.connect({
+ port: common.PORT,
+ rejectUnauthorized: false,
+ servername: 'server'
+ }, function() {
+ }).on('error', function() {
+ // Just ignore
+ });
+});
+process.on('exit', function() {
+ assert(success);
+});