Advertisement
Guest User

sammy

a guest
Jul 24th, 2011
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 34.65 KB | None | 0 0
  1.  
  2. #
  3. # $Id: opensips.cfg 6725 2010-03-16 15:03:45Z anca_vamanu $
  4. #
  5. # OpenSIPS basic configuration script
  6. # by Anca Vamanu <anca@voice-system.ro>
  7. #
  8. # Please refer to the Core CookBook at:
  9. # http://www.opensips.org/index.php?n=Resources.DocsCookbooks
  10. # for a explanation of possible statements, functions and parameters.
  11. #
  12.  
  13.  
  14. ####### Global Parameters #########
  15.  
  16. debug=3
  17. log_stderror=no
  18. log_facility=LOG_LOCAL3
  19. #memlog=3
  20. #memdump=3
  21.  
  22. fork=yes
  23. children=4
  24.  
  25. /* uncomment the following lines to enable debugging */
  26. #debug=6
  27. #fork=no
  28. #log_stderror=yes
  29.  
  30. /* uncomment the next line to disable TCP (default on) */
  31. #disable_tcp=yes
  32.  
  33. /* uncomment the next line to enable the auto temporary blacklisting of
  34. not available destinations (default disabled) */
  35. #disable_dns_blacklist=no
  36.  
  37. /* uncomment the next line to enable IPv6 lookup after IPv4 dns
  38. lookup failures (default disabled) */
  39. #dns_try_ipv6=yes
  40.  
  41. /* uncomment the next line to disable the auto discovery of local aliases
  42. based on revers DNS on IPs (default on) */
  43. #auto_aliases=no
  44.  
  45. /* uncomment the following lines to enable TLS support (default off) */
  46. #disable_tls = no
  47. #listen = tls:your_IP:5061
  48. #tls_verify_server = 1
  49. #tls_verify_client = 1
  50. #tls_require_client_certificate = 0
  51. #tls_method = TLSv1
  52. #tls_certificate = "/root/entpbx/osips//etc/opensips/tls/user/user-cert.pem"
  53. #tls_private_key = "/root/entpbx/osips//etc/opensips/tls/user/user-privkey.pem"
  54. #tls_ca_list = "/root/entpbx/osips//etc/opensips/tls/user/user-calist.pem"
  55.  
  56.  
  57. #port=35060
  58.  
  59. /* uncomment and configure the following line if you want opensips to
  60. bind on a specific interface/port/proto (default bind on all available) */
  61. listen=udp:192.168.30.44:35060
  62.  
  63.  
  64. ####### Modules Section ########
  65.  
  66. #set module path
  67. mpath="/root/entpbx/osips//lib/opensips/modules/"
  68.  
  69. /* uncomment next line for MySQL DB support */
  70. loadmodule "db_mysql.so"
  71. #loadmodule "db_berkeley.so"
  72. loadmodule "signaling.so"
  73. loadmodule "sl.so"
  74. loadmodule "tm.so"
  75. loadmodule "rr.so"
  76. loadmodule "dialog.so"
  77. loadmodule "maxfwd.so"
  78. loadmodule "usrloc.so"
  79. loadmodule "registrar.so"
  80. loadmodule "textops.so"
  81. loadmodule "mi_fifo.so"
  82. loadmodule "uri.so"
  83. loadmodule "xlog.so"
  84. loadmodule "acc.so"
  85. loadmodule "avpops.so"
  86. loadmodule "diversion.so"
  87. loadmodule "cfgutils.so"
  88. loadmodule "options.so"
  89. loadmodule "localcache.so"
  90. #loadmodule "dialplan.so"
  91. loadmodule "load_balancer.so"
  92. loadmodule "uac.so"
  93.  
  94.  
  95. /* uncomment next lines for MySQL based authentication support
  96. NOTE: a DB (like db_mysql) module must be also loaded */
  97. loadmodule "auth.so"
  98. loadmodule "auth_db.so"
  99. /* uncomment next line for aliases support
  100. NOTE: a DB (like db_mysql) module must be also loaded */
  101. #loadmodule "alias_db.so"
  102. /* uncomment next line for multi-domain support
  103. NOTE: a DB (like db_mysql) module must be also loaded
  104. NOTE: be sure and enable multi-domain support in all used modules
  105. (see "multi-module params" section ) */
  106. #loadmodule "domain.so"
  107. /* uncomment the next two lines for presence server support
  108. NOTE: a DB (like db_mysql) module must be also loaded */
  109. #loadmodule "presence.so"
  110. #loadmodule "presence_xml.so"
  111.  
  112.  
  113. # ----------------- setting module-specific parameters ---------------
  114.  
  115.  
  116. # ----- mi_fifo params -----
  117. modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
  118.  
  119.  
  120. # ----- rr params -----
  121. # add value to ;lr param to cope with most of the UAs
  122. modparam("rr", "enable_full_lr", 1)
  123. # do not append from tag to the RR (no need for this script)
  124. modparam("rr", "append_fromtag", 1)
  125.  
  126. # ----- registrar params -----
  127. /* uncomment the next line not to allow more than 10 contacts per AOR */
  128. #modparam("registrar", "max_contacts", 10)
  129.  
  130.  
  131. # ----- usrloc params -----
  132. #modparam("usrloc", "db_mode", 0)
  133. /* uncomment the following lines if you want to enable DB persistency
  134. for location entries */
  135. modparam("usrloc", "db_mode", 2)
  136. modparam("usrloc", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")
  137.  
  138.  
  139. # ----- uri params -----
  140. modparam("uri", "use_uri_table", 0)
  141.  
  142.  
  143. # ----- acc params -----
  144. /* what sepcial events should be accounted ? */
  145. modparam("acc", "early_media", 1)
  146. modparam("acc", "report_ack", 1)
  147. modparam("acc", "report_cancels", 1)
  148. /* by default ww do not adjust the direct of the sequential requests.
  149. if you enable this parameter, be sure the enable "append_fromtag"
  150. in "rr" module */
  151. modparam("acc", "detect_direction", 0)
  152. /* account triggers (flags) */
  153. modparam("acc", "failed_transaction_flag", 3)
  154. modparam("acc", "log_flag", 1)
  155. modparam("acc", "log_missed_flag", 2)
  156. /* uncomment the following lines to enable DB accounting also */
  157. modparam("acc", "db_flag", 1)
  158. modparam("acc", "db_missed_flag", 2)
  159.  
  160.  
  161. # ----- auth_db params -----
  162. /* uncomment the following lines if you want to enable the DB based
  163. authentication */
  164. #modparam("auth_db", "calculate_ha1", yes)
  165. #modparam("auth_db", "password_column", "password")
  166. #modparam("auth_db", "db_url",
  167. # "mysql://opensips:opensipsrw@localhost/opensips")
  168. #modparam("auth_db", "load_credentials", "")
  169.  
  170.  
  171. # ----- alias_db params -----
  172. /* uncomment the following lines if you want to enable the DB based
  173. aliases */
  174. #modparam("alias_db", "db_url",
  175. # "mysql://opensips:opensipsrw@localhost/opensips")
  176.  
  177.  
  178. # ----- domain params -----
  179. /* uncomment the following lines to enable multi-domain detection
  180. support */
  181. #modparam("domain", "db_url",
  182. # "mysql://opensips:opensipsrw@localhost/opensips")
  183. #modparam("domain", "db_mode", 1) # Use caching
  184.  
  185.  
  186. # ----- multi-module params -----
  187. /* uncomment the following line if you want to enable multi-domain support
  188. in the modules (dafault off) */
  189. #modparam("alias_db|auth_db|usrloc|uri", "use_domain", 1)
  190.  
  191.  
  192. # ----- presence params -----
  193. /* uncomment the following lines if you want to enable presence */
  194. #modparam("presence|presence_xml", "db_url",
  195. # "mysql://opensips:opensipsrw@localhost/opensips")
  196. #modparam("presence_xml", "force_active", 1)
  197. #modparam("presence", "server_address", "sip:192.168.1.2:5060")
  198.  
  199.  
  200. # ----- cfgutils params -----
  201.  
  202.  
  203. # ----- options params -----
  204. #modparam("options", "support", "100rel")
  205.  
  206.  
  207. # ----- dialog params -----
  208. modparam("dialog", "dlg_match_mode", 2)
  209. modparam("dialog", "hash_size", 8192)
  210. modparam("dialog", "default_timeout", 300)
  211.  
  212.  
  213. # ----- localcache -----
  214. modparam("localcache", "cache_table_size", 12)
  215.  
  216.  
  217. # ----- dialplan params -----
  218. #modparam("dialplan", "db_url", "berkeley:///root/entpbx/osips/etc/opensips/db_berkeley/opensips")
  219. #modparam("dialplan", "attrs_pvar", "$avp(i:101)")
  220. #modparam("dialplan", "fetch_rows", 3000)
  221.  
  222.  
  223. # ----- load_balancer params -----
  224. #modparam("load_balancer", "db_url", "berkeley:///root/entpbx/osips/etc/opensips/db_berkeley/opensips")
  225. modparam("load_balancer", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")
  226. modparam("load_balancer", "probing_interval", 30)
  227. modparam("load_balancer", "probing_method", "OPTIONS")
  228. modparam("load_balancer", "probing_from", "sip:proxy@192.168.30.44:35060")
  229. modparam("load_balancer", "probing_reply_codes", "404, 200")
  230.  
  231. # ----- uac params -----
  232. modparam("uac","restore_mode","manual")
  233. #modparam("uac","rr_store_param","vsf")
  234. #modparam("uac", "force_dialog", yes)
  235.  
  236.  
  237. ####### Routing Logic ########
  238.  
  239.  
  240. # main request routing logic
  241.  
  242. route{
  243.  
  244. if (!mf_process_maxfwd_header("10")) {
  245. sl_send_reply("483","Too Many Hops");
  246. exit;
  247. }
  248.  
  249. xlog("L_INFO", " ");
  250. xlog("L_INFO", "@@@ method : $rm");
  251. xlog("L_INFO", "@@@ r-uri : $ru");
  252. xlog("L_INFO", "@@@ src_ip:port = $si:$sp");
  253.  
  254. if ($ru=~"^sip:40[0-9]*@"){
  255. xlog("L_INFO", "@@@ r-uri--- : $ru");
  256. #$ru = "sip:" + "123456" + "@" + "192.168.10.10" + ":" + "5060";
  257. xlog("L_INFO", "@@@ r-uri+++ : $ru");
  258. }
  259.  
  260. if ($fu=~"^sip:010[0-9]*@"){
  261. xlog("L_INFO", "@@@ from-uri--- : $fu");
  262. xlog("L_INFO", "@@@ from-usr--- : $fU");
  263. xlog("L_INFO", "@@@ from--- : $from");
  264. xlog("L_INFO", "@@@ from-usr--- : $from.user");
  265. #$from.user = "1088331234";
  266. #$fU = "1088331234";
  267. #$fu = "sip:" + "1234" + "@" + "192.168.30.44" + ":" + "35060";
  268. #$var(newfrom1) = uac_replace_from("1088331234","");
  269. xlog("L_INFO", "@@@ from-user+++ : $fU");
  270. xlog("L_INFO", "@@@ from-uri+++ : $fu");
  271. xlog("L_INFO", "@@@ from-user+++ : $from.user");
  272. #xlog("L_INFO", "@@@ from-uri+++ : $from.uri");
  273. xlog("L_INFO", "@@@ from-domain+++ : $fd");
  274. xlog("L_INFO", "@@@ from-name+++ : $fn");
  275. #uac_replace_from("sip:1088331234@$fd");
  276.  
  277. #$var(new_uri) = "sip:"+ "9999" +"@192.168.30.44:55060";
  278. #uac_replace_from("9999","$var(new_uri)");
  279.  
  280. #uac_replace_from("2101573704 <sip:2101573704@$fd:$from.uri>");
  281. if (is_present_hf("From")){
  282. xlog("L_INFO", "@@@ we have from header");
  283. #remove_hf("From");
  284. #if( remove_hf("From")){
  285. # xlog("L_INFO", "@@@ we remove from header");
  286. #}
  287. #append_hf("From: batman <$fu>;tag=$ft\r\n");
  288. }
  289.  
  290. if(remove_hf("User-Agent"))
  291. {
  292. xlog("L_INFO", "@@@ we remove header");
  293. }
  294. xlog("L_INFO", "@@@ new from : $var(newfrom1)");
  295. }
  296. # OPTIONS answer
  297. if (uri==myself) {
  298. if (is_method("OPTIONS")) {
  299. options_reply();
  300. exit;
  301. }
  302. }
  303.  
  304. if(is_method("SUBSCRIBE")) {
  305. exit;
  306. }
  307.  
  308. # receive register message of test users, record user's ip and port.
  309. if (is_method("REGISTER"))
  310. {
  311. # authenticate the REGISTER requests (uncomment to enable auth)
  312. #if (!www_authorize("", "subscriber"))
  313. #{
  314. # www_challenge("", "0");
  315. # exit;
  316. #}
  317.  
  318. #if (!db_check_to())
  319. #{
  320. # sl_send_reply("403","Forbidden auth ID");
  321. # exit;
  322. #}
  323.  
  324. #if (!save("location"))
  325. # sl_reply_error();
  326.  
  327. rewritehostport("192.168.30.45:21311");
  328. route(1);
  329.  
  330. exit;
  331. }
  332.  
  333. # INVITE
  334. if ( ( is_method("INVITE")||is_method("NOTIFY") ) && !has_totag()) {
  335. xlog("L_INFO", "@@@ INVITE has no totag");
  336. xlog("L_INFO", "@@@ Before change from : fU is $fU");
  337. $var(new_uri) = "sip:"+ "9999" +"@192.168.30.44:55060";
  338. uac_replace_from("9999","$var(new_uri)");
  339. xlog("L_INFO", "@@@ After change from : fU is $fU");
  340.  
  341. $var(invite_deal) = 0;
  342.  
  343. # invite message from IMS side
  344. if (
  345. (src_ip!=192.168.30.47 && src_port!=5070) &&
  346. (src_ip!=192.168.30.47 && src_port!=5071) &&
  347. (src_ip!=192.168.30.48 && src_port!=5080) &&
  348. (src_ip!=192.168.30.48 && src_port!=5081) &&
  349. (src_ip!=192.168.30.45 && src_port!=5050) &&
  350. (src_ip!=192.168.30.46 && src_port!=5060)
  351. )
  352. {
  353.  
  354. if (load_balance("1", "calls"))
  355. {
  356. xlog("L_INFO", "@@@ du = $du");
  357.  
  358. # save from ip/port, dest ip/port
  359. $var(dest_ip) = $(du{s.select,1,:});
  360. $var(dest_port) = $(du{s.select,2,:});
  361.  
  362.  
  363. $var(tmp_dest_ip) = $(du{s.select,1,:});
  364. $var(tmp_dest_port) = $(du{s.select,2,:});
  365.  
  366. xlog("L_INFO", "in load_balancer @@@ tmp_dest_ip = $var(tmp_dest_ip)");
  367. xlog("L_INFO", "in load_balancer @@@ tmp_dest_port = $var(tmp_dest_port)");
  368.  
  369. xlog("L_INFO", "in load_balancer @@@ dest_ip = $var(dest_ip)");
  370. xlog("L_INFO", "in load_balancer @@@ dest_port = $var(dest_port)");
  371. $var(send_port) = $Rp;
  372.  
  373. $var(dest_ok) = 1;
  374. }
  375. /*
  376. $var(dest_ip) = "192.168.30.47";
  377. $var(dest_port) = "5070";
  378. $var(dest_ok) = 1;
  379. */
  380. if (search("conf_addr")) {
  381. $var(conf_addr) = $(tu{uri.param,conf_addr});
  382. xlog("L_INFO", "%%%%% conf_addr: [$var(conf_addr)]");
  383. $var(conf_port) = $(tu{uri.param,conf_port});
  384. xlog("L_INFO", "%%%%% conf_port: [$var(conf_port)]");
  385.  
  386. # save from ip/port, dest ip/port
  387. $var(dest_ip) = $var(conf_addr);
  388. $var(dest_port) = $var(conf_port);
  389.  
  390. $var(dest_ok) = 1;
  391. }
  392.  
  393. if ($var(dest_ok) == 1)
  394. {
  395. if (create_dialog()) {
  396. store_dlg_value("dlg_source_ip", "$si");
  397. store_dlg_value("dlg_source_port", "$sp");
  398. store_dlg_value("dlg_dest_ip", "$var(dest_ip)");
  399. store_dlg_value("dlg_dest_port", "$var(dest_port)");
  400. store_dlg_value("dlg_recv_port", "$Rp");
  401. store_dlg_value("dlg_send_port", "$Rp");
  402. store_dlg_value("dlg_recv_ip", "$Ri");
  403.  
  404. fetch_dlg_value("dlg_source_ip","$var(req_src_ip)");
  405. fetch_dlg_value("dlg_source_port","$var(req_src_port)");
  406. fetch_dlg_value("dlg_dest_ip","$var(req_dest_ip)");
  407. fetch_dlg_value("dlg_dest_port","$var(req_dest_port)");
  408. fetch_dlg_value("dlg_recv_port", "$var(req_recv_port)");
  409. fetch_dlg_value("dlg_send_port", "$var(req_send_port)");
  410. fetch_dlg_value("dlg_recv_ip", "$var(req_recv_ip)");
  411.  
  412. xlog("L_INFO", "======= store =======");
  413. xlog("L_INFO", "@@@ request_src_ip = $var(req_src_ip)");
  414. xlog("L_INFO", "@@@ request_src_port = $var(req_src_port)");
  415. xlog("L_INFO", "@@@ request_dest_ip = $var(req_dest_ip)");
  416. xlog("L_INFO", "@@@ request_dest_port = $var(req_dest_port)");
  417. xlog("L_INFO", "@@@ req_recv_port = $var(req_recv_port)");
  418. xlog("L_INFO", "@@@ req_send_port = $var(req_send_port)");
  419. xlog("L_INFO", "@@@ req_recv_ip = $var(req_recv_ip)");
  420.  
  421. #remove_hf("From");
  422. #if( remove_hf("From")){
  423. # xlog("L_INFO", "@@@ we remove from header");
  424. #}
  425. #append_hf("From: batman <$fu>;tag=$ft\r\n");
  426.  
  427. } else {
  428. xlog("L_ERR", "@@@ create_dialog error, src ip:port = $si:$sp , call-id = $ci, dest ip:port = $var(dest_ip):$var(dest_port)");
  429.  
  430. # send error reply to src node
  431. #sl_send_reply("500","Server Internal Error");
  432. #exit;
  433. }
  434.  
  435. # save to localcache
  436. /*
  437. cache_store("local", "source_ip_$ci", "$si");
  438. cache_store("local", "source_port_$ci", "$sp");
  439. cache_store("local", "dest_ip_$ci", "$var(dest_ip)");
  440. cache_store("local", "dest_port_$ci", "$var(dest_port)");
  441. cache_store("local", "recv_port_$ci", "$Rp");
  442. cache_store("local", "send_port_$ci", "$Rp");
  443. cache_store("local", "recv_ip_$ci", "$Ri");
  444. */
  445. #strip_isup("application/sdp");
  446. #remove_hf("Content-Type");
  447. #append_hf("Content-Type: application/sdp\r\n");
  448.  
  449. if (is_present_hf("Contact"))
  450. {
  451. if (subst('/^Contact:(.+)sip:(.+)@([0-9.:]+)(.+)$/Contact:\1sip:\2@$Ri:$Rp\4/i')) {};
  452. }
  453. if (subst('/^From:(.+)sip:(.+)@([0-9.:]+)(.+)$/From:\1sip:\2@$Ri:$Rp\4/i')) {};
  454. if (subst('/^To:(.+)sip:(.+)@([0-9.:]+)(.+)$/To:\1sip:\2@$var(dest_ip):$var(dest_port)\4/i')) {};
  455.  
  456. # modify SIP Request's URI because dest uri has been changed
  457. xlog("L_INFO", "@@@ before rU = $rU");
  458. #subst("$rU","\d{3,}?$rU");
  459. xlog("L_INFO", "@@@ before rU 2 = $rU");
  460. #$rU = "123";
  461. $ru = "sip:" + $rU + "@" + $var(dest_ip) + ":" + $var(dest_port);
  462. xlog("L_INFO", "@@@ modify requst user = $rU");
  463.  
  464. xlog("L_INFO", "@@@ modify ru = $ru");
  465.  
  466. $var(newfrom) = "From: " + "sip:" + $rU + "@" + $var(dest_ip) + ":" + $var(dest_port);
  467. }
  468. else
  469. { # send busy reply to msce
  470. sl_send_reply("486","Busy Here");
  471. exit;
  472. }
  473.  
  474. $var(invite_deal) = 1;
  475. }
  476.  
  477. # invite message from NGCC side
  478. if (
  479. (src_ip==192.168.30.47 && src_port==5070) ||
  480. (src_ip==192.168.30.47 && src_port==5071) ||
  481. (src_ip==192.168.30.48 && src_port==5080) ||
  482. (src_ip==192.168.30.48 && src_port==5081) ||
  483. (src_ip==192.168.30.45 && src_port==5050) ||
  484. (src_ip==192.168.30.46 && src_port==5060)
  485. )
  486. {
  487. xlog("L_INFO", "Before lookup ru = $ru");
  488.  
  489. # do lookup with method filtering
  490. /*
  491. if (!lookup("location","m")) {
  492. xlog("L_ERR", "Location lookup failed!");
  493. switch ($retcode) {
  494. case -1:
  495. case -3:
  496. t_newtran();
  497. t_reply("404", "Not Found");
  498. exit;
  499. case -2:
  500. sl_send_reply("405", "Method Not Allowed");
  501. exit;
  502. }
  503. }
  504.  
  505. xlog("L_INFO", "After lookup ru = $ru");
  506. */
  507. # To Conference
  508. if (search("conf_addr")) {
  509. $var(conf_addr) = $(tu{uri.param,conf_addr});
  510. xlog("L_INFO", "%%%%% conf_addr: [$var(conf_addr)]");
  511. $var(conf_port) = $(tu{uri.param,conf_port});
  512. xlog("L_INFO", "%%%%% conf_port: [$var(conf_port)]");
  513.  
  514. # save from ip/port, dest ip/port
  515. $var(dest_ip) = $var(conf_addr);
  516. $var(dest_port) = $var(conf_port);
  517.  
  518. }else{
  519.  
  520. $var(dest_ip) = "";
  521. $var(dest_port) = "";
  522. # save from ip/port, dest ip/port
  523. #$var(dest_ip) = $rd;
  524. #$var(dest_port) = $rp;
  525.  
  526. $var(dest_ip) = "192.168.30.49";
  527. $var(dest_port) = 55060;
  528. xlog("L_INFO", "@@@ ngcc invite dest_ip is = $var(dest_ip)");
  529. xlog("L_INFO", "@@@ ngcc invite dest_port is = $var(dest_port)");
  530. }
  531. xlog("L_INFO", "After lookup rd = $rd");
  532. xlog("L_INFO", "After lookup rp = $rp");
  533.  
  534. $var(send_port) = $Rp;
  535.  
  536. if (create_dialog()) {
  537. store_dlg_value("dlg_source_ip", "$si");
  538. store_dlg_value("dlg_source_port", "$sp");
  539. store_dlg_value("dlg_dest_ip", "$var(dest_ip)");
  540. store_dlg_value("dlg_dest_port", "$var(dest_port)");
  541. store_dlg_value("dlg_recv_port", "$Rp");
  542. store_dlg_value("dlg_send_port", "$var(send_port)");
  543. store_dlg_value("dlg_recv_ip", "$Ri");
  544.  
  545. fetch_dlg_value("dlg_source_ip","$var(req_src_ip)");
  546. fetch_dlg_value("dlg_source_port","$var(req_src_port)");
  547. fetch_dlg_value("dlg_dest_ip","$var(req_dest_ip)");
  548. fetch_dlg_value("dlg_dest_port","$var(req_dest_port)");
  549. fetch_dlg_value("dlg_recv_port", "$var(req_recv_port)");
  550. fetch_dlg_value("dlg_send_port", "$var(req_send_port)");
  551. fetch_dlg_value("dlg_recv_ip", "$var(req_recv_ip)");
  552.  
  553. xlog("L_INFO", "======= store =======");
  554. xlog("L_INFO", "@@@ request_src_ip = $var(req_src_ip)");
  555. xlog("L_INFO", "@@@ request_src_port = $var(req_src_port)");
  556. xlog("L_INFO", "@@@ request_dest_ip = $var(req_dest_ip)");
  557. xlog("L_INFO", "@@@ request_dest_port = $var(req_dest_port)");
  558. xlog("L_INFO", "@@@ req_recv_port = $var(req_recv_port)");
  559. xlog("L_INFO", "@@@ req_send_port = $var(req_send_port)");
  560. xlog("L_INFO", "@@@ req_recv_ip = $var(req_recv_ip)");
  561. } else {
  562. xlog("L_ERR", "@@@ create_dialog error, src ip:port = $si:$sp , call-id = $ci, dest ip:port = $var(dest_ip):$var(dest_port)");
  563.  
  564. # send error reply to src node
  565. #sl_send_reply("500","Server Internal Error");
  566. #exit;
  567. }
  568.  
  569. # save to localcache
  570. /*
  571. cache_store("local", "source_ip_$ci", "$si");
  572. cache_store("local", "source_port_$ci", "$sp");
  573. cache_store("local", "dest_ip_$ci", "$var(dest_ip)");
  574. cache_store("local", "dest_port_$ci", "$var(dest_port)");
  575. cache_store("local", "recv_port_$ci", "$Rp");
  576. cache_store("local", "send_port_$ci", "$var(send_port)");
  577. cache_store("local", "recv_ip_$ci", "$Ri");
  578. */
  579. if (is_present_hf("Contact"))
  580. {
  581. if (subst('/^Contact:(.+)sip:(.+)@([0-9.:]+)(.+)$/Contact:\1sip:\2@$Ri:$var(send_port)\4/i')) {};
  582. }
  583. if (subst('/^From:(.+)sip:(.+)@([0-9.:]+)(.+)$/From:\1sip:\2@$Ri:$var(send_port)\4/i')) {};
  584. if (subst('/^To:(.+)sip:(.+)@([0-9.:]+)(.+)$/To:\1sip:\2@$var(dest_ip):$var(dest_port)\4/i')) {};
  585.  
  586. #add_isup_iam();
  587.  
  588. # modify SIP Request's URI because dest uri has been changed
  589. $ru = "sip:" + $rU + "@" + $var(dest_ip) + ":" + $var(dest_port);
  590.  
  591. # set the forced socket for message sending (proto:ip:port)
  592. $fs = "udp:" + $Ri + ":" + $var(send_port);
  593.  
  594. xlog("L_INFO", "@@@ ru = $ru");
  595. xlog("L_INFO", "@@@ fs = $fs");
  596.  
  597. $var(invite_deal) = 1;
  598. }
  599.  
  600. # invite message from other node (not freeswitch or msce)
  601. if ($var(invite_deal) == 0) {
  602. xlog("L_ERR", "@@@ Error src ip:port = $si:$sp, call-id = $ci");
  603.  
  604. # send 404 reply to src node
  605. sl_send_reply("404","Not Found");
  606. exit;
  607. }
  608.  
  609. # NON-INVITE
  610. } else {
  611. xlog("L_INFO", "@@@ NON-INVITE or INVITE has totag");
  612.  
  613. if (is_method("BYE")) {
  614. /*
  615. if (search("conf_addr")) {
  616. $var(conf_addr) = $(tu{uri.param,conf_addr});
  617. xlog("L_INFO", "%%%%% conf_addr: [$var(conf_addr)]");
  618. $var(conf_port) = $(tu{uri.param,conf_port});
  619. xlog("L_INFO", "%%%%% conf_port: [$var(conf_port)]");
  620.  
  621. # save from ip/port, dest ip/port
  622. $var(dest_ip) = $var(conf_addr);
  623. $var(dest_port) = $var(conf_port);
  624.  
  625. }
  626.  
  627. xlog("L_INFO", "%%%%% dest_ip111111: [$var(dest_ip)]");
  628. xlog("L_INFO", "%%%%% dest_port111111: [$var(dest_port)]");
  629. */
  630. if (t_newtran()) {
  631. xlog("L_ERR", "Send 200 OK to BYE! call_id = $ci");
  632. t_reply("200","OK");
  633. }
  634. xlog("L_INFO", "%%%%% dest_ip222222: [$var(dest_ip)]");
  635. xlog("L_INFO", "%%%%% dest_port222222: [$var(dest_port)]");
  636. }
  637.  
  638. $var(session_exist) = 0;
  639.  
  640. retrieve_dialog();
  641.  
  642. if ($DLG_status==NULL) {
  643. xlog("L_ERR", "@@@ No dialog exist on request route, method = $rm, call-id = $ci");
  644. /*
  645. avp_delete("$avp(i:1002)/g");
  646. avp_delete("$avp(i:1003)/g");
  647. avp_delete("$avp(i:1004)/g");
  648. avp_delete("$avp(i:1005)/g");
  649. avp_delete("$avp(i:1006)/g");
  650. avp_delete("$avp(i:1007)/g");
  651.  
  652. cache_fetch("local", "source_ip_$ci", $avp(i:1001));
  653. cache_fetch("local", "source_port_$ci", $avp(i:1002));
  654. cache_fetch("local", "dest_ip_$ci", $avp(i:1003));
  655. cache_fetch("local", "dest_port_$ci", $avp(i:1004));
  656. cache_fetch("local", "recv_port_$ci", $avp(i:1005));
  657. cache_fetch("local", "send_port_$ci", $avp(i:1006));
  658. cache_fetch("local", "recv_ip_$ci", $avp(i:1007));
  659.  
  660. if ($avp(i:1001)==NULL || $avp(i:1002)==NULL ||
  661. $avp(i:1003)==NULL || $avp(i:1004)==NULL ||
  662. $avp(i:1005)==NULL || $avp(i:1006)==NULL ||
  663. $avp(i:1007)==NULL)
  664. {
  665. xlog("L_ERR", "### cache fetch error.");
  666. # send 481 reply to src node
  667. sl_send_reply("481","Call/Transaction Does Not Exist");
  668. exit;
  669. }
  670.  
  671. $var(reply_src_ip) = $avp(i:1001);
  672. $var(reply_src_port) = $avp(i:1002);
  673. $var(reply_dest_ip) = $avp(i:1003);
  674. $var(reply_dest_port) = $avp(i:1004);
  675. $var(reply_recv_port) = $avp(i:1005);
  676. $var(reply_send_port) = $avp(i:1006);
  677. $var(reply_recv_ip) = $avp(i:1007);
  678. */
  679. $var(session_exist) = 1;
  680. } else {
  681. $var(dlg_status) = $DLG_status;
  682. xlog("L_INFO", "### DLG_status = $var(dlg_status)");
  683.  
  684. fetch_dlg_value("dlg_source_ip","$var(req_src_ip)");
  685. fetch_dlg_value("dlg_source_port","$var(req_src_port)");
  686. fetch_dlg_value("dlg_dest_ip","$var(req_dest_ip)");
  687. fetch_dlg_value("dlg_dest_port","$var(req_dest_port)");
  688. fetch_dlg_value("dlg_send_port", "$var(req_send_port)");
  689. fetch_dlg_value("dlg_recv_port", "$var(req_recv_port)");
  690. fetch_dlg_value("dlg_recv_ip", "$var(req_recv_ip)");
  691.  
  692. xlog("L_INFO", "======= fetch =======");
  693. xlog("L_INFO", "@@@ request_src_ip = $var(req_src_ip)");
  694. xlog("L_INFO", "@@@ request_src_port = $var(req_src_port)");
  695. xlog("L_INFO", "@@@ request_dest_ip = $var(req_dest_ip)");
  696. xlog("L_INFO", "@@@ request_dest_port = $var(req_dest_port)");
  697. xlog("L_INFO", "@@@ request_send_port = $var(req_send_port)");
  698. xlog("L_INFO", "@@@ request_recv_port = $var(req_recv_port)");
  699. xlog("L_INFO", "@@@ request_recv_ip = $var(req_recv_ip)");
  700.  
  701. $var(session_exist) = 1;
  702. }
  703.  
  704.  
  705. if ($var(session_exist)==1) {
  706. if (($si==$var(req_src_ip)) && ($sp==$(var(req_src_port){s.int}))){
  707. #if ($si==$var(req_src_ip)) {
  708. $var(sip_from_ip) = $var(req_recv_ip);
  709. $var(sip_from_port) = $var(req_send_port);
  710. $var(sip_to_ip) = $var(req_dest_ip);
  711. $var(sip_to_port) = $var(req_dest_port);
  712. } else {
  713. $var(sip_from_ip) = $var(req_recv_ip);
  714. $var(sip_from_port) = $var(req_recv_port);
  715. $var(sip_to_ip) = $var(req_src_ip);
  716. $var(sip_to_port) = $var(req_src_port);
  717. }
  718.  
  719. xlog("L_INFO", "@@@ sip_from_ip = $var(sip_from_ip)");
  720. xlog("L_INFO", "@@@ sip_from_port = $var(sip_from_port)");
  721. xlog("L_INFO", "@@@ sip_to_ip = $var(sip_to_ip)");
  722. xlog("L_INFO", "@@@ sip_to_port = $var(sip_to_port)");
  723.  
  724. if (is_present_hf("Contact"))
  725. {
  726. if ($si==$var(req_src_ip)) {
  727. if (subst('/^Contact:(.*)sip:((.+)@)?([a-zA-Z0-9.:]+)(.+)$/Contact:\1sip:\2$var(reply_recv_ip):$var(reply_send_port)\5/i')){};
  728. #if (subst('/^Contact:(.+)sip:(.+)@([0-9.:]+)(.+)$/Contact:\1sip:\2@$var(req_recv_ip):$var(req_send_port)\4/i')) {};
  729. } else {
  730. if (subst('/^Contact:(.*)sip:((.+)@)?([a-zA-Z0-9.:]+)(.+)$/Contact:\1sip:\2$var(reply_recv_ip):$var(reply_recv_port)\5/i')){};
  731. #if (subst('/^Contact:(.+)sip:(.+)@([0-9.:]+)(.+)$/Contact:\1sip:\2@$var(req_recv_ip):$var(req_recv_port)\4/i')) {};
  732. }
  733. }
  734. if (subst('/^From:(.+)sip:(.+)@([0-9.:]+)(.+)$/From:\1sip:\2@$var(sip_from_ip):$var(sip_from_port)\4/i')) {};
  735. if (subst('/^To:(.+)sip:(.+)@([0-9.:]+)(.+)$/To:\1sip:\2@$var(sip_to_ip):$var(sip_to_port)\4/i')) {};
  736.  
  737. $var(sip_dest_uri) = "sip:" + $var(sip_to_ip) + ":" + $var(sip_to_port);
  738. rewrite_dst_ip_port("$var(sip_dest_uri)");
  739.  
  740. # modify SIP Request's URI because dest uri has been changed
  741. $ru = "sip:" + $rU + "@" + $var(sip_to_ip) + ":" + $var(sip_to_port);
  742.  
  743. # set the forced socket for message sending (proto:ip:port)
  744. $fs = "udp:" + $var(req_recv_ip) + ":" + $var(sip_from_port);
  745.  
  746. xlog("L_INFO", "@@@ sip_dest_uri = $var(sip_dest_uri)");
  747. xlog("L_INFO", "@@@ After rewrite du = $du");
  748. xlog("L_INFO", "@@@ fs = $fs");
  749. }
  750.  
  751. # BYE processing
  752. if (is_method("BYE")) {
  753.  
  754. }
  755.  
  756. # CANCEL processing
  757. if (is_method("CANCEL")) {
  758. if (t_check_trans())
  759. t_relay();
  760. exit;
  761. }
  762. }
  763.  
  764. #t_check_trans();
  765.  
  766. # record routing
  767. #if (!is_method("REGISTER|MESSAGE"))
  768. # record_route();
  769.  
  770. # account only INVITEs
  771. #if (is_method("INVITE")) {
  772. # setflag(1); # do accounting
  773. #}
  774.  
  775. route(1);
  776. }
  777.  
  778.  
  779. route[1] {
  780. # for INVITEs enable some additional helper routes
  781. if (is_method("INVITE") || is_method("CANCEL") || is_method("PRACK")) {
  782. t_on_branch("2");
  783. t_on_reply("2");
  784. t_on_failure("1");
  785. }
  786. if (is_method("REGISTER")) {
  787. t_on_reply("3");
  788. }
  789.  
  790. if (!t_relay()) {
  791. sl_reply_error();
  792. };
  793. exit;
  794. }
  795.  
  796.  
  797. onreply_route {
  798. xlog("L_INFO", " ");
  799. xlog("L_INFO", "### reply route = $rs");
  800. xlog("L_INFO", "### src_ip:port = $si:$sp");
  801. }
  802.  
  803.  
  804. branch_route[2] {
  805. xlog("L_INFO", "### branch route 2 : new branch at $ru\n");
  806. }
  807.  
  808.  
  809. onreply_route[2] {
  810. xlog("L_INFO", "### reply route 2 = $rs");
  811.  
  812. # From IMS
  813.  
  814. $var(dlg_status) = $DLG_status;
  815. xlog("L_INFO", "### DLG_status = $var(dlg_status)");
  816.  
  817. $var(session_exist) = 0;
  818.  
  819. if ($DLG_status==NULL) {
  820. xlog("L_ERR", "@@@ No dialog exist on reply route, call-id = $ci, status = $rs");
  821. /*
  822. avp_delete("$avp(i:1002)/g");
  823. avp_delete("$avp(i:1003)/g");
  824. avp_delete("$avp(i:1004)/g");
  825. avp_delete("$avp(i:1005)/g");
  826. avp_delete("$avp(i:1006)/g");
  827. avp_delete("$avp(i:1007)/g");
  828.  
  829. cache_fetch("local", "source_ip_$ci", $avp(i:1001));
  830. cache_fetch("local", "source_port_$ci", $avp(i:1002));
  831. cache_fetch("local", "dest_ip_$ci", $avp(i:1003));
  832. cache_fetch("local", "dest_port_$ci", $avp(i:1004));
  833. cache_fetch("local", "recv_port_$ci", $avp(i:1005));
  834. cache_fetch("local", "send_port_$ci", $avp(i:1006));
  835. cache_fetch("local", "recv_ip_$ci", $avp(i:1007));
  836.  
  837. if ($avp(i:1001)==NULL || $avp(i:1002)==NULL ||
  838. $avp(i:1003)==NULL || $avp(i:1004)==NULL ||
  839. $avp(i:1005)==NULL || $avp(i:1006)==NULL ||
  840. $avp(i:1007)==NULL)
  841. {
  842. xlog("L_ERR", "### cache fetch error.");
  843. }
  844. else
  845. {
  846. $var(reply_src_ip) = $avp(i:1001);
  847. $var(reply_src_port) = $avp(i:1002);
  848. $var(reply_dest_ip) = $avp(i:1003);
  849. $var(reply_dest_port) = $avp(i:1004);
  850. $var(reply_recv_port) = $avp(i:1005);
  851. $var(reply_send_port) = $avp(i:1006);
  852. $var(reply_recv_ip) = $avp(i:1007);
  853.  
  854. $var(session_exist) = 1;
  855. }
  856. */
  857. } else {
  858. fetch_dlg_value("dlg_source_ip","$var(reply_src_ip)");
  859. fetch_dlg_value("dlg_source_port","$var(reply_src_port)");
  860. fetch_dlg_value("dlg_dest_ip","$var(reply_dest_ip)");
  861. fetch_dlg_value("dlg_dest_port","$var(reply_dest_port)");
  862. fetch_dlg_value("dlg_recv_port", "$var(reply_recv_port)");
  863. fetch_dlg_value("dlg_send_port", "$var(reply_send_port)");
  864. fetch_dlg_value("dlg_recv_ip", "$var(reply_recv_ip)");
  865.  
  866. xlog("L_INFO", "======= fetch =======");
  867. xlog("L_INFO", "### reply_src_ip = $var(reply_src_ip)");
  868. xlog("L_INFO", "### reply_src_port = $var(reply_src_port)");
  869. xlog("L_INFO", "### reply_dest_ip = $var(reply_dest_ip)");
  870. xlog("L_INFO", "### reply_dest_port = $var(reply_dest_port)");
  871. xlog("L_INFO", "### reply_recv_port = $var(reply_recv_port)");
  872. xlog("L_INFO", "### reply_send_port = $var(reply_send_port)");
  873. xlog("L_INFO", "### reply_recv_ip = $var(reply_recv_ip)");
  874.  
  875. $var(session_exist) = 1;
  876. }
  877.  
  878. if ($var(session_exist)==1) {
  879. if ($si==$var(reply_src_ip)) {
  880. $var(sip_from_ip) = $var(reply_dest_ip);
  881. $var(sip_from_port) = $var(reply_dest_port);
  882. $var(sip_to_ip) = $var(reply_recv_ip);
  883. $var(sip_to_port) = $var(reply_send_port);
  884. } else {
  885. $var(sip_from_ip) = $var(reply_src_ip);
  886. $var(sip_from_port) = $var(reply_src_port);
  887. $var(sip_to_ip) = $var(reply_recv_ip);
  888. $var(sip_to_port) = $var(reply_recv_port);
  889. }
  890.  
  891. if (is_present_hf("Contact"))
  892. {
  893. if ($si==$var(req_src_ip)) {
  894. if (subst('/^Contact:(.+)sip:(.+)@([0-9.:]+)(.+)$/Contact:\1sip:\2@$var(reply_recv_ip):$var(reply_send_port)\4/i')) {};
  895. } else {
  896. if (subst('/^Contact:(.+)sip:(.+)@([0-9.:]+)(.+)$/Contact:\1sip:\2@$var(reply_recv_ip):$var(reply_recv_port)\4/i')) {};
  897. }
  898. }
  899. if (subst('/^From:(.+)sip:(.+)@([0-9.:]+)(.+)$/From:\1sip:\2@$var(sip_from_ip):$var(sip_from_port)\4/i')) {};
  900. if (subst('/^To:(.+)sip:(.+)@([0-9.:]+)(.+)$/To:\1sip:\2@$var(sip_to_ip):$var(sip_to_port)\4/i')) {};
  901. }
  902.  
  903. # remove cache when dialog end
  904. if (is_method("BYE") && status=="200") {
  905. cache_remove("local", "source_ip_$ci");
  906. cache_remove("local", "source_port_$ci");
  907. cache_remove("local", "dest_ip_$ci");
  908. cache_remove("local", "dest_port_$ci");
  909. cache_remove("local", "recv_port_$ci");
  910. cache_remove("local", "send_port_$ci");
  911. cache_remove("local", "recv_ip_$ci");
  912. }
  913. }
  914.  
  915. onreply_route[3] {
  916. xlog("L_INFO", "REGISTER 200 OK");
  917. }
  918.  
  919. failure_route[1] {
  920. xlog("L_ERR", "### failure_route src ip:port = $si:$sp, call-id = $ci, status = $rs");
  921.  
  922. # disable the failure destination
  923. #lb_disable();
  924.  
  925. if (t_was_cancelled()) {
  926. exit;
  927. }
  928. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement