Skip to content

Instantly share code, notes, and snippets.

Created September 2, 2013 11:42
Show Gist options
  • Save anonymous/6411992 to your computer and use it in GitHub Desktop.
Save anonymous/6411992 to your computer and use it in GitHub Desktop.
sip forwarding based on DNS TXT record of username
var sip = require('sip');
var util = require('util');
var dns = require('dns');
var transport = sip.makeTransport({}, function(m, remote) {
if(m.method && m.method !== 'ACK') {
try {
if(m.method === 'INVITE') {
var username = sip.parseUri(m.headers.to.uri).user;
username = username.replace(/[^\da-zA-Z]/g, '');
var domain = sip.parseUri(m.headers.to.uri).host;
dns.resolveTxt('sip-'+username+'.'+domain, function (err, addresses) {
if (err) {
if (err.errno == dns.NODATA) transport.send(remote, sip.makeResponse(m, 404, 'Not Found')
);
else
throw err;
} else {
var rs = sip.makeResponse(m, 302, 'Moved Temporarily');
rs.headers = m.headers;
rs.headers.contact = 'sip:'+addresses[0];
transport.send(remote, rs);
}});} else {
transport.send(remote, sip.makeResponse(m,405, 'Method Not Allowed'));
}
} catch(e) {
util.debug(e);
util.debug(e.stack);
transport.send(remote, sip.makeResponse(m, 500, "Server Internal Error"));
}
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment