Skip to content

Instantly share code, notes, and snippets.

@jacobandresen
Created June 20, 2012 19:19
Show Gist options
  • Save jacobandresen/2961670 to your computer and use it in GitHub Desktop.
Save jacobandresen/2961670 to your computer and use it in GitHub Desktop.
SIP2 dispatcher
//2012, reindex.dk . Released under the MIT license
var PORT = 7798;
var sys = require('util');
var fs = require('fs');
var net = require('net');
var querystring = require('querystring');
var http = require('http');
var Iconv = require('iconv').Iconv;
var logLocation = process.argv[2];
if (logLocation == null || logLocation == "") {
sys.puts("missing log location");
process.exit();
}
var log = fs.createWriteStream(logLocation);
function dispatch(data, callback, errCallback) {
var postData = querystring.stringify({ 'port': PORT, 'cmd': data.toString('ascii') });
var postOptions = {
host: 'localhost',
port: 80,
path: '/Sockets/SIP/SIP.php',
method: 'POST',
headers: {
'Content-Type' : 'application/x-www-form-urlencoded',
'Content-Length' : postData.length,
}
};
try{
var postRequest = http.request(postOptions);
var values='';
postRequest.on('response', function (response) {
try{
var conv = new Iconv('utf8', 'iso-8859-1');
response.on('data', function (data) {
values += data;
});
response.on('end', function () {
values = conv.convert(values);
log.write(values +"\n");
callback(values);
});
}catch(err) {
errCallback(err);
}
});
postRequest.write(postData);
postRequest.end();
}catch(err) {
errCallback(err);
}
}
function startSession(socket) {
socket.on('connect', function (conn) {
socket.id = Math.floor(Math.random() * 1000000);
log.write("[" + socket.id +"] connected\n");
});
socket.on('data', function (data) {
log.write("[" + socket.id + "] request:" + data + "\n");
dispatch(data, function (chunk) {
socket.write(chunk);
log.write("[" + socket.id + "] response:" + chunk + "\n");
},
function(err) {
log.write("[" + socket.id +"] failure:" + err + "\n");
});
});
}
log.once('open', function (fd) {
log.write("starting sip dispatcher\n");
var server = net.createServer(startSession);
server.listen(PORT);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment