This commit is contained in:
avwo
2015-07-17 15:25:23 +08:00
parent 96c4eece50
commit 261c9e2995
+47 -45
View File
@@ -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);
}