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.
248 lines
7.0 KiB
248 lines
7.0 KiB
#
|
|
# $Id$
|
|
#
|
|
# iptel.org real world configuration
|
|
#
|
|
|
|
# ----------- global configuration parameters ------------------------
|
|
|
|
#debug=8 # debug level (cmd line: -dddddddddd)
|
|
debug=3
|
|
#fork=yes
|
|
fork=no
|
|
children=2
|
|
#log_stderror=no # (cmd line: -E)
|
|
log_stderror=yes # (cmd line: -E)
|
|
check_via=yes # (cmd. line: -v)
|
|
dns=on # (cmd. line: -r)
|
|
rev_dns=yes # (cmd. line: -R)
|
|
port=5060
|
|
#port=8060
|
|
|
|
# advertise IP address in Via (as opposed to advertising DNS name
|
|
# which is annoying for downstream servers and some phones can
|
|
# not handle DNS at all)
|
|
listen=195.37.77.100
|
|
|
|
# ------------------ module loading ----------------------------------
|
|
|
|
loadmodule "../sip_router/modules/sl/sl.so"
|
|
loadmodule "../sip_router/modules/print/print.so"
|
|
#loadmodule "../sip_router/modules/tm/tm.so"
|
|
loadmodule "../sip_router/modules/acc/acc.so"
|
|
loadmodule "../sip_router/modules/rr/rr.so"
|
|
loadmodule "../sip_router/modules/maxfwd/maxfwd.so"
|
|
#loadmodule "../sip_router/modules/mysql/mysql.so"
|
|
loadmodule "../sip_router/modules/usrloc/usrloc.so"
|
|
#loadmodule "../sip_router/modules/auth/auth.so"
|
|
loadmodule "../sip_router/modules/cpl/cpl.so"
|
|
|
|
# ----------------- setting module-specific parameters ---------------
|
|
|
|
# -- usrloc params --
|
|
|
|
modparam("usrloc", "use_database", 0)
|
|
modparam("usrloc", "flush_interval", 3600)
|
|
|
|
# -- acc params --
|
|
# report ACKs too for sake of completeness -- as we account PSTN
|
|
# destinations which are RR, ACKs should show up
|
|
modparam("acc", "report_ack", 1)
|
|
# don't bother me with early media reports (I don't like 183
|
|
# too much anyway...ever thought of timer C hitting after
|
|
# listening to music-on-hold for five minutes?)
|
|
modparam("acc", "early_media", 0)
|
|
modparam("acc", "log_level", 1)
|
|
# that is the flag for which we will account -- don't forget to
|
|
# set the same one :-)
|
|
modparam("acc", "acc_flag", 3 )
|
|
# we are interested only in successful transactions
|
|
modparam("acc", "failed_transactions", 0 )
|
|
|
|
# -- tm params --
|
|
modparam("tm", "fr_timer", 10 )
|
|
modparam("tm", "fr_inv_timer", 10 )
|
|
modparam("tm", "wt_timer", 1000 )
|
|
modparam("tm", "noisy_ctimer", 1 )
|
|
|
|
# ------------------------- request routing logic -------------------
|
|
|
|
# main routing logic
|
|
|
|
route{
|
|
|
|
#t_uac();
|
|
|
|
# filter local stateless ACK generated by authentication of mf replies
|
|
sl_filter_ACK();
|
|
|
|
# filter too old messages
|
|
log("LOG: Checking maxfwd\n");
|
|
if (!mf_process_maxfwd_header("10")) {
|
|
log("LOG: Too many hops\n");
|
|
sl_send_reply("483", "Too Many Hops");
|
|
break;
|
|
};
|
|
|
|
# len_gt *after* max_fwd, otherwise an "INVITE sip:sos@0.0.0.0"
|
|
# will cause "message too big" for a short message
|
|
|
|
if (len_gt( max_len )) {
|
|
sl_send_reply("513", "Riesengross -- Message too large");
|
|
break;
|
|
};
|
|
|
|
|
|
# Do strict routing if route headers present
|
|
rewriteFromRoute();
|
|
|
|
# look at whether we need record-routing;
|
|
# - we need it for calls from gateways (otherwise, subsequent
|
|
# requests from the other # party will attempt to contact gateway
|
|
# directly through blocked ports)
|
|
# - we need it for Windows Messenger's IM sessions to cross
|
|
# firewalls -- we force all MESSAGEs to go via our server
|
|
# to avoid blocking port numbers (some firewalls can do
|
|
# standard SIP but are puzzled by Microsoft's proprietary
|
|
# messaging session model)
|
|
# - some other places may decide to set the record-routing
|
|
# flag (2 chosen) too; particularly, INVITEs to our gw
|
|
if ( (src_ip==195.37.77.110 & method=="INVITE") || method=="MESSAGE" || method=="INFO" ) {
|
|
setflag(2);
|
|
};
|
|
|
|
|
|
# if this request is not for our domain, fall over to
|
|
# outbound request processing; include gateway's address
|
|
# in matching too -- we RR requests to it, so that
|
|
# its address may show up in subsequent requests
|
|
# after rewriteFromRoute
|
|
|
|
# sign of our domain: there is @ (username), :
|
|
# (nothing) or . (host) in front of our domain name
|
|
if (!(uri=~"bat\.iptel\.org([;:].*)*"
|
|
| uri=~"[@:\.]195\.37\.77\.101([;:].*)*" |
|
|
uri=~"@195\.37\.77\.110([;:].*)*" )) {
|
|
route(2);
|
|
# break from route (2) return -- stop then !
|
|
break;
|
|
};
|
|
# here we continue with requests for our domain...
|
|
|
|
# registers always MUST be authenticated to
|
|
# avoid stealing incoming calls
|
|
if (method=="REGISTER") {
|
|
log("LOG Request is REGISTER\n");
|
|
# prohibit attempts to grab someone else's To address
|
|
# using valid credentials; the only exception is the user
|
|
# 'replicator' permitted to generate 3-rd party registrations
|
|
|
|
# update Contact database
|
|
log("LOG: REGISTER is authorized, saving location\n");
|
|
save_contact("location");
|
|
break;
|
|
};
|
|
|
|
# now check if it's about PSTN destinations through our gateway;
|
|
# note that 8.... is exempted for numerical destinations
|
|
if (uri=~"sip:\+?[0-79][0-9]*@.*") {
|
|
route(3);
|
|
# break from route (3) return -- stop then !
|
|
break;
|
|
};
|
|
|
|
# native SIP destinations are handled using our USRLOC DB
|
|
if (!lookup_contact("location")) {
|
|
if (method=="ACK") {
|
|
log("Ooops -- an ACK made it here -- probably UAC screwed up to-tags\n");
|
|
break;
|
|
};
|
|
log("LOG: Unable to lookup contact, sending 404\n");
|
|
sl_send_reply("404", "Not Found");
|
|
break;
|
|
};
|
|
|
|
# requests from gateway should be RR-ed too
|
|
if (isflagset(2)) {
|
|
addRecordRoute();
|
|
};
|
|
|
|
# we now know we may, we know where, let it go out now!
|
|
if (!t_relay()) {
|
|
sl_reply_error();
|
|
break;
|
|
};
|
|
}
|
|
#---------------------------------------------------------------------
|
|
|
|
# routing logic for outbound requests targeted out of our domain
|
|
# (beware, messages to our users can end up here too: for example,
|
|
# an INVITE may be UsrLoc-ed, then the other party uses outbound
|
|
# proxy with r-uri=the usr_loced addredd (typically IP))
|
|
route[2] {
|
|
|
|
# requests from gateway should be RR-ed too
|
|
if (isflagset(2)) {
|
|
addRecordRoute();
|
|
};
|
|
if (!t_relay()) {
|
|
sl_reply_error();
|
|
break;
|
|
};
|
|
}
|
|
|
|
#---------------------------------------------------------------------
|
|
|
|
# logic for calls through our PSTN gateway
|
|
route[3] {
|
|
# if it is a MESSAGE pass it "as is" over to our SMS gateway
|
|
# (which unfortunately lives at a different host due to
|
|
# lack of serial interfaces)
|
|
if (method=="MESSAGE") {
|
|
# note that we don't do any admission control yet:
|
|
# anyone can SMS anywhere;
|
|
setflag(1);
|
|
rewritehostport("195.37.77.100:5070");
|
|
if (!t_relay()) {
|
|
sl_reply_error();
|
|
};
|
|
break;
|
|
};
|
|
# continue with requests to PSTN gateway ...
|
|
|
|
# the international + prefix
|
|
if (uri=~"sip:\+" ) {
|
|
strip(1);
|
|
prefix("000");
|
|
};
|
|
# free call destinations ... no authentication needed
|
|
if (uri=~"sip:001795061546@.*" | uri=~"sip:0016097265544.*"
|
|
| uri=~"sip:[79][0-9][0-9][0-9]@.*"
|
|
| uri=~"sip:98[0-9][0-9][0-9][0-9]") {
|
|
log("LOG: Free PSTN\n");
|
|
# let's log free calls for now too ...
|
|
setflag(1);
|
|
} else {
|
|
# we passed all authorization checks for PSTN -- move on!
|
|
# tag this transaction for accounting
|
|
setflag(1);
|
|
|
|
}; # authorized PSTN
|
|
|
|
# requests to gateway must be record-routed because the GW accepts
|
|
# only reqeusts coming from our proxy
|
|
if (isflagset(2) || method=="INVITE")
|
|
addRecordRoute();
|
|
|
|
# if you have passed through all the checks, let your call go to GW!
|
|
|
|
|
|
rewritehostport("fox.iptel.org:5060");
|
|
|
|
if (!t_relay()) {
|
|
sl_reply_error();
|
|
break;
|
|
};
|
|
}
|
|
|