mirror of
https://github.com/avwo/whistle.git
synced 2026-10-28 14:07:30 +08:00
refactor
This commit is contained in:
+47
-45
@@ -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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user