From 261c9e2995e34499c6da59dec95c38ea3d3c529e Mon Sep 17 00:00:00 2001 From: avwo Date: Fri, 17 Jul 2015 15:25:23 +0800 Subject: [PATCH] refactor --- lib/https/index.js | 92 +++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 45 deletions(-) diff --git a/lib/https/index.js b/lib/https/index.js index 9f99029b2..aa7e2193a 100644 --- a/lib/https/index.js +++ b/lib/https/index.js @@ -164,6 +164,53 @@ function handleWebsocket(socket, wss, callback) { } } +function handleTlsSocket(socket) { + var reqSocket; + function destroy() { + socket.destroy(); + reqSocket && reqSocket.destroy(); + } + + function abortIfUnavailable(socket) { + return socket.on('error', destroy) + .on('close', destroy); + } + + abortIfUnavailable(socket); + parseReq(socket, function(err, socket) { + if (err) { + return destroy(); + } + //wss + var clientIp = ports[socket.remotePort]; + var headers = socket.headers; + if (headers.upgrade && headers.upgrade.toLowerCase() == 'websocket') { + var reqEmitter = getRequestEmitter(socket, true); + reqEmitter.ip = clientIp; + app.emit('websocket', reqEmitter); + app.reqEmitter = reqEmitter; + handleWebsocket(socket, true, function(err, req) { + if (err) { + return destroy(); + } + reqSocket = req; + abortIfUnavailable(reqSocket); + }); + } else { + //https + reqSocket = net.connect(config.port, LOCALHOST, function() { + headers[util.HTTPS_FIELD] = 1; + headers[util.CLIENT_IP_HEAD] = clientIp; + reqSocket.write(socket.getBuffer(headers)); + socket.pipe(reqSocket).pipe(socket); + }); + abortIfUnavailable(reqSocket); + } + }, true); + + +} + module.exports = function dispatch(socket, hostname, _app) { app = _app; config = app.config; @@ -224,50 +271,5 @@ module.exports = function dispatch(socket, hostname, _app) { }; -function handleTlsSocket(socket) { - var reqSocket; - function destroy() { - socket.destroy(); - reqSocket && reqSocket.destroy(); - } - - function abortIfUnavailable(socket) { - return socket.on('error', destroy) - .on('close', destroy); - } - - abortIfUnavailable(socket); - parseReq(socket, function(err, socket) { - if (err) { - return destroy(); - } - //wss - var clientIp = ports[socket.remotePort]; - var headers = socket.headers; - if (headers.upgrade && headers.upgrade.toLowerCase() == 'websocket') { - var reqEmitter = getRequestEmitter(socket, true); - reqEmitter.ip = clientIp; - app.emit('websocket', reqEmitter); - app.reqEmitter = reqEmitter; - handleWebsocket(socket, true, function(err, req) { - if (err) { - return destroy(); - } - reqSocket = req; - abortIfUnavailable(reqSocket); - }); - } else { - //https - reqSocket = net.connect(config.port, LOCALHOST, function() { - headers[util.HTTPS_FIELD] = 1; - headers[util.CLIENT_IP_HEAD] = clientIp; - reqSocket.write(socket.getBuffer(headers)); - socket.pipe(reqSocket).pipe(socket); - }); - abortIfUnavailable(reqSocket); - } - }, true); - -}