more efficient (?) remotePort poker
This commit is contained in:
parent
7f3a5b4f04
commit
6ed367d3d7
50
index.js
50
index.js
|
@ -220,6 +220,48 @@ Packer.pack = function (meta, data, service) {
|
||||||
return buf;
|
return buf;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function extractSocketProps(socket, propNames) {
|
||||||
|
var props = {};
|
||||||
|
|
||||||
|
if (socket.remotePort) {
|
||||||
|
propNames.forEach(function (propName) {
|
||||||
|
props[propName] = socket[propName];
|
||||||
|
});
|
||||||
|
} else if (socket._remotePort) {
|
||||||
|
propNames.forEach(function (propName) {
|
||||||
|
props[propName] = socket['_' + propName];
|
||||||
|
});
|
||||||
|
} else if (
|
||||||
|
socket._handle
|
||||||
|
&& socket._handle._parent
|
||||||
|
&& socket._handle._parent.owner
|
||||||
|
&& socket._handle._parent.owner.stream
|
||||||
|
&& socket._handle._parent.owner.stream.remotePort
|
||||||
|
) {
|
||||||
|
propNames.forEach(function (propName) {
|
||||||
|
props[propName] = socket._handle._parent.owner.stream[propName];
|
||||||
|
});
|
||||||
|
} else if (
|
||||||
|
socket._handle._parentWrap
|
||||||
|
&& socket._handle._parentWrap
|
||||||
|
&& socket._handle._parentWrap.remotePort
|
||||||
|
) {
|
||||||
|
propNames.forEach(function (propName) {
|
||||||
|
props[propName] = socket._handle._parentWrap[propName];
|
||||||
|
});
|
||||||
|
} else if (
|
||||||
|
socket._handle._parentWrap
|
||||||
|
&& socket._handle._parentWrap._handle
|
||||||
|
&& socket._handle._parentWrap._handle.owner
|
||||||
|
&& socket._handle._parentWrap._handle.owner.stream
|
||||||
|
&& socket._handle._parentWrap._handle.owner.stream.remotePort
|
||||||
|
) {
|
||||||
|
propNames.forEach(function (propName) {
|
||||||
|
props[propName] = socket._handle._parentWrap._handle.owner.stream[propName];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return props;
|
||||||
|
}
|
||||||
function extractSocketProp(socket, propName) {
|
function extractSocketProp(socket, propName) {
|
||||||
// remoteAddress, remotePort... ugh... https://github.com/nodejs/node/issues/8854
|
// remoteAddress, remotePort... ugh... https://github.com/nodejs/node/issues/8854
|
||||||
var value = socket[propName] || socket['_' + propName];
|
var value = socket[propName] || socket['_' + propName];
|
||||||
|
@ -240,10 +282,11 @@ Packer.socketToAddr = function (socket) {
|
||||||
// tlsSocket.remoteAddress = remoteAddress; // causes core dump
|
// tlsSocket.remoteAddress = remoteAddress; // causes core dump
|
||||||
// console.log(tlsSocket.remoteAddress);
|
// console.log(tlsSocket.remoteAddress);
|
||||||
|
|
||||||
|
var props = extractSocketProps(socket, [ 'remoteFamily', 'remoteAddress', 'remotePort' ]);
|
||||||
return {
|
return {
|
||||||
family: extractSocketProp(socket, 'remoteFamily')
|
family: props.remoteFamily
|
||||||
, address: extractSocketProp(socket, 'remoteAddress')
|
, address: props.remoteAddress
|
||||||
, port: extractSocketProp(socket, 'remotePort')
|
, port: props.remotePort
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -276,6 +319,7 @@ var sockFuncs = [
|
||||||
// Improved workaround for https://github.com/nodejs/node/issues/8854
|
// Improved workaround for https://github.com/nodejs/node/issues/8854
|
||||||
// Unlike Packer.Stream.create this should handle all of the events needed to make everything work.
|
// Unlike Packer.Stream.create this should handle all of the events needed to make everything work.
|
||||||
Packer.wrapSocket = function (socket) {
|
Packer.wrapSocket = function (socket) {
|
||||||
|
// TODO use defineProperty to override remotePort, etc
|
||||||
var myDuplex = new require('stream').Duplex();
|
var myDuplex = new require('stream').Duplex();
|
||||||
addressNames.forEach(function (name) {
|
addressNames.forEach(function (name) {
|
||||||
myDuplex[name] = extractSocketProp(socket, name);
|
myDuplex[name] = extractSocketProp(socket, name);
|
||||||
|
|
Loading…
Reference in New Issue