Advertisement
Guest User

Untitled

a guest
Mar 24th, 2014
331
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!define WITH_MYSQL
  2. #!define WITH_AUTH
  3. #!define WITH_USRLOCDB
  4. #!define WITH_ALIASDB
  5. #!define WITH_VOICEMAIL
  6. #!define WITH_FREESWITCH # limark Freeswitch Integration
  7.  
  8. #!ifdef ACCDB_COMMENT
  9. ALTER TABLE acc ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT '';
  10. ALTER TABLE acc ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT '';
  11. ALTER TABLE acc ADD COLUMN src_ip varchar(64) NOT NULL default '';
  12. ALTER TABLE acc ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT '';
  13. ALTER TABLE acc ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT '';
  14. ALTER TABLE acc ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT '';
  15. ALTER TABLE missed_calls ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT '';
  16. ALTER TABLE missed_calls ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT '';
  17. ALTER TABLE missed_calls ADD COLUMN src_ip varchar(64) NOT NULL default '';
  18. ALTER TABLE missed_calls ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT '';
  19. ALTER TABLE missed_calls ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT '';
  20. ALTER TABLE missed_calls ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT '';
  21. #!endif
  22.  
  23. ####### Include Local Config If Exists #########
  24. import_file "kamailio-local.cfg"
  25.  
  26. ####### Defined Values #########
  27.  
  28. # *** Value defines - IDs used later in config
  29. #!ifdef WITH_MYSQL
  30. # - database URL - used to connect to database server by modules such
  31. # as: auth_db, acc, usrloc, a.s.o.
  32. #!ifndef DBURL
  33. #!define DBURL "mysql://kamailio:kamailiorw@localhost/kamailio"
  34. #!endif
  35. #!endif
  36. #!ifdef WITH_MULTIDOMAIN
  37. # - the value for 'use_domain' parameters
  38. #!define MULTIDOMAIN 1
  39. #!else
  40. #!define MULTIDOMAIN 0
  41. #!endif
  42.  
  43. # - flags
  44. # FLT_ - per transaction (message) flags
  45. # FLB_ - per branch flags
  46. #!define FLT_ACC 1
  47. #!define FLT_ACCMISSED 2
  48. #!define FLT_ACCFAILED 3
  49. #!define FLT_NATS 5
  50.  
  51. #!define FLB_NATB 6
  52. #!define FLB_NATSIPPING 7
  53.  
  54. ####### Global Parameters #########
  55.  
  56. #!ifdef WITH_DEBUG
  57. debug=4
  58. log_stderror=yes
  59. #!else
  60. debug=2
  61. log_stderror=no
  62. #!endif
  63.  
  64. memdbg=5
  65. memlog=5
  66.  
  67. log_facility=LOG_LOCAL0
  68.  
  69. fork=yes
  70. children=4
  71.  
  72. /* uncomment the next line to disable TCP (default on) */
  73. #disable_tcp=yes
  74.  
  75. /* uncomment the next line to disable the auto discovery of local aliases
  76. based on reverse DNS on IPs (default on) */
  77. #auto_aliases=no
  78.  
  79. /* add local domain aliases */
  80. #alias="sip.mydomain.com"
  81.  
  82. /* uncomment and configure the following line if you want Kamailio to
  83. bind on a specific interface/port/proto (default bind on all available) */
  84. #listen=udp:10.0.0.10:5060
  85.  
  86. /* port to listen to
  87. * - can be specified more than once if needed to listen on many ports */
  88. port=5060
  89.  
  90. #!ifdef WITH_TLS
  91. enable_tls=yes
  92. #!endif
  93.  
  94. # life time of TCP connection when there is no traffic
  95. # - a bit higher than registration expires to cope with UA behind NAT
  96. tcp_connection_lifetime=3605
  97.  
  98. #!ifdef WITH_XHTTP
  99. tcp_accept_no_cl=yes
  100. #!endif
  101.  
  102. ####### Custom Parameters #########
  103.  
  104. # These parameters can be modified runtime via RPC interface
  105. # - see the documentation of 'cfg_rpc' module.
  106. #
  107. # Format: group.id = value 'desc' description
  108. # Access: $sel(cfg_get.group.id) or @cfg_get.group.id
  109. #
  110.  
  111. #!ifdef WITH_PSTN
  112. # PSTN GW Routing
  113. #
  114. # - pstn.gw_ip: valid IP or hostname as string value, example:
  115. # pstn.gw_ip = "10.0.0.101" desc "My PSTN GW Address"
  116. #
  117. # - by default is empty to avoid misrouting
  118. pstn.gw_ip = "" desc "PSTN GW Address"
  119. pstn.gw_port = "" desc "PSTN GW Port"
  120. #!endif
  121.  
  122. # limark Freeswitch Integration
  123. #!ifdef WITH_FREESWITCH
  124. freeswitch.bindip = "192.168.1.111" desc "FreeSWITCH IP Address"
  125. freeswitch.bindport = "5060" desc "FreeSWITCH Port"
  126. #!endif
  127.  
  128. #!ifdef WITH_VOICEMAIL
  129. # VoiceMail Routing on offline, busy or no answer
  130. #
  131. # - by default Voicemail server IP is empty to avoid misrouting
  132. voicemail.srv_ip = "" desc "VoiceMail IP Address"
  133. voicemail.srv_port = "5060" desc "VoiceMail Port"
  134. #!endif
  135.  
  136. ####### Modules Section ########
  137.  
  138. # set paths to location of modules (to sources or installation folders)
  139. #!ifdef WITH_SRCPATH
  140. mpath="modules_k:modules"
  141. #!else
  142. mpath="/usr/local/lib/kamailio/modules_k/:/usr/lib/kamailio/modules/"
  143. #!endif
  144.  
  145. #!ifdef WITH_MYSQL
  146. loadmodule "db_mysql.so"
  147. #!endif
  148.  
  149. loadmodule "mi_fifo.so"
  150. loadmodule "kex.so"
  151. loadmodule "corex.so"
  152. loadmodule "tm.so"
  153. loadmodule "tmx.so"
  154. loadmodule "sl.so"
  155. loadmodule "rr.so"
  156. loadmodule "pv.so"
  157. loadmodule "maxfwd.so"
  158. loadmodule "usrloc.so"
  159. loadmodule "registrar.so"
  160. loadmodule "textops.so"
  161. loadmodule "siputils.so"
  162. loadmodule "xlog.so"
  163. loadmodule "sanity.so"
  164. loadmodule "ctl.so"
  165. loadmodule "cfg_rpc.so"
  166. loadmodule "mi_rpc.so"
  167. loadmodule "acc.so"
  168.  
  169. #!ifdef WITH_AUTH
  170. loadmodule "auth.so"
  171. loadmodule "auth_db.so"
  172. #!ifdef WITH_IPAUTH
  173. loadmodule "permissions.so"
  174. #!endif
  175. #!endif
  176.  
  177. #!ifdef WITH_ALIASDB
  178. loadmodule "alias_db.so"
  179. #!endif
  180.  
  181. #!ifdef WITH_SPEEDDIAL
  182. loadmodule "speeddial.so"
  183. #!endif
  184.  
  185. #!ifdef WITH_MULTIDOMAIN
  186. loadmodule "domain.so"
  187. #!endif
  188.  
  189. #!ifdef WITH_PRESENCE
  190. loadmodule "presence.so"
  191. loadmodule "presence_xml.so"
  192. #!endif
  193.  
  194. #!ifdef WITH_NAT
  195. loadmodule "nathelper.so"
  196. loadmodule "rtpproxy.so"
  197. #!endif
  198.  
  199. #!ifdef WITH_TLS
  200. loadmodule "tls.so"
  201. #!endif
  202.  
  203. #!ifdef WITH_ANTIFLOOD
  204. loadmodule "htable.so"
  205. loadmodule "pike.so"
  206. #!endif
  207.  
  208. #!ifdef WITH_XMLRPC
  209. loadmodule "xmlrpc.so"
  210. #!endif
  211.  
  212. #!ifdef WITH_DEBUG
  213. loadmodule "debugger.so"
  214. #!endif
  215.  
  216. #!ifdef WITH_XHTTP
  217. loadmodule "xhttp.so"
  218. #!endif
  219.  
  220. #!ifdef WITH_XHTTP_RPC
  221. loadmodule "xhttp_rpc.so"
  222. #!endif
  223.  
  224. #!ifdef WITH_XHTTP_PI
  225. loadmodule "xhttp_pi.so"
  226. #!endif
  227.  
  228. # ----------------- setting module-specific parameters ---------------
  229.  
  230.  
  231. # ----- mi_fifo params -----
  232. modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")
  233.  
  234.  
  235. # ----- tm params -----
  236. # auto-discard branches from previous serial forking leg
  237. modparam("tm", "failure_reply_mode", 3)
  238. # default retransmission timeout: 30sec
  239. modparam("tm", "fr_timer", 30000)
  240. # default invite retransmission timeout after 1xx: 120sec
  241. modparam("tm", "fr_inv_timer", 120000)
  242.  
  243.  
  244. # ----- rr params -----
  245. # add value to ;lr param to cope with most of the UAs
  246. modparam("rr", "enable_full_lr", 1)
  247. # do not append from tag to the RR (no need for this script)
  248. modparam("rr", "append_fromtag", 0)
  249.  
  250.  
  251. # ----- registrar params -----
  252. modparam("registrar", "method_filtering", 1)
  253. /* uncomment the next line to disable parallel forking via location */
  254. # modparam("registrar", "append_branches", 0)
  255. /* uncomment the next line not to allow more than 10 contacts per AOR */
  256. #modparam("registrar", "max_contacts", 10)
  257. # max value for expires of registrations
  258. modparam("registrar", "max_expires", 3600)
  259. # set it to 1 to enable GRUU
  260. modparam("registrar", "gruu_enabled", 0)
  261.  
  262.  
  263. # ----- acc params -----
  264. /* what special events should be accounted ? */
  265. modparam("acc", "early_media", 0)
  266. modparam("acc", "report_ack", 0)
  267. modparam("acc", "report_cancels", 0)
  268. /* by default ww do not adjust the direct of the sequential requests.
  269. if you enable this parameter, be sure the enable "append_fromtag"
  270. in "rr" module */
  271. modparam("acc", "detect_direction", 0)
  272. /* account triggers (flags) */
  273. modparam("acc", "log_flag", FLT_ACC)
  274. modparam("acc", "log_missed_flag", FLT_ACCMISSED)
  275. modparam("acc", "log_extra",
  276. "src_user=$fU;src_domain=$fd;src_ip=$si;"
  277. "dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")
  278. modparam("acc", "failed_transaction_flag", FLT_ACCFAILED)
  279. /* enhanced DB accounting */
  280. #!ifdef WITH_ACCDB
  281. modparam("acc", "db_flag", FLT_ACC)
  282. modparam("acc", "db_missed_flag", FLT_ACCMISSED)
  283. modparam("acc", "db_url", DBURL)
  284. modparam("acc", "db_extra",
  285. "src_user=$fU;src_domain=$fd;src_ip=$si;"
  286. "dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")
  287. #!endif
  288.  
  289.  
  290. # ----- usrloc params -----
  291. /* enable DB persistency for location entries */
  292. #!ifdef WITH_USRLOCDB
  293. modparam("usrloc", "db_url", DBURL)
  294. modparam("usrloc", "db_mode", 2)
  295. modparam("usrloc", "use_domain", MULTIDOMAIN)
  296. #!endif
  297.  
  298.  
  299. # ----- auth_db params -----
  300. #!ifdef WITH_AUTH
  301. modparam("auth_db", "db_url", DBURL)
  302. modparam("auth_db", "calculate_ha1", yes)
  303. modparam("auth_db", "password_column", "password")
  304. modparam("auth_db", "load_credentials", "")
  305. modparam("auth_db", "use_domain", MULTIDOMAIN)
  306.  
  307. # ----- permissions params -----
  308. #!ifdef WITH_IPAUTH
  309. modparam("permissions", "db_url", DBURL)
  310. modparam("permissions", "db_mode", 1)
  311. #!endif
  312.  
  313. #!endif
  314.  
  315.  
  316. # ----- alias_db params -----
  317. #!ifdef WITH_ALIASDB
  318. modparam("alias_db", "db_url", DBURL)
  319. modparam("alias_db", "use_domain", MULTIDOMAIN)
  320. #!endif
  321.  
  322.  
  323. # ----- speeddial params -----
  324. #!ifdef WITH_SPEEDDIAL
  325. modparam("speeddial", "db_url", DBURL)
  326. modparam("speeddial", "use_domain", MULTIDOMAIN)
  327. #!endif
  328.  
  329.  
  330. # ----- domain params -----
  331. #!ifdef WITH_MULTIDOMAIN
  332. modparam("domain", "db_url", DBURL)
  333. # register callback to match myself condition with domains list
  334. modparam("domain", "register_myself", 1)
  335. #!endif
  336.  
  337.  
  338. #!ifdef WITH_PRESENCE
  339. # ----- presence params -----
  340. modparam("presence", "db_url", DBURL)
  341.  
  342. # ----- presence_xml params -----
  343. modparam("presence_xml", "db_url", DBURL)
  344. modparam("presence_xml", "force_active", 1)
  345. #!endif
  346.  
  347.  
  348. #!ifdef WITH_NAT
  349. # ----- rtpproxy params -----
  350. modparam("rtpproxy", "rtpproxy_sock", "udp:127.0.0.1:7722")
  351.  
  352. # ----- nathelper params -----
  353. modparam("nathelper", "natping_interval", 30)
  354. modparam("nathelper", "ping_nated_only", 1)
  355. modparam("nathelper", "sipping_bflag", FLB_NATSIPPING)
  356. modparam("nathelper", "sipping_from", "sip:pinger@kamailio.org")
  357.  
  358. # params needed for NAT traversal in other modules
  359. modparam("nathelper|registrar", "received_avp", "$avp(RECEIVED)")
  360. modparam("usrloc", "nat_bflag", FLB_NATB)
  361. #!endif
  362.  
  363.  
  364. #!ifdef WITH_TLS
  365. # ----- tls params -----
  366. modparam("tls", "config", "/etc/kamailio/tls.cfg")
  367. #!endif
  368.  
  369. #!ifdef WITH_ANTIFLOOD
  370. # ----- pike params -----
  371. modparam("pike", "sampling_time_unit", 2)
  372. modparam("pike", "reqs_density_per_unit", 16)
  373. modparam("pike", "remove_latency", 4)
  374.  
  375. # ----- htable params -----
  376. # ip ban htable with autoexpire after 5 minutes
  377. modparam("htable", "htable", "ipban=>size=8;autoexpire=300;")
  378. #!endif
  379.  
  380. #!ifdef WITH_XMLRPC
  381. # ----- xmlrpc params -----
  382. modparam("xmlrpc", "route", "XMLRPC");
  383. modparam("xmlrpc", "url_match", "^/RPC")
  384. #!endif
  385.  
  386. #!ifdef WITH_DEBUG
  387. # ----- debugger params -----
  388. modparam("debugger", "cfgtrace", 1)
  389. #!endif
  390.  
  391. #!ifdef WITH_XHTTP_RPC
  392. modparam("xhttp_rpc", "xhttp_rpc_root", "http_rpc")
  393. #!endif
  394.  
  395. #!ifdef WITH_XHTTP_PI
  396. modparam("xhttp_pi", "xhttp_pi_root", "http_pi")
  397. modparam("xhttp_pi", "framework", "/etc/kamailio/pi_framework.xml")
  398. #!endif
  399.  
  400. ####### Routing Logic ########
  401.  
  402.  
  403. # Main SIP request routing logic
  404. # - processing of any incoming SIP request starts with this route
  405. # - note: this is the same as route { ... }
  406. request_route {
  407.  
  408. # per request initial checks
  409. route(REQINIT);
  410.  
  411. # NAT detection
  412. route(NATDETECT);
  413.  
  414. # CANCEL processing
  415. if (is_method("CANCEL"))
  416. {
  417. if (t_check_trans())
  418. t_relay();
  419. exit;
  420. }
  421.  
  422. # handle requests within SIP dialogs
  423. route(WITHINDLG);
  424.  
  425. ### only initial requests (no To tag)
  426.  
  427. t_check_trans();
  428.  
  429. # authentication
  430. route(AUTH);
  431.  
  432. # record routing for dialog forming requests (in case they are routed)
  433. # - remove preloaded route headers
  434. remove_hf("Route");
  435. if (is_method("INVITE|SUBSCRIBE"))
  436. record_route();
  437.  
  438. # account only INVITEs
  439. if (is_method("INVITE"))
  440. {
  441. setflag(FLT_ACC); # do accounting
  442. }
  443.  
  444. # dispatch requests to foreign domains
  445. route(SIPOUT);
  446.  
  447. ### requests for my local domains
  448.  
  449. # handle presence related requests
  450. route(PRESENCE);
  451.  
  452. # handle registrations
  453. route(REGISTRAR);
  454.  
  455. if ($rU==$null)
  456. {
  457. # request with no Username in RURI
  458. sl_send_reply("484","Address Incomplete");
  459. exit;
  460. }
  461.  
  462. # dispatch destinations to PSTN
  463. route(PSTN);
  464.  
  465. # limark Freeswitch Integration
  466. #!ifdef WITH_FREESWITCH
  467. # save callee ID
  468. $avp(callee) = $rU;
  469. route(FSDISPATCH);
  470. #!endif
  471.  
  472. # user location service
  473. route(LOCATION);
  474.  
  475. route(RELAY);
  476. }
  477.  
  478.  
  479. route[RELAY] {
  480.  
  481. # enable additional event routes for forwarded requests
  482. # - serial forking, RTP relaying handling, a.s.o.
  483. if (is_method("INVITE|BYE|SUBSCRIBE|UPDATE")) {
  484. if(!t_is_set("branch_route")) t_on_branch("MANAGE_BRANCH");
  485. }
  486. if (is_method("INVITE|SUBSCRIBE|UPDATE")) {
  487. if(!t_is_set("onreply_route")) t_on_reply("MANAGE_REPLY");
  488. }
  489. if (is_method("INVITE")) {
  490. if(!t_is_set("failure_route")) t_on_failure("MANAGE_FAILURE");
  491. }
  492.  
  493. if (!t_relay()) {
  494. sl_reply_error();
  495. }
  496. exit;
  497. }
  498.  
  499. # Per SIP request initial checks
  500. route[REQINIT] {
  501. #!ifdef WITH_ANTIFLOOD
  502. # flood dection from same IP and traffic ban for a while
  503. # be sure you exclude checking trusted peers, such as pstn gateways
  504. # - local host excluded (e.g., loop to self)
  505. if(src_ip!=myself)
  506. {
  507. if($sht(ipban=>$si)!=$null)
  508. {
  509. # ip is already blocked
  510. xdbg("request from blocked IP - $rm from $fu (IP:$si:$sp)\n");
  511. exit;
  512. }
  513. if (!pike_check_req())
  514. {
  515. xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)\n");
  516. $sht(ipban=>$si) = 1;
  517. exit;
  518. }
  519. }
  520. #!endif
  521.  
  522. if (!mf_process_maxfwd_header("10")) {
  523. sl_send_reply("483","Too Many Hops");
  524. exit;
  525. }
  526.  
  527. if(!sanity_check("1511", "7"))
  528. {
  529. xlog("Malformed SIP message from $si:$sp\n");
  530. exit;
  531. }
  532. }
  533.  
  534. # Handle requests within SIP dialogs
  535. route[WITHINDLG] {
  536. if (has_totag()) {
  537. # sequential request withing a dialog should
  538. # take the path determined by record-routing
  539. if (loose_route()) {
  540. route(DLGURI);
  541. if (is_method("BYE")) {
  542. setflag(FLT_ACC); # do accounting ...
  543. setflag(FLT_ACCFAILED); # ... even if the transaction fails
  544. }
  545. else if ( is_method("ACK") ) {
  546. # ACK is forwarded statelessy
  547. route(NATMANAGE);
  548. }
  549. else if ( is_method("NOTIFY") ) {
  550. # Add Record-Route for in-dialog NOTIFY as per RFC 6665.
  551. record_route();
  552. }
  553. route(RELAY);
  554. } else {
  555. if (is_method("SUBSCRIBE") && uri == myself) {
  556. # in-dialog subscribe requests
  557. route(PRESENCE);
  558. exit;
  559. }
  560. if ( is_method("ACK") ) {
  561. if ( t_check_trans() ) {
  562. # no loose-route, but stateful ACK;
  563. # must be an ACK after a 487
  564. # or e.g. 404 from upstream server
  565. t_relay();
  566. exit;
  567. } else {
  568. # ACK without matching transaction ... ignore and discard
  569. exit;
  570. }
  571. }
  572. sl_send_reply("404","Not here");
  573. }
  574. exit;
  575. }
  576. }
  577.  
  578. # Handle SIP registrations
  579. route[REGISTRAR] {
  580. if (is_method("REGISTER"))
  581. {
  582. if(isflagset(FLT_NATS))
  583. {
  584. setbflag(FLB_NATB);
  585. # uncomment next line to do SIP NAT pinging
  586. ## setbflag(FLB_NATSIPPING);
  587. }
  588. if (!save("location"))
  589. sl_reply_error();
  590.  
  591. exit;
  592. }
  593. }
  594.  
  595. # USER location service
  596. route[LOCATION] {
  597.  
  598. #!ifdef WITH_SPEEDDIAL
  599. # search for short dialing - 2-digit extension
  600. if($rU=~"^[0-9][0-9]$")
  601. if(sd_lookup("speed_dial"))
  602. route(SIPOUT);
  603. #!endif
  604.  
  605. #!ifdef WITH_ALIASDB
  606. # search in DB-based aliases
  607. if(alias_db_lookup("dbaliases"))
  608. route(SIPOUT);
  609. #!endif
  610.  
  611. $avp(oexten) = $rU;
  612. if (!lookup("location")) {
  613. $var(rc) = $rc;
  614. route(TOVOICEMAIL);
  615. t_newtran();
  616. switch ($var(rc)) {
  617. case -1:
  618. case -3:
  619. send_reply("404", "Not Found");
  620. exit;
  621. case -2:
  622. send_reply("405", "Method Not Allowed");
  623. exit;
  624. }
  625. }
  626.  
  627. # when routing via usrloc, log the missed calls also
  628. if (is_method("INVITE"))
  629. {
  630. setflag(FLT_ACCMISSED);
  631. }
  632. }
  633.  
  634. # Presence server route
  635. route[PRESENCE] {
  636. if(!is_method("PUBLISH|SUBSCRIBE"))
  637. return;
  638.  
  639. #!ifdef WITH_PRESENCE
  640. if (!t_newtran())
  641. {
  642. sl_reply_error();
  643. exit;
  644. };
  645.  
  646. if(is_method("PUBLISH"))
  647. {
  648. handle_publish();
  649. t_release();
  650. }
  651. else
  652. if( is_method("SUBSCRIBE"))
  653. {
  654. handle_subscribe();
  655. t_release();
  656. }
  657. exit;
  658. #!endif
  659.  
  660. # if presence enabled, this part will not be executed
  661. if (is_method("PUBLISH") || $rU==$null)
  662. {
  663. sl_send_reply("404", "Not here");
  664. exit;
  665. }
  666. return;
  667. }
  668.  
  669. # Authentication route
  670. route[AUTH] {
  671. #!ifdef WITH_AUTH
  672.  
  673. # limark Freeswitch Integration
  674. #!ifdef WITH_FREESWITCH
  675. if(route(FSINBOUND))
  676. return;
  677. #!endif
  678.  
  679.  
  680. #!ifdef WITH_IPAUTH
  681. if((!is_method("REGISTER")) && allow_source_address())
  682. {
  683. # source IP allowed
  684. return;
  685. }
  686. #!endif
  687.  
  688. if (is_method("REGISTER") || from_uri==myself)
  689. {
  690. # authenticate requests
  691. if (!auth_check("$fd", "subscriber", "1")) {
  692. auth_challenge("$fd", "0");
  693. exit;
  694. }
  695. # user authenticated - remove auth header
  696. if(!is_method("REGISTER|PUBLISH"))
  697. consume_credentials();
  698. }
  699. # if caller is not local subscriber, then check if it calls
  700. # a local destination, otherwise deny, not an open relay here
  701. if (from_uri!=myself && uri!=myself)
  702. {
  703. sl_send_reply("403","Not relaying");
  704. exit;
  705. }
  706.  
  707. #!endif
  708. return;
  709. }
  710.  
  711. # Caller NAT detection route
  712. route[NATDETECT] {
  713. #!ifdef WITH_NAT
  714. force_rport();
  715. if (nat_uac_test("19")) {
  716. if (is_method("REGISTER")) {
  717. fix_nated_register();
  718. } else {
  719. add_contact_alias();
  720. }
  721. setflag(FLT_NATS);
  722. }
  723. #!endif
  724. return;
  725. }
  726.  
  727. # RTPProxy control
  728. route[NATMANAGE] {
  729. #!ifdef WITH_NAT
  730. if (is_request()) {
  731. if(has_totag()) {
  732. if(check_route_param("nat=yes")) {
  733. setbflag(FLB_NATB);
  734. }
  735. }
  736. }
  737. if (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB)))
  738. return;
  739.  
  740. rtpproxy_manage();
  741.  
  742. if (is_request()) {
  743. if (!has_totag()) {
  744. add_rr_param(";nat=yes");
  745. }
  746. }
  747. if (is_reply()) {
  748. if(isbflagset(FLB_NATB)) {
  749. add_contact_alias();
  750. }
  751. }
  752. #!endif
  753. return;
  754. }
  755.  
  756. # URI update for dialog requests
  757. route[DLGURI] {
  758. #!ifdef WITH_NAT
  759. if(!isdsturiset()) {
  760. handle_ruri_alias();
  761. }
  762. #!endif
  763. return;
  764. }
  765.  
  766. # Routing to foreign domains
  767. route[SIPOUT] {
  768. if (!uri==myself)
  769. {
  770. append_hf("P-hint: outbound\r\n");
  771. route(RELAY);
  772. }
  773. }
  774.  
  775. # PSTN GW routing
  776. route[PSTN] {
  777. #!ifdef WITH_PSTN
  778. # check if PSTN GW IP is defined
  779. if (strempty($sel(cfg_get.pstn.gw_ip))) {
  780. xlog("SCRIPT: PSTN rotuing enabled but pstn.gw_ip not defined\n");
  781. return;
  782. }
  783.  
  784. # route to PSTN dialed numbers starting with '+' or '00'
  785. # (international format)
  786. # - update the condition to match your dialing rules for PSTN routing
  787. if(!($rU=~"^(\+|00)[1-9][0-9]{3,20}$"))
  788. return;
  789.  
  790. # only local users allowed to call
  791. if(from_uri!=myself) {
  792. sl_send_reply("403", "Not Allowed");
  793. exit;
  794. }
  795.  
  796. if (strempty($sel(cfg_get.pstn.gw_port))) {
  797. $ru = "sip:" + $rU + "@" + $sel(cfg_get.pstn.gw_ip);
  798. } else {
  799. $ru = "sip:" + $rU + "@" + $sel(cfg_get.pstn.gw_ip) + ":"
  800. + $sel(cfg_get.pstn.gw_port);
  801. }
  802.  
  803. route(RELAY);
  804. exit;
  805. #!endif
  806.  
  807. return;
  808. }
  809.  
  810. # XMLRPC routing
  811. #!ifdef WITH_XMLRPC
  812. route[XMLRPC] {
  813. # allow XMLRPC from localhost
  814. if ((method=="POST" || method=="GET")
  815. && (src_ip==127.0.0.1)) {
  816. # close connection only for xmlrpclib user agents (there is a bug in
  817. # xmlrpclib: it waits for EOF before interpreting the response).
  818. if ($hdr(User-Agent) =~ "xmlrpclib")
  819. set_reply_close();
  820. set_reply_no_connect();
  821. dispatch_rpc();
  822. exit;
  823. }
  824. send_reply("403", "Forbidden");
  825. exit;
  826. }
  827. #!endif
  828.  
  829. # limark Freeswitch Integration
  830. #!ifdef WITH_FREESWITCH
  831. # FreeSWITCH routing blocks
  832. route[FSINBOUND] {
  833. if($si== $sel(cfg_get.freeswitch.bindip)
  834. && $sp==$sel(cfg_get.freeswitch.bindport))
  835. return 1;
  836. return -1;
  837. }
  838.  
  839. route[FSDISPATCH] {
  840. if(!is_method("INVITE"))
  841. return;
  842. if(route(FSINBOUND))
  843. return;
  844.  
  845. # dial number selection
  846. switch($rU) {
  847. case /"^41$":
  848. # 41 - voicebox menu
  849. # allow only authenticated users
  850. if($au==$null)
  851. {
  852. sl_send_reply("403", "Not allowed");
  853. exit;
  854. }
  855. $rU = "vm-" + $au;
  856. break;
  857. case /"^441[0-9][0-9]$":
  858. # starting with 44 folowed by 1XY - direct call to voice box
  859. strip(2);
  860. route(FSVBOX);
  861. break;
  862. case /"^433[01][0-9][0-9]$":
  863. # starting with 433 folowed by (0|1)XY - conference
  864. strip(2);
  865. break;
  866. case /"^45[0-9]+$":
  867. strip(2);
  868. break;
  869. default:
  870. # offline - send to voicebox
  871. if (!registered("location"))
  872. {
  873. route(FSVBOX);
  874. exit;
  875. }
  876. # online - do bridging
  877. prefix("kb-");
  878. if(is_method("INVITE"))
  879. {
  880. # in case of failure - re-route to FreeSWITCH VoiceMail
  881. t_on_failure("FAIL_FSVBOX");
  882. }
  883. }
  884. route(FSRELAY);
  885. exit;
  886. }
  887.  
  888. route[FSVBOX] {
  889. if(!($rU=~"^1[0-9][0-9]+$"))
  890. return;
  891. prefix("vb-");
  892. route(FSRELAY);
  893. }
  894.  
  895. # Send to FreeSWITCH
  896. route[FSRELAY] {
  897. $du = "sip:" + $sel(cfg_get.freeswitch.bindip) + ":"
  898. + $sel(cfg_get.freeswitch.bindport);
  899. if($var(newbranch)==1)
  900. {
  901. append_branch();
  902. $var(newbranch) = 0;
  903. }
  904. route(RELAY);
  905. exit;
  906. }
  907.  
  908. #!endif
  909. # limark Freeswitch Integration stop
  910.  
  911.  
  912. # route to voicemail server
  913. route[TOVOICEMAIL] {
  914. #!ifdef WITH_VOICEMAIL
  915. if(!is_method("INVITE"))
  916. return;
  917.  
  918. # check if VoiceMail server IP is defined
  919. if (strempty($sel(cfg_get.voicemail.srv_ip))) {
  920. xlog("SCRIPT: VoiceMail rotuing enabled but IP not defined\n");
  921. return;
  922. }
  923. if($avp(oexten)==$null)
  924. return;
  925.  
  926. $ru = "sip:" + $avp(oexten) + "@" + $sel(cfg_get.voicemail.srv_ip)
  927. + ":" + $sel(cfg_get.voicemail.srv_port);
  928. route(RELAY);
  929. exit;
  930. #!endif
  931.  
  932. return;
  933. }
  934.  
  935. # manage outgoing branches
  936. branch_route[MANAGE_BRANCH] {
  937. xdbg("new branch [$T_branch_idx] to $ru\n");
  938. route(NATMANAGE);
  939. }
  940.  
  941. # manage incoming replies
  942. onreply_route[MANAGE_REPLY] {
  943. xdbg("incoming reply\n");
  944. if(status=~"[12][0-9][0-9]")
  945. route(NATMANAGE);
  946. }
  947.  
  948. # manage failure routing cases
  949. failure_route[MANAGE_FAILURE] {
  950. route(NATMANAGE);
  951.  
  952. if (t_is_canceled()) {
  953. exit;
  954. }
  955.  
  956. #!ifdef WITH_BLOCK3XX
  957. # block call redirect based on 3xx replies.
  958. if (t_check_status("3[0-9][0-9]")) {
  959. t_reply("404","Not found");
  960. exit;
  961. }
  962. #!endif
  963.  
  964. #!ifdef WITH_VOICEMAIL
  965. # serial forking
  966. # - route to voicemail on busy or no answer (timeout)
  967. if (t_check_status("486|408")) {
  968. route(TOVOICEMAIL);
  969. exit;
  970. }
  971. #!endif
  972. }
  973.  
  974. #!ifdef WITH_XHTTP
  975. event_route[xhttp:request] {
  976. #!ifdef WITH_XHTTP_RPC
  977. $var(xhttp_rpc_root) = $(hu{s.substr,0,9});
  978. if ($var(xhttp_rpc_root) == "/http_rpc") {
  979. dispatch_xhttp_rpc();
  980. }
  981. #!endif
  982. #!ifdef WITH_XHTTP_PI
  983. $var(xhttp_rpc_root) = $(hu{s.substr,0,8});
  984. if ($var(xhttp_rpc_root) == "/http_pi") {
  985. dispatch_xhttp_pi();
  986. }
  987. #!endif
  988. xhttp_reply("200", "OK", "text/html",
  989. "<html><body>Wrong URL $hu</body></html>");
  990. }
  991. #!endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement