| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- # $Id$
- #
- # Simple application level gateway config script.
- #
- # Assumes that SER/rtpproxy run on a machine, which connected to
- # two non-routable letworks: 192.168.0.0/24 and 192.168.1.1/24.
- #
- # Correspondingly, this machine has two IP addresses: 192.168.0.1
- # and 192.168.1.1.
- #
- # 192.168.0.0/24 - "internal" network
- # 192.168.1.0/24 - "external" network
- #
- # rtpproxy started with `-l 192.168.0.1/192.168.1.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"
- loadmodule "/usr/local/lib/ser/modules/rtpproxy.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 (dst_ip == 192.168.0.1) {
- save("location-internal");
- } else if (dst_ip == 192.168.1.1) {
- save("location-external");
- } else {
- sl_send_reply("403", "Call cannot be served here");
- };
- break;
- };
- if (method == "INVITE") {
- if (lookup("location-internal")) {
- if (dst_ip == 192.168.0.1)
- if (rtpproxy_offer("FAII"))
- t_on_reply("1");
- if (dst_ip == 192.168.1.1)
- if (rtpproxy_offer("FAEI"))
- t_on_reply("1");
- } else if (lookup("location-external")) {
- if (dst_ip == 192.168.0.1)
- if (rtpproxy_offer("FAIE"))
- t_on_reply("1");
- if (dst_ip == 192.168.1.1)
- if (rtpproxy_offer("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;
- rtpproxy_answer("FA");
- }
|