Engine.debugName("sip_qual_routing"); Message.trackName("sip_qual_routing"); // list of servers used to route a call, all considered to be down initially sip_servers = { "192.168.168.139" : false, "192.168.168.241" : false, "192.168.168.1" : false, }; avail_srv = []; // list of servers that are available idx = 0; function onXsipQualify(msg) { if(sip_servers[msg.server] == undefined) return; sip_servers[msg.server] = msg.available; // rebuild the list of available servers avail_srv = []; for (var s in sip_servers) { if (sip_servers[s]) avail_srv.push(s); } Engine.debug(Engine.DebugInfo,"Available SIP servers:",avail_srv.join()); return false; // let others to handle the message too } function onRoute(msg) { if (msg.called.startsWith("123")) { if (!avail_srv.length) // no available servers return false; msg.retValue("sip/sip:" + msg.called + "@" + avail_srv[idx++ % avail_srv.length]); return true; } return false; } Message.install(onXsipQualify,"xsip.qualify",50); Message.install(onRoute,"call.route",50);