refactor: refine code

This commit is contained in:
avwo
2022-05-29 18:34:47 +08:00
parent 6232478f68
commit ff396b38ed
3 changed files with 27 additions and 10 deletions
+23 -9
View File
@@ -34,6 +34,7 @@ var tunnelTmplData = new LRU({ max: 3000, maxAge: 30000 });
var TIMEOUT = 6000;
var CONN_TIMEOUT = 60000;
var X_RE = /^x/;
var PROTO_SEP_RE = /,\s*/;
var proxy, server;
function handleWebsocket(socket, clientIp, clientPort) {
@@ -49,11 +50,22 @@ function handleWebsocket(socket, clientIp, clientPort) {
pluginMgr.resolvePipePlugin(socket, function () {
socket.rules = rules.initRules(socket);
rules.resolveRulesFile(socket, function () {
socket.isWebSocket = util.isWebSocket(socket.headers) || socket.enable.websocket;
resolveWebsocket(socket, wss);
});
});
}
function getTransProto(str) {
if (!str || typeof str !== 'string') {
return;
}
if (str.indexOf(',') === -1) {
return str;
}
return str.trim().split(PROTO_SEP_RE)[0];
}
function resolveWebsocket(socket, wss) {
var headers = socket.headers;
var reqEmitter = new EventEmitter();
@@ -112,16 +124,18 @@ function resolveWebsocket(socket, wss) {
var isSuccess = status == 101;
if (isSuccess) {
statusMsg = 'HTTP/1.1 101 Switching Protocols';
var protocol = (headers['sec-websocket-protocol'] || '').split(/, */);
var key =
headers['sec-websocket-key'] + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
key = crypto.createHash('sha1').update(key, 'binary').digest('base64');
resHeaders['Sec-WebSocket-Accept'] = key;
resHeaders.Upgrade = 'websocket';
resHeaders.Connection = 'Upgrade';
if (protocol[0]) {
resHeaders['Sec-WebSocket-Protocol'] = protocol[0];
var key = headers['sec-websocket-key'];
var protocol = getTransProto(headers['sec-websocket-protocol']);
var upgrade = getTransProto(headers.upgrade);
if (key) {
key += '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
resHeaders['Sec-WebSocket-Accept'] = crypto.createHash('sha1').update(key, 'binary').digest('base64');
}
if (protocol) {
resHeaders['Sec-WebSocket-Protocol'] = protocol;
}
resHeaders.Upgrade = upgrade || 'websocket';
resHeaders.Connection = 'Upgrade';
reqSocket = util.getEmptyRes();
reqSocket.headers = resHeaders;
socketMgr.handleUpgrade(socket, reqSocket);