Skip to content

Commit

Permalink
Add support for proxy protocol
Browse files Browse the repository at this point in the history
  • Loading branch information
fenichelar authored Aug 9, 2017
1 parent 8b15459 commit a7e984d
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions sip.js
Original file line number Diff line number Diff line change
Expand Up @@ -437,15 +437,22 @@ function defaultPort(proto) {

function makeStreamParser(onMessage) {
var m;
var p;
var r = '';

function headers(data) {
r += data;
var a = r.match(/^\s*([\S\s]*?)\r\n\r\n([\S\s]*)$/);

if(a) {
r = a[2];
m = parse(a[1]);

var a = r.match(/^PROXY (\S+) (\S+) (\S+) (\S+) (\S+)\r\n([\S\s]*)$/);
if (a) {
p = {'protocol': a[1], 'source-address': a[2], 'destination-address': a[3], 'source-port': a[4], 'destination-port': a[5]};
r = a[6];
}

var b = r.match(/^\s*([\S\s]*?)\r\n\r\n([\S\s]*)$/);
if(b) {
r = b[2];
m = parse(b[1]);

if(m && m.headers['content-length'] !== undefined) {
state = content;
Expand All @@ -460,7 +467,7 @@ function makeStreamParser(onMessage) {
if(r.length >= m.headers['content-length']) {
m.content = r.substring(0, m.headers['content-length']);

onMessage(m);
onMessage(m, p);

var s = r.substring(m.headers['content-length']);
state = headers;
Expand Down Expand Up @@ -521,11 +528,11 @@ function makeStreamTransport(protocol, connect, createServer, callback) {
}

stream.setEncoding('ascii');
stream.on('data', makeStreamParser(function(m) {
stream.on('data', makeStreamParser(function(m, p) {
if(checkMessage(m)) {
if(m.method) m.headers.via[0].params.received = remote.address;
callback(m,
{protocol: remote.protocol, address: stream.remoteAddress, port: stream.remotePort, local: { address: stream.localAddress, port: stream.localPort}},
{protocol: remote.protocol, address: stream.remoteAddress, port: stream.remotePort, local: { address: stream.localAddress, port: stream.localPort}, proxy: p},
stream);
}
}));
Expand Down

0 comments on commit a7e984d

Please sign in to comment.