SIP Redirect server using node.js

405 views
Skip to first unread message

akh...@braddockinfotech.com

unread,
Aug 26, 2013, 5:47:03 AM8/26/13
to nod...@googlegroups.com
/* include lib */
var dgram = require('dgram');
var server = dgram.createSocket('udp4');

/* server config */
var host = '192.168.0.177';
var port = 5060;

/* sample INVITE request */
var invite = "INVITE sip:+17066450067@192.168.0.177:5060;transport=udp SIP/2.0\r\nVia: SIP/2.0/UDP 192.168.2.40:5060;rport;branch=z9hG4bK-9a623a408\r\nAllow-Events: message-summary, refer, dialog, line-seize, presence, call-info, as-feature-event\r\nMax-Forwards: 70\r\nCall-ID: C7A7...@192.168.2.40\r\nFrom: <sip:+17066458010@192.168.2.40:5060;otg=16>;tag=192.168.2.40+1+111906+b5b34931\r\nTo: <sip:+17066...@192.168.0.177>\r\nCSeq: 847215118 INVITE\r\nExpires: 180\r\nOrganization: MetaSwitch\r\nSupported: resource-priority, 100rel\r\nContent-Length: 166\r\nContent-Type: application/sdp\r\nAllow: INVITE, ACK, CANCEL, BYE, REGISTER, OPTIONS, PRACK, UPDATE, SUBSCRIBE, NOTIFY, REFER, INFO, PUBLISH\r\nContact: <sip:+17066...@192.168.2.40:5060>\r\nP-Asserted-Identity: <sip:+17066...@192.168.2.40:5060>\r\n\r\nv=0\r\no=- 2012157880 2012157880 IN IP4 192.168.2.14\r\ns=-\r\nc=IN IP4 192.168.2.14\r\nt=0\r\nm=audio 33238 RTP/AVP 18 0 101\r\na=rtpmap:101 telephone-event/8000\r\na=ptime:20";

/* isInvite */
function isInvite(message){
request = message.split('\r\n'); 
pattern = new RegExp(/INVITE/);
request = request[0].match(pattern);
if(request != null){
if(request[0] == "INVITE"){return true;}
else{return false;}
}
}

/* getVia */
function getVia(message){
pattern = new RegExp(/Via:(.*)/);
via = message.match(pattern);
return via[0];
}

/* getFrom */
function getFrom(message){
pattern = new RegExp(/From:(.*)/);
from = message.match(pattern);
return from[0];
}

/* getTo */
function getTo(message){
pattern = new RegExp(/To:(.*)/);
to = message.match(pattern);
return to[0];
}

/* getToNo */
function getToNo(message){
pattern = new RegExp(/To: <sip:(.*)@(.*)>/);
toNo = message.match(pattern);
return toNo[1];
}

/* getCallId */
function getCallId(message){
pattern = new RegExp(/Call-ID:(.*)/);
callId = message.match(pattern);
return callId[0];
}

/* getCseq */
function getCseq(message){
pattern = new RegExp(/CSeq: (.*) INVITE/);
cseq = message.match(pattern);
cseq[1]++;
return cseq[1];
}

/* getIncomingTrunk */
function getIncomingTrunk(message){
pattern = new RegExp(/From: <sip:(.*);otg=(.*)>/);
trunk = message.match(pattern);
return trunk[2];
}

/* getLcrContacts */
function getLcrContacts(message){
var toNo = getToNo(message);
trunks = ["055", "054", "016"];
contacts = [];
for(i = 0; i < trunks.length; i++){
contact = "Contact: <sip:" + toNo + "@" + host + ";dtg=" + trunks[i] + ">";
contacts.push(contact);
}
return contacts.join("\r\n");
}

/* getResponse */
function getResponse(message){
response = "";
response += "SIP/2.0 302 Redirect Request";
response += "\r\n";
response += getVia(message);
response += "\r\n";
response += getFrom(message);
response += "\r\n";
response += getTo(message);
response += "\r\n";
response += getCallId(message);
response += "\r\n";
response += "CSeq: " + getCseq(message) + " INVITE";
response += "\r\n";
response += getLcrContacts(message);
response += "\r\n";
response += "Content-Length: 0";
response += "\r\n";
response += "\r\n";

return response;
}

/*
if(isInvite(invite)){
console.log(getResponse(invite));
};
*/

/* bind to port */
server.bind(port, host);

/* event - start listening */ 
server.on('listening', function () {
    var address = server.address();
    console.log('SIP proxy Server listening on ' + address.address + ':' + address.port + '\n');
});

/* event - on getting message in socket */
server.on('message', function (message) {

message = message.toString();

if(isInvite(message)){
/* convert message object to string */
message = message.toString();
/* log message */
console.log(message);
/* prepare response message */
response = getResponse(message);
/* log response */
console.log(response);
/* convert response to buffer */
response = new Buffer(response);
/* send response to switch */
server.send(response, 0, response.length, port, host, function(err, bytes){
if(err){
throw err;
server.close();
console.log("Server error");
}
});
}
});







The response is not being sent.... do any one know why...
Reply all
Reply to author
Forward
0 new messages