2
0
mirror of https://git.coolaj86.com/coolaj86/proxy-packer.js.git synced 2025-03-14 04:10:45 +00:00

add connection event and packHeader function

This commit is contained in:
AJ ONeal 2018-08-07 01:26:59 -06:00
parent 178bd67375
commit 2e4e73e48b

View File

@ -4,6 +4,7 @@ var Packer = module.exports;
var serviceEvents = { var serviceEvents = {
default: 'tunnelData' default: 'tunnelData'
, connection: 'tunnelConnection'
, control: 'tunnelControl' , control: 'tunnelControl'
, error: 'tunnelError' , error: 'tunnelError'
, end: 'tunnelEnd' , end: 'tunnelEnd'
@ -12,6 +13,7 @@ var serviceEvents = {
}; };
var serviceFuncs = { var serviceFuncs = {
default: 'onmessage' default: 'onmessage'
, connection: 'onconnection'
, control: 'oncontrol' , control: 'oncontrol'
, error: 'onerror' , error: 'onerror'
, end: 'onend' , end: 'onend'
@ -30,6 +32,7 @@ Packer.create = function (opts) {
machine.onmessage = opts.onmessage || opts.onMessage; machine.onmessage = opts.onmessage || opts.onMessage;
machine.oncontrol = opts.oncontrol || opts.onControl; machine.oncontrol = opts.oncontrol || opts.onControl;
machine.onconnection = opts.onconnection || opts.onConnection || function () {};
machine.onerror = opts.onerror || opts.onError; machine.onerror = opts.onerror || opts.onError;
machine.onend = opts.onend || opts.onEnd; machine.onend = opts.onend || opts.onEnd;
machine.onpause = opts.onpause || opts.onPause; machine.onpause = opts.onpause || opts.onPause;
@ -43,8 +46,9 @@ Packer.create = function (opts) {
machine.bufIndex = 0; machine.bufIndex = 0;
machine.fns.collectData = function (chunk, size) { machine.fns.collectData = function (chunk, size) {
var chunkLeft = chunk.length - machine.chunkIndex; var chunkLeft = chunk.length - machine.chunkIndex;
var hasLen = (size > 0);
if (size <= 0) { if (!hasLen) {
return Buffer.alloc(0); return Buffer.alloc(0);
} }
@ -130,12 +134,17 @@ Packer.create = function (opts) {
machine.fns.data = function (chunk) { machine.fns.data = function (chunk) {
//console.log(''); //console.log('');
//console.log('[data]'); //console.log('[data]');
var data = machine.fns.collectData(chunk, machine.bodyLen); var data;
// The 'connection' event may not have a body
// Other events may not have a body either
if (machine.bodyLen) {
data = machine.fns.collectData(chunk, machine.bodyLen);
// We don't have the entire body yet so return false. // We don't have the entire body yet so return false.
if (!data) { if (!data) {
return false; return false;
} }
}
// //
// data, end, error // data, end, error
@ -186,12 +195,14 @@ Packer.create = function (opts) {
return machine; return machine;
}; };
Packer.pack = function (meta, data, service) { Packer.packHeader = function (meta, data, service, andBody, oldways) {
if (oldways) {
data = data || Buffer.from(' '); data = data || Buffer.from(' ');
if (!Buffer.isBuffer(data)) { }
if (data && !Buffer.isBuffer(data)) {
data = new Buffer(JSON.stringify(data)); data = new Buffer(JSON.stringify(data));
} }
if (!data.byteLength) { if (oldways && !data.byteLength) {
data = Buffer.from(' '); data = Buffer.from(' ');
} }
@ -199,26 +210,31 @@ Packer.pack = function (meta, data, service) {
meta.service = service; meta.service = service;
} }
var size = data && data.byteLength || 0;
var sizeReserve = andBody ? size : 0;
var version = 1; var version = 1;
var header; var header;
if (service === 'control') { if (service === 'control') {
header = Buffer.from(['', '', '', data.byteLength, service].join(',')); header = Buffer.from(['', '', '', size, service].join(','));
} }
else { else {
header = Buffer.from([ header = Buffer.from([
meta.family, meta.address, meta.port, data.byteLength, meta.family, meta.address, meta.port, size,
(meta.service || ''), (meta.serviceport || ''), (meta.name || '') (meta.service || ''), (meta.serviceport || ''), (meta.name || '')
].join(',')); ].join(','));
} }
var metaBuf = Buffer.from([ 255 - version, header.length ]); var metaBuf = Buffer.from([ 255 - version, header.length ]);
var buf = Buffer.alloc(metaBuf.byteLength + header.byteLength + data.byteLength); var buf = Buffer.alloc(metaBuf.byteLength + header.byteLength + sizeReserve);
metaBuf.copy(buf, 0); metaBuf.copy(buf, 0);
header.copy(buf, 2); header.copy(buf, 2);
data.copy(buf, 2 + header.byteLength); if (sizeReserve) { data.copy(buf, 2 + header.byteLength); }
return buf; return buf;
}; };
Packer.pack = function (meta, data, service) {
return Packer.packHeader(meta, data, service, true, true);
};
function extractSocketProps(socket, propNames) { function extractSocketProps(socket, propNames) {
var props = {}; var props = {};