Skip to content

Commit

Permalink
squash: implement feedback from @BridgeAR
Browse files Browse the repository at this point in the history
  • Loading branch information
apapirovski committed Sep 25, 2017
1 parent b2bcfd9 commit d53bb6a
Showing 1 changed file with 36 additions and 53 deletions.
89 changes: 36 additions & 53 deletions lib/_tls_wrap.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,8 @@ function onhandshakestart() {
}
}

function emitSessionAttackError(self) {
self._emitTLSError(new errors.Error('ERR_TLS_SESSION_ATTACK'));
function emitSessionAttackError(socket) {
socket._emitTLSError(new errors.Error('ERR_TLS_SESSION_ATTACK'));
}

function onhandshakedone() {
Expand All @@ -100,121 +100,105 @@ function loadSession(hello) {
var once = false;
function onSession(err, session) {
if (once)
return loadSessionDone(new errors.Error('ERR_MULTIPLE_CALLBACK'), owner);
return owner.destroy(new errors.Error('ERR_MULTIPLE_CALLBACK'));
once = true;

if (err)
return loadSessionDone(err, owner);
return owner.destroy(err);

if (owner._handle === null)
return loadSessionDone(new errors.Error('ERR_SOCKET_CLOSED'), owner);
return owner.destroy(new errors.Error('ERR_SOCKET_CLOSED'));

owner._handle.loadSession(session);
loadSessionDone(null, owner);
owner._handle.endParser();
}

if (hello.sessionId.length <= 0 ||
hello.tlsTicket ||
owner.server &&
!owner.server.emit('resumeSession', hello.sessionId, onSession)) {
loadSessionDone(null, owner);
owner._handle.endParser();
}
}

function loadSessionDone(err, self) {
if (err !== null)
return self.destroy(err);

self._handle.endParser();
}


function loadSNI(info) {
const owner = this.owner;
const servername = info.servername;
if (!servername || !owner._SNICallback)
return requestOCSP(null, owner, info);
return requestOCSP(owner, info);

let once = false;
owner._SNICallback(servername, (err, context) => {
if (once)
return requestOCSP(new errors.Error('ERR_MULTIPLE_CALLBACK'), owner);
return owner.destroy(new errors.Error('ERR_MULTIPLE_CALLBACK'));
once = true;

if (err)
return requestOCSP(err, owner);
return owner.destroy(err);

if (owner._handle === null)
return requestOCSP(new errors.Error('ERR_SOCKET_CLOSED'), owner);
return owner.destroy(new errors.Error('ERR_SOCKET_CLOSED'));

// TODO(indutny): eventually disallow raw `SecureContext`
if (context)
owner._handle.sni_context = context.context || context;

requestOCSP(null, owner, info);
requestOCSP(owner, info);
});
}


function requestOCSP(err, self, hello) {
if (err !== null)
return self.destroy(err);
function requestOCSP(socket, info) {
if (!info.OCSPRequest || !socket.server)
return requestOCSPDone(socket);

if (!hello.OCSPRequest || !self.server)
return requestOCSPDone(null, self);

let ctx = self._handle.sni_context;
let ctx = socket._handle.sni_context;

if (!ctx)
ctx = self.server._sharedCreds;
ctx = socket.server._sharedCreds;

// TLS socket is using a `net.Server` instead of a tls.TLSServer.
// Some TLS properties like `server._sharedCreds` will not be present
if (!ctx)
return requestOCSPDone(null, self);
return requestOCSPDone(socket);

// TODO(indutny): eventually disallow raw `SecureContext`
if (ctx.context)
ctx = ctx.context;

if (self.server.listenerCount('OCSPRequest') === 0) {
return requestOCSPDone(null, self);
if (socket.server.listenerCount('OCSPRequest') === 0) {
return requestOCSPDone(socket);
}

let once = false;
const onOCSP = (err, response) => {
if (once)
return requestOCSPDone(new errors.Error('ERR_MULTIPLE_CALLBACK'), self);
return socket.destroy(new errors.Error('ERR_MULTIPLE_CALLBACK'));
once = true;

if (err)
return requestOCSPDone(err, self);
return socket.destroy(err);

if (self._handle === null)
return requestOCSPDone(new errors.Error('ERR_SOCKET_CLOSED'), self);
if (socket._handle === null)
return socket.destroy(new errors.Error('ERR_SOCKET_CLOSED'));

if (response)
self._handle.setOCSPResponse(response);
requestOCSPDone(null, self);
socket._handle.setOCSPResponse(response);
requestOCSPDone(socket);
};

self.server.emit('OCSPRequest',
ctx.getCertificate(),
ctx.getIssuer(),
onOCSP);
socket.server.emit('OCSPRequest',
ctx.getCertificate(),
ctx.getIssuer(),
onOCSP);
}

function requestOCSPDone(err, self) {
if (err !== null)
return self.destroy(err);

if (self._handle === null)
return self.destroy(new errors.Error('ERR_SOCKET_CLOSED'));

function requestOCSPDone(socket) {
try {
self._handle.certCbDone();
socket._handle.certCbDone();
} catch (e) {
self.destroy(e);
socket.destroy(e);
}
}

Expand Down Expand Up @@ -980,17 +964,16 @@ Server.prototype.addContext = function(servername, context) {

function SNICallback(servername, callback) {
const contexts = this.server._contexts;
var ctx;

for (var i = 0; i < contexts.length; i++) {
const elem = contexts[i];
if (elem[0].test(servername)) {
ctx = elem[1];
break;
callback(null, elem[1]);
return;
}
}

callback(null, ctx);
callback(null, undefined);
}


Expand Down

0 comments on commit d53bb6a

Please sign in to comment.