# $Id$ # # Simple application level gateway config script. # # Assumes that SER/rtpproxy run on a machine, which connected to # both IPv4 and IPv6 networks. # # Correspondingly, this machine has two IP addresses: one IPv4 # and the second one IPv6 # # For example: # # 192.168.0.1 - "internal" IPv4 address # 2002:1234:5678::1 - "external" IPv6 address # # rtpproxy started with `-l 192.168.0.1 -6 /2002:1234:5678::1' option. # ser started with `-l 192.168.0.1 -l [2002:1234:5678::1] option. # # ------------------ module loading ---------------------------------- loadmodule "/usr/local/lib/ser/modules/sl.so" loadmodule "/usr/local/lib/ser/modules/tm.so" loadmodule "/usr/local/lib/ser/modules/rr.so" loadmodule "/usr/local/lib/ser/modules/maxfwd.so" loadmodule "/usr/local/lib/ser/modules/usrloc.so" loadmodule "/usr/local/lib/ser/modules/registrar.so" loadmodule "/usr/local/lib/ser/modules/nathelper.so" # ----------------- setting module-specific parameters --------------- # -- nathelper params -- modparam("nathelper", "natping_interval", 15) # ------------------ main fun below ---------------------------------- route { # initial sanity checks -- messages with # max_forwars == 0, or excessively long requests, # or those that don't addressed to us if (!mf_process_maxfwd_header("10")) { sl_send_reply("483", "Too Many Hops"); break; }; if (msg:len > max_len) { sl_send_reply("513", "Message too big"); break; }; if (!(uri == myself) && method == "INVITE") { sl_send_reply("403", "Call cannot be served here"); break; }; if (method == "REGISTER") { if (af == inet) { save("location-inet4"); } else if (af == inet6) { save("location-inet6"); } else { sl_send_reply("403", "Call cannot be served here"); }; break; }; if (method == "INVITE") { if (lookup("location-inet4")) { # Comment out three lines below if you want # RTP for IPv4->IPv4 calls to go directly # between UAs if (af == inet) if (force_rtp_proxy("FAII")) t_on_reply("1"); if (af == inet6) if (force_rtp_proxy("FAEI")) t_on_reply("1"); } else if (lookup("location-inet6")) { if (af == inet) if (force_rtp_proxy("FAIE")) t_on_reply("1"); # Comment out three lines below if you want # RTP for IPv6->IPv6 calls to go directly # between UAs if (af == inet6) if (force_rtp_proxy("FAEE")) t_on_reply("1"); } else { sl_send_reply("403", "Call cannot be served here"); break; }; } if (method == "BYE" || method == "CANCEL") unforce_rtp_proxy(); # Do strict routing if pre-loaded route headers present if (loose_route()) { t_relay(); break; }; if (method == "INVITE") record_route(); if (!t_relay()) sl_reply_error(); } onreply_route[1] { if (!(status=~"183" || status=~"200")) break; force_rtp_proxy("FA"); }