feat: Support modify the headers of websocket

This commit is contained in:
avwo
2017-09-01 19:05:52 +08:00
parent 3102559864
commit 1119d72daa
+5 -11
View File
@@ -4,6 +4,7 @@ var url = require('url');
var socks = require('socksv5');
var EventEmitter = require('events').EventEmitter;
var util = require('../util');
var extend = require('util')._extend;
var config = require('../config');
var rules = require('../rules');
var pluginMgr = require('../plugins');
@@ -195,22 +196,15 @@ function handleWebsocket(socket, clientIp, clientPort, callback) {
//TODO: 暂时支持reqHeaders://(value),该头部设置主要给插件whistle.nohost
//TODO: whistle v2.0将全面支持对websocket的操作
var ruleKey;
var ruleValue;
var headersIsModified;
var reqHeaders = parseReqHeaders(_rules.reqHeaders);
if (reqHeaders) {
reqHeaders = util.lowerCaseify(reqHeaders);
ruleKey = reqHeaders['x-whistle-rule-key'];
if (ruleKey) {
headers['x-whistle-rule-key'] = ruleKey;
}
ruleValue = reqHeaders['x-whistle-rule-value'];
if (ruleValue) {
headers['x-whistle-rule-value'] = ruleValue;
}
extend(headers, reqHeaders);
headersIsModified = Object.keys(reqHeaders).length;
}
reqSocket.write(socket.getBuffer((isInternalProxy || ruleKey || ruleValue
reqSocket.write(socket.getBuffer((isInternalProxy || headersIsModified
|| plugin || matchedUrl || _rules.hostname) ? headers : null,
matchedUrl ? options.path : null));
var transform = util.getEventTransform(proxy, 'wsRequest', fullUrl);