3 # Simple application level gateway config script.
7 # ------------------ module loading ----------------------------------
9 loadmodule "./modules/mysql/mysql.so"
11 loadmodule "./modules/iptrtpproxy/iptrtpproxy.so"
12 loadmodule "./modules/maxfwd/maxfwd.so"
13 loadmodule "./modules/rr/rr.so"
14 loadmodule "./modules/tm/tm.so"
15 loadmodule "./modules/sl/sl.so"
16 loadmodule "./modules/avp_db/avp_db.so"
17 loadmodule "./modules/usrloc/usrloc.so"
18 loadmodule "./modules/nathelper/nathelper.so"
19 loadmodule "./modules/registrar/registrar.so"
30 # ----------------- setting module-specific parameters ---------------
32 modparam("avp_db|usrloc", "db_url", "mysql://ser:heslo@127.0.0.1/ser");
34 modparam("usrloc", "db_mode", 1)
36 modparam("rr", "cookie_secret", "MyRRAVPcookiesecret");
38 modparam("nathelper", "rtpproxy_disable", 1);
40 modparam("iptrtpproxy", "config", "/etc/iptrtpproxy.cfg");
41 modparam("iptrtpproxy", "switchboard", "name=*;learning-timeout-a=10;learning-timeout-b=10;ringing-timeout=90");
43 modparam("registrar", "save_nat_flag", "FLAG_NAT_REG");
44 modparam("registrar", "load_nat_flag", "FLAG_NAT_REG");
46 modparam("avp_db", "attr_group", "id=rtp_dlg,flag=rtpproxy_dlg,table=rtpproxy_attrs");
48 # ------------------ main fun below ----------------------------------
52 if (!mf_process_maxfwd_header("10")) {
53 sl_send_reply("483", "Too Many Hops");
56 if (msg:len > max_len) {
57 sl_send_reply("513", "Message too big");
60 # if (method=="INVITE") {
61 # if (!(uri == myself)) {
62 # sl_send_reply("403", "Call cannot be served here");
68 sl_send_reply("500", "Internal error newtran");
71 # Do strict routing if pre-loaded route headers present
73 if ($dialog_id) { # AVP loaded from cookie
74 if (method == "INVITE" || method == "UPDATE") { # TODO: check if there is a SDP
76 if (@route[0].ftag == @from.tag) {
90 resetflag("FLAG_NAT");
91 # test if caller is behind NAT
92 if (nat_uac_test("18")) {
95 # is callee behind NAT? we know it from registration
96 if (lookup("location")) {
97 if (isflagset("FLAG_NAT_REG"))
101 sl_reply("404", "Unknown user in To");
105 if ($sess_ids) { # pending non-confirmed sessions?
106 iptrtpproxy_delete("$sess_ids");
109 if (isflagset("FLAG_NAT")) {
110 if (!iptrtpproxy_alloc("$tmp", "my")) {
111 sl_reply("500", "RTP proxy error");
114 $sess_ids = @iptrtpproxy.session_ids;
115 t_on_reply("invite_response");
116 t_on_failure("invite_failure");
119 else if (method == "BYE") { # CANCEL ?
120 t_on_reply("bye_response");
127 if (method=="REGISTER") {
129 if (nat_uac_test("18")) {
130 setflag("FLAG_NAT_REG");
133 if (!save_contacts("location")) {
134 sl_reply("400", "Invalid REGISTER Request");
141 if (method=="INVITE" && @to.tag=="") {
142 $dialog_id = @sys.unique;
145 # test if caller is behind NAT
146 if (nat_uac_test("18")) {
150 # is callee behind NAT? we know it from registration
151 if (lookup("location")) {
152 if (isflagset("FLAG_NAT_REG"))
156 sl_reply("404", "Unknown user in To");
159 # test if call comming at gate a or b by ip, port etc.
160 $gate_a_to_b = 1; # TODO: we do not consider two gates now, a->b & ringing-timeout
162 if (isflagset("FLAG_NAT")) {
163 if (iptrtpproxy_alloc("3", "my")) {
164 $sess_ids = @iptrtpproxy.session_ids;
165 t_on_reply("invite_response");
166 t_on_failure("invite_failure");
170 setavpflag("$f.dialog_id", "dialog_cookie");
171 record_route(); # it will add ftag to record-route, we can check direction
180 onreply_route["invite_response"] {
181 if (status=~"18[0-9]" || status=~"2[0-9][0-9]") {
182 if ($gate_a_to_b == "1") {
183 if ($init_dialog && status=~"18[0-9]")
184 $tmp = 2; # ringing-timeout
189 if ($init_dialog && status=~"18[0-9]")
190 $tmp = 3; # ringing-timeout
194 if (iptrtpproxy_update("$tmp", "$sess_ids")) {
195 if (status=~"2[0-9][0-9]") {
197 iptrtpproxy_adjust_timeout("$gate_a_to_b", "$sess_ids"); # decrease ringing-timeout
199 # delete old session, e.g. in case of re-INVITE
200 load_extra_attrs("rtp_dlg", "$dialog_id");
201 iptrtpproxy_delete("$dlg_sess_ids");
203 $dlg_sess_ids = @iptrtpproxy.session_ids;
204 setavpflag("$f.dlg_sess_ids", "rtpproxy_dlg");
205 save_extra_attrs("rtp_dlg", "$dialog_id");
211 failure_route["invite_failure"] {
213 iptrtpproxy_delete("$sess_ids");
218 onreply_route["bye_response"] {
219 if (status=~"2[0-9][0-9]") {
220 load_extra_attrs("rtp_dlg", "$dialog_id");
221 iptrtpproxy_delete("$dlg_sess_ids");
222 remove_extra_attrs("rtp_dlg", "$dialog_id");