Advertisement
mailex

Untitled

Mar 21st, 2014
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.59 KB | None | 0 0
  1. #--8<-----------------------------------------------------------------------------------------------
  2. ####### Логика маршрутизации ############################################
  3. route {
  4.  
  5. $var(is_debug)=m4_IS_DEBUG;
  6. $var(non_payer)="m4_NON_PAYER_SIP_ADDRESS";
  7. $var(asterisk_ip)="m4_ASTERISK_IP";
  8. $var(asterisk_port)="m4_ASTERISK_PORT";
  9. $var(opensips_ip)="m4_DEFAULT_IP";
  10. $var(opensips_port)="m4_DEFAULT_PORT";
  11. $var(unitel_ip)="m4_PBX_IP";
  12. $var(reg_on_aster)=m4_REG_ON_ASTER;
  13.  
  14. # ----------------------------------------------------------------------
  15. # Sanity Check Section
  16.  
  17.  
  18. if (!mf_process_maxfwd_header("10")) {
  19. sl_send_reply("483","Too Many Hops");
  20. exit;
  21. }
  22.  
  23. #...................................................................
  24. # Последовательные запросы
  25. ## Восстановление маршрута для запросов со скрытой топологией
  26. if (has_totag() && (uri == myself) && is_method("INVITE|ACK|BYE|UPDATE"))
  27.  
  28. {
  29. if (match_dialog())
  30. {
  31. xlog(" in-dialog topology hiding request - $DLG_dir\n");
  32. route(m4_DEFAULT);
  33. exit;
  34. }
  35. }
  36. #...................................................................
  37.  
  38. if (has_totag()) {
  39.  
  40. if (loose_route()) {
  41.  
  42. if (is_method("BYE")) {
  43. setflag(1);
  44. setflag(3);
  45.  
  46. } else if (is_method("INVITE")) {
  47.  
  48. record_route();
  49. }
  50.  
  51. route(m4_DEFAULT);
  52. } else {
  53.  
  54. if ( is_method("ACK") ) {
  55.  
  56.  
  57. if ( t_check_trans() ) {
  58.  
  59. t_relay();
  60. exit;
  61. } else {
  62. exit;
  63. }
  64. }
  65. sl_send_reply("404","Not here");
  66. }
  67.  
  68. exit;
  69. } # if (has_totag())
  70. # Инициирующие запросы
  71. #...................................................................
  72. ## Перенаправлять запросы через Asterisk
  73. if (db_is_user_in("$fu", "asterisk"))
  74. {
  75. if(!has_totag() && is_method("INVITE"))
  76. {
  77.  
  78. topology_hiding();
  79. }
  80. }
  81. #.......................................................................
  82.  
  83.  
  84. #...................................................................
  85. if (is_method("CANCEL"))
  86. {
  87.  
  88. if (t_check_trans())
  89.  
  90. t_relay();
  91. exit;
  92. }
  93.  
  94.  
  95. t_check_trans();
  96.  
  97. if (!(method=="REGISTER") && from_uri==myself) /*НЕ multidomain версия*/
  98.  
  99. {
  100.  
  101. if(!check_source_address("0")){
  102. if (!proxy_authorize("", "subscriber")) {
  103.  
  104.  
  105. proxy_challenge("", "0");
  106. exit;
  107. }
  108. if (!db_check_from()) {
  109. sl_send_reply("403","Forbidden auth ID");
  110. exit;
  111. }
  112. consume_credentials();
  113. }
  114. }
  115.  
  116. #...................................................................
  117. #
  118. # ----------------------------------------------------------------------
  119. # Loose Route Section (Loose - свободный)
  120.  
  121. if (loose_route()) {
  122.  
  123.  
  124. xlog("L_ERR",
  125. "Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]");
  126. if (!is_method("ACK"))
  127. sl_send_reply("403","Preload Route denied");
  128. exit;
  129. }
  130.  
  131.  
  132. if (!is_method("REGISTER|MESSAGE"))
  133. record_route();
  134.  
  135. if (is_method("INVITE")) {
  136. setflag(1); # Вести учет
  137. setflag(2); # Учитывать пропущенные звонки
  138. setflag(3); # Учитывать неудачные транзакции
  139. }
  140.  
  141. # ----------------------------------------------------------------------
  142. # Call Type Processing Section
  143. # Секция, обрабатывающая различные типы вызовов.
  144. # ----------------------------------------------------------------------
  145.  
  146. # Выход из из внутридоменной маршрутизации
  147. if (!uri==myself)
  148. {
  149. if(from_uri==myself)
  150. {
  151. append_hf("P-hint: outbound\r\n");
  152. route(m4_DEFAULT);
  153. }
  154. else
  155. sl_send_reply("403", "Not here");
  156. }
  157.  
  158. if (is_method("PUBLISH"))
  159. {
  160. sl_send_reply("503", "Service Unavailable");
  161. exit;
  162. }
  163.  
  164. if (is_method("REGISTER"))
  165. {
  166.  
  167.  
  168. if (!www_authorize("", "subscriber"))
  169. {
  170. www_challenge("", "0"); # Шлет пакет 401 Unauthorized
  171. exit;
  172. }
  173.  
  174. if (!db_check_to())
  175. {
  176. sl_send_reply("403","Forbidden auth ID");
  177. exit;
  178. }
  179.  
  180. if (!save("location")) # сохранение данных AOR в таблице расположений MySQL
  181. sl_reply_error();
  182.  
  183. exit;
  184. } # if (is_method("REGISTER"))
  185.  
  186. # Этот код отбрасывает запросы без правильного заполненного URI.
  187. if ($rU==NULL) {
  188. # Запрос без имени пользователя в RURI
  189. sl_send_reply("484","Address Incomplete");
  190. exit;
  191. }
  192.  
  193.  
  194. alias_db_lookup("dbaliases");
  195.  
  196. if(!dp_translate("0","$rU/$rU")){
  197. send_reply("420", "Invalid Destination");
  198. exit;
  199. }
  200.  
  201. # Для пользователей группы Asterisk маршрут отправляем через Asterisk
  202. if (db_is_user_in("$fu", "asterisk"))
  203. {
  204. $avp(dest)="media";
  205. }
  206.  
  207. xlog("$avp(dest)");
  208.  
  209. if ($avp(dest)=="usrloc") {
  210. # Маршрут для usrloc
  211. route(m4_USRLOC);
  212. }
  213.  
  214. ....
  215.  
  216. send_reply("420", "Invalid Extension");
  217.  
  218.  
  219.  
  220. exit;
  221. }
  222.  
  223. route[m4_DEFAULT] {
  224.  
  225.  
  226. # для INVITEs используем несколько вспомогательных путей
  227. if (is_method("INVITE")) {
  228.  
  229. #xlog("---> INVITE detected");
  230.  
  231. # Запускаем новую ветвь
  232. t_on_branch("2"); # вызов branch_route[2]
  233. t_on_reply("2"); # вызов onreply_route[2]
  234. t_on_failure("1");
  235. }
  236.  
  237. if (!t_relay()) {
  238. send_reply("500","Internal Error");
  239. };
  240. exit;
  241. }
  242. #-----------------------------------------------------------------------
  243.  
  244. #-----------------------------------------------------------------------
  245. # Маршрут для поиска пользователей
  246. route[m4_USRLOC]{
  247.  
  248. if (!lookup("location", "m")) {
  249. switch ($retcode) {
  250. case -1:
  251. case -3:
  252. t_newtran();
  253. t_reply("404", "Not Found");
  254. exit;
  255. case -2:
  256. sl_send_reply("405", "Method Not Allowed");
  257. exit;
  258. }
  259. }
  260.  
  261. setflag(2);
  262. route(m4_DEFAULT);
  263. }
  264. #-----------------------------------------------------------------------
  265. route[m4_PSTN] {
  266.  
  267. if(!do_routing()){
  268. send_reply("503", "No rules found matching the URI prefix");
  269. exit;
  270. }
  271.  
  272. setflag(10); # flag 10 – флаг транзакции для перехвата ошибок маршрута
  273.  
  274. route(m4_DEFAULT);
  275. }
  276. #-----------------------------------------------------------------------
  277. route[m4_MEDIA] {
  278.  
  279.  
  280. rewritehostport("m4_ASTERISK_IP:m4_ASTERISK_PORT");
  281.  
  282. route(m4_DEFAULT);
  283. }
  284. #-----------------------------------------------------------------------
  285.  
  286. branch_route[2] {
  287.  
  288. # xlog("new branch at $ru\n");
  289. }
  290. #-----------------------------------------------------------------------
  291. onreply_route[2] {
  292.  
  293. #xlog("incoming reply from $si\n");
  294. }
  295. #-----------------------------------------------------------------------
  296. failure_route[1] {
  297.  
  298. if (t_was_cancelled()) {
  299. exit;
  300. }
  301.  
  302. if(isflagset(10)){
  303. if (use_next_gw()) {
  304. #xlog ("next gateway $ru \n");
  305. t_on_failure("1");
  306. t_relay();
  307. exit;
  308. }
  309. else {
  310. t_reply("503", "Service not available, no more gateways");
  311. exit;
  312. }
  313. }
  314.  
  315. }
  316. #--8<-----------------------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement