123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #
- # $Id$
- #
- # simple proxy script for forwarding to voicemail server
- # for unavailable users
- #
- loadmodule "modules/sl/sl.so"
- loadmodule "modules/tm/tm.so"
- loadmodule "modules/rr/rr.so"
- loadmodule "modules/maxfwd/maxfwd.so"
- loadmodule "modules/mysql/mysql.so"
- loadmodule "modules/group/group.so"
- loadmodule "modules/usrloc/usrloc.so"
- loadmodule "modules/registrar/registrar.so"
- # time to give up on ringing -- global timer, applies to
- # all transactions
- modparam("tm", "fr_inv_timer", 90)
- # database with user group membership
- modparam("group", "db_url", "mysql://ser:heslo@localhost/ser")
- # --------------------- request routing logic -------------------
- route {
- if (!mf_process_maxfwd_header("10")) {
- log("LOG: Too many hops\n");
- sl_send_reply("483", "Alas Too Many Hops");
- break;
- };
- if (!(method=="REGISTER")) record_route();
- if (loose_route()) {
- t_relay();
- break;
- };
- if (!uri==myself) {
- t_relay();
- break;
- };
- if (method == "REGISTER") {
- if (!save("location")) {
- sl_reply_error();
- };
- break;
- };
- # does the user wish redirection on no availability? (i.e., is he
- # in the voicemail group?) -- determine it now and store it in
- # flag 4, before we rewrite the flag using UsrLoc
- if (is_user_in("Request-URI", "voicemail")) {
- setflag(4);
- };
- # native SIP destinations are handled using our USRLOC DB
- if (!lookup("location")) {
- # handle user which was not found
- route(4);
- break;
- };
- # if user is on-line and is in voicemail group, enable redirection
- if (method == "INVITE" && isflagset(4)) {
- t_on_failure("1");
- };
- t_relay();
- }
- # ------------- handling of unavailable user ------------------
- route[4] {
- # non-Voip -- just send "off-line"
- if (!(method == "INVITE" || method == "ACK" || method == "CANCEL")) {
- sl_send_reply("404", "Not Found");
- break;
- };
- # not voicemail subscriber
- if (!isflagset(4)) {
- sl_send_reply("404", "Not Found and no voicemail turned on");
- break;
- };
- # forward to voicemail now
- rewritehostport("bat.iptel.org:5090");
- t_relay_to_udp("bat.iptel.org", "5090");
- }
- # if forwarding downstream did not succeed, try voicemail running
- # at bat.iptel.org:5090
- failure_route[1] {
- revert_uri();
- rewritehostport("bat.iptel.org:5090");
- append_branch();
- t_relay_to_udp("bat.iptel.org", "5090");
- }
|