vm_proxy.cfg 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #
  2. # $Id$
  3. #
  4. # simple proxy script for forwarding to voicemail server
  5. # for unavailable users
  6. #
  7. loadmodule "modules/sl/sl.so"
  8. loadmodule "modules/tm/tm.so"
  9. loadmodule "modules/rr/rr.so"
  10. loadmodule "modules/maxfwd/maxfwd.so"
  11. loadmodule "modules/mysql/mysql.so"
  12. loadmodule "modules/group/group.so"
  13. loadmodule "modules/usrloc/usrloc.so"
  14. loadmodule "modules/registrar/registrar.so"
  15. # time to give up on ringing -- global timer, applies to
  16. # all transactions
  17. modparam("tm", "fr_inv_timer", 90)
  18. # database with user group membership
  19. modparam("group", "db_url", "mysql://ser:heslo@localhost/ser")
  20. # --------------------- request routing logic -------------------
  21. route {
  22. if (!mf_process_maxfwd_header("10")) {
  23. log("LOG: Too many hops\n");
  24. sl_send_reply("483", "Alas Too Many Hops");
  25. break;
  26. };
  27. if (!(method=="REGISTER")) record_route();
  28. if (loose_route()) {
  29. t_relay();
  30. break;
  31. };
  32. if (!uri==myself) {
  33. t_relay();
  34. break;
  35. };
  36. if (method == "REGISTER") {
  37. if (!save("location")) {
  38. sl_reply_error();
  39. };
  40. break;
  41. };
  42. # does the user wish redirection on no availability? (i.e., is he
  43. # in the voicemail group?) -- determine it now and store it in
  44. # flag 4, before we rewrite the flag using UsrLoc
  45. if (is_user_in("Request-URI", "voicemail")) {
  46. setflag(4);
  47. };
  48. # native SIP destinations are handled using our USRLOC DB
  49. if (!lookup("location")) {
  50. # handle user which was not found
  51. route(4);
  52. break;
  53. };
  54. # if user is on-line and is in voicemail group, enable redirection
  55. if (method == "INVITE" && isflagset(4)) {
  56. t_on_failure("1");
  57. };
  58. t_relay();
  59. }
  60. # ------------- handling of unavailable user ------------------
  61. route[4] {
  62. # non-Voip -- just send "off-line"
  63. if (!(method == "INVITE" || method == "ACK" || method == "CANCEL")) {
  64. sl_send_reply("404", "Not Found");
  65. break;
  66. };
  67. # not voicemail subscriber
  68. if (!isflagset(4)) {
  69. sl_send_reply("404", "Not Found and no voicemail turned on");
  70. break;
  71. };
  72. # forward to voicemail now
  73. rewritehostport("bat.iptel.org:5090");
  74. t_relay_to_udp("bat.iptel.org", "5090");
  75. }
  76. # if forwarding downstream did not succeed, try voicemail running
  77. # at bat.iptel.org:5090
  78. failure_route[1] {
  79. revert_uri();
  80. rewritehostport("bat.iptel.org:5090");
  81. append_branch();
  82. t_relay_to_udp("bat.iptel.org", "5090");
  83. }