mirror of https://github.com/sipwise/kamailio.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
2.8 KiB
115 lines
2.8 KiB
# $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"
|
|
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 (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 (rtpproxy_offer("FAII"))
|
|
t_on_reply("1");
|
|
if (af == inet6)
|
|
if (rtpproxy_offer("FAEI"))
|
|
t_on_reply("1");
|
|
} else if (lookup("location-inet6")) {
|
|
if (af == inet)
|
|
if (rtpproxy_offer("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 (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");
|
|
}
|