WIP v0.20.x: add onconnection handler
This commit is contained in:
parent
78407f2a3e
commit
bd8d32d8ec
|
@ -243,6 +243,23 @@ function _connect(state) {
|
||||||
|
|
||||||
var connCallback;
|
var connCallback;
|
||||||
|
|
||||||
|
function hyperPeek(tun) {
|
||||||
|
var m;
|
||||||
|
var str;
|
||||||
|
if (tun.data) {
|
||||||
|
if ('http' === tun.service) {
|
||||||
|
str = tun.data.toString();
|
||||||
|
m = str.match(/(?:^|[\r\n])Host: ([^\r\n]+)[\r\n]*/im);
|
||||||
|
tun._name = tun._hostname = (m && m[1].toLowerCase() || '').split(':')[0];
|
||||||
|
}
|
||||||
|
else if ('https' === tun.service || 'tls' === tun.service) {
|
||||||
|
tun._name = tun._servername = sni(tun.data);
|
||||||
|
} else {
|
||||||
|
tun._name = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var packerHandlers = {
|
var packerHandlers = {
|
||||||
oncontrol: function (opts) {
|
oncontrol: function (opts) {
|
||||||
var cmd, err;
|
var cmd, err;
|
||||||
|
@ -305,24 +322,14 @@ function _connect(state) {
|
||||||
wsHandlers.sendMessage(Packer.packHeader(null, [-cmd[0], err], 'control', packBody));
|
wsHandlers.sendMessage(Packer.packHeader(null, [-cmd[0], err], 'control', packBody));
|
||||||
}
|
}
|
||||||
|
|
||||||
, onmessage: function (tun) {
|
, onconnection: function (tun) {
|
||||||
var cid = tun._id = Packer.addrToId(tun);
|
var cid = tun._id = Packer.addrToId(tun);
|
||||||
var str;
|
|
||||||
var m;
|
|
||||||
|
|
||||||
if ('http' === tun.service) {
|
// this data should have been gathered already as part of the proxy protocol
|
||||||
str = tun.data.toString();
|
// but if it's available again here we can double check
|
||||||
m = str.match(/(?:^|[\r\n])Host: ([^\r\n]+)[\r\n]*/im);
|
hyperPeek(tun);
|
||||||
tun._name = tun._hostname = (m && m[1].toLowerCase() || '').split(':')[0];
|
|
||||||
}
|
|
||||||
else if ('https' === tun.service || 'tls' === tun.service) {
|
|
||||||
tun._name = tun._servername = sni(tun.data);
|
|
||||||
} else {
|
|
||||||
tun._name = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (clientHandlers.write(cid, tun)) { return; }
|
|
||||||
|
|
||||||
|
// TODO use readable streams instead
|
||||||
wstunneler.pause();
|
wstunneler.pause();
|
||||||
require(state.sortingHat).assign(state, tun, function (err, conn) {
|
require(state.sortingHat).assign(state, tun, function (err, conn) {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
@ -336,6 +343,18 @@ function _connect(state) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
, onmessage: function (tun) {
|
||||||
|
var cid = tun._id = Packer.addrToId(tun);
|
||||||
|
var handled;
|
||||||
|
|
||||||
|
hyperPeek(tun);
|
||||||
|
|
||||||
|
handled = clientHandlers.write(cid, tun);
|
||||||
|
|
||||||
|
// quasi backwards compat
|
||||||
|
if (!handled) { clientHandlers.onconnection(tun); }
|
||||||
|
}
|
||||||
|
|
||||||
, onpause: function (opts) {
|
, onpause: function (opts) {
|
||||||
var cid = Packer.addrToId(opts);
|
var cid = Packer.addrToId(opts);
|
||||||
if (localclients[cid]) {
|
if (localclients[cid]) {
|
||||||
|
|
Loading…
Reference in New Issue