Skip to content

Instantly share code, notes, and snippets.

@jacobandresen
Created April 7, 2013 11:42
Show Gist options
  • Save jacobandresen/5330150 to your computer and use it in GitHub Desktop.
Save jacobandresen/5330150 to your computer and use it in GitHub Desktop.
nodejs dispatcher
#!/opt/node/bin/node
var sys = require('util');
var net = require('net');
var querystring = require('querystring');
var http = require('http');
var Iconv = require('iconv').Iconv;
var PORT = process.argv[2];
if (PORT == null || PORT == "") {
sys.puts("missing PORT");
sys.puts("usage: node sip.js [PORT]");
process.exit();
}
var server;
var conv = new Iconv('utf8', 'iso-8859-1');
function dispatch(data, callback, errCallback) {
var postData = querystring.stringify({ 'port': PORT, 'cmd': data.toString('ascii') });
var postOptions = {
host: '127.0.0.1',
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{
response.on('data', function (data) {
values += data;
});
response.on('end', function () {
values = conv.convert(values);
callback(values);
});
}catch(err) {
errCallback(err);
}
});
postRequest.write(postData);
postRequest.end();
}catch(err) {
errCallback(err);
}
}
function startSession(socket) {
function log(msg) {
console.log(new Date().toISOString() + "::" + PORT +"\t[" + socket.id +"]\t" + msg);
}
socket.setNoDelay(true);
socket.setKeepAlive(false);
socket.on('connect', function (conn) {
socket.id = Math.floor(Math.random() * 1000000);
log("connected");
log("#connections\t" + server.connections);
});
socket.on('data', function (data) {
log("request\t" + data);
dispatch(data, function (chunk) {
socket.write(chunk);
log("response\t" + chunk);
},
function(err) {
log("failure\t" + err);
});
});
socket.on('timeout', function(conn) { log("socket timeout"); });
socket.on('end', function(conn) { log("socket end"); });
socket.on('close', function(conn) { log("socket close"); });
socket.on('error', function(conn) { log("socket error"); });
}
console.log("starting sip dispatcher on port:"+PORT);
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