I'm monitoring 5060 port. If i receive a udp with sip protocol i need to
send a response. following is my code
/* config */
var port = 5060;
var host = '192.168.12.155';
var dgram = require('dgram');
var socket = dgram.createSocket('udp4');
var fs = require('fs');
socket.on('listening', function () {
var address = socket.address();
console.log('SIP proxy socket listening on ' + address.address + ':' +
address.port + '\n');
});
socket.on('message', function (message, remote) {
console.log('looping...');
/* convert message object to string */
message = message.toString();
/* log received message */
fs.appendFile("log.txt", "----- Received message -----\r\n");
fs.appendFile("log.txt", message);
fs.appendFile("log.txt", "\r\n");
/* split message */
message = message.split('\r\n');
/* define variables */
var is_invite = false;
var branch = '';
var tag = '';
var call_id = '';
var cseq = '';
var response = '';
var response_message = '';
/* add record route */
/* message[0] = message[0] + '\r\nRecord-route:
<sip:192.168.12.155:3333;lr>';*/
/* check INVITE */
pattern = new RegExp(/INVITE/);
for(var i = 0; i < message.length; i++) {
sip = message[i].match(pattern);
if(sip != null) {
is_invite = true;
}
}
if(is_invite){
/* get branch */
pattern = new RegExp(/branch=(.*)/);
for(var i = 0; i < message.length; i++) {
sip = message[i].match(pattern);
if(sip != null) {
branch = sip[1];
}
}
/* get tag */
pattern = new RegExp(/tag=(.*)/);
for(var i = 0; i < message.length; i++) {
sip = message[i].match(pattern);
if(sip != null) {
tag = sip[1];
}
}
/* get call-id */
pattern = new RegExp(/Call-ID:(.*)/);
for(var i = 0; i < message.length; i++) {
sip = message[i].match(pattern);
if(sip != null) {
call_id = sip[1];
}
}
/* get cseq */
pattern = new RegExp(/CSeq:(.*)/);
for(var i = 0; i < message.length; i++) {
sip = message[i].match(pattern);
if(sip != null) {
cseq = sip[1];
}
}
/* destination */
response = "SIP/2.0 302 Redirect Request \r\n";
response += "Via:SIP/2.0/UDP 192.168.2.40:5060;branch=" + branch +
";rport=5060\r\n";
response += "From: <sip:[email protected]:5060>;tag=" + tag +
";isup-oli=00\r\n";
response += "To:
<sip:[email protected]:5060;user=phone>;tag=883069368-1363286882583\r\n";
response += "Call-ID:" + call_id + ";\r\n";
response += "CSeq:" + cseq + "\r\n";
response += "Contact:<sip:[email protected]:5060>;q=0.5;\r\n";
response += "Content-Length: 0\r\n";
/* log send message */
fs.appendFile("log.txt", "----- Send message -----\r\n");
fs.appendFile("log.txt", response);
fs.appendFile("log.txt", "\r\n");
console.log('Got a invite signal');
response_message = new Buffer(response);
socket.send(response_message, 0, response_message.length, port, host);
console.log('Message sent');
}
});
socket.bind(port, host);
but event message is not properly interpreted. after the first invite
signal occurs.. the message event turn to an infinte loop. I'm sending only
a single INVITE signal.
--
--
Job Board: http://jobs.nodejs.org/
Posting guidelines:
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en
---
You received this message because you are subscribed to the Google Groups
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.