[sr-dev] git:master: sca: add working example kamailio.cfg
Ovidiu Sas
osas at voipembedded.com
Mon Dec 3 23:36:10 CET 2012
Then we should move all config files from examples into the relevant
module directory?
On Mon, Dec 3, 2012 at 5:31 PM, Daniel-Constantin Mierla
<miconda at gmail.com> wrote:
> Hello,
>
> I think it is better to have the config example specific for a module in the
> module directory, eventually in the doc sub-folder and imported in the
> readme file in a dedicate section -- see the modules_k/dispatcher.
>
> Definitely is not a good idea to add everything in the default configuration
> file of kamailio -- etc/kamailio.cfg -- this file should address common
> usage scenarios and be simple enough to understand and get people started.
>
> Cheers,
> Daniel
>
>
> On 12/3/12 11:25 PM, Ovidiu Sas wrote:
>>
>> Hello Andrew,
>>
>> Maybe it would be good to move the example config into the examples
>> directory and keep the config as simple as possible (no extra
>> functionality, just SCA without any WITH_* directives).
>> And if you can integrate the WITH_SCA directive into the master
>> etc/kamailio.cfg, that would be great.
>>
>> Just my 2c.
>> -ovidiu
>>
>> On Mon, Dec 3, 2012 at 5:14 PM, Andrew Mortensen <admorten at isc.upenn.edu>
>> wrote:
>>>
>>> Module: sip-router
>>> Branch: master
>>> Commit: c40883a7aa96a1a7fab1060bf9dfab2987971c89
>>> URL:
>>> http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=c40883a7aa96a1a7fab1060bf9dfab2987971c89
>>>
>>> Author: Andrew Mortensen <admorten at isc.upenn.edu>
>>> Committer: Andrew Mortensen <admorten at isc.upenn.edu>
>>> Date: Mon Dec 3 17:14:14 2012 -0500
>>>
>>> sca: add working example kamailio.cfg
>>>
>>> ---
>>>
>>> modules/sca/examples/kamailio.cfg | 414
>>> +++++++++++++++++++++++++++++++++++++
>>> 1 files changed, 414 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/modules/sca/examples/kamailio.cfg
>>> b/modules/sca/examples/kamailio.cfg
>>> new file mode 100644
>>> index 0000000..8cbae87
>>> --- /dev/null
>>> +++ b/modules/sca/examples/kamailio.cfg
>>> @@ -0,0 +1,414 @@
>>> +#!KAMAILIO
>>> +#
>>> +# example kamailio.cfg with Shared Call Appearances (SCA)
>>> +
>>> +#!define WITH_AUTH
>>> +#!define WITH_MYSQL
>>> +#!define WITH_SCA
>>> +
>>> +####### Defined Values #########
>>> +
>>> +#!ifdef WITH_MYSQL
>>> +# - database URL - used to connect to database server by modules such
>>> +# as: auth_db, acc, usrloc, a.s.o.
>>> +#!ifndef DBURL
>>> +#!define DBURL "mysql://kamailio:kamailiorw@localhost/kamailio"
>>> +#!endif
>>> +#!endif
>>> +
>>> +####### Global Parameters #########
>>> +
>>> +#!ifdef WITH_DEBUG
>>> +debug=4
>>> +log_stderror=yes
>>> +#!else
>>> +debug=2
>>> +log_stderror=no
>>> +#!endif
>>> +
>>> +memdbg=5
>>> +memlog=5
>>> +
>>> +log_facility=LOG_LOCAL0
>>> +
>>> +fork=yes
>>> +children=4
>>> +
>>> +alias="vs7-dev.net.isc.upenn.edu"
>>> +
>>> +listen=udp:130.91.185.155:5060
>>> +port=5060
>>> +
>>> +####### Modules Section ########
>>> +
>>> +# set paths to location of modules (to sources or installation folders)
>>> +#!ifdef WITH_SRCPATH
>>> +mpath="modules_k:modules"
>>> +#!else
>>>
>>> +mpath="/usr/local/kamailio/lib64/kamailio/modules_k/:/usr/local/kamailio/lib64/kamailio/modules/"
>>> +#!endif
>>> +
>>> +#!ifdef WITH_MYSQL
>>> +loadmodule "db_mysql.so"
>>> +#!endif
>>> +
>>> +loadmodule "tm.so"
>>> +loadmodule "sl.so"
>>> +loadmodule "rr.so"
>>> +loadmodule "pv.so"
>>> +loadmodule "maxfwd.so"
>>> +loadmodule "usrloc.so"
>>> +loadmodule "registrar.so"
>>> +loadmodule "textops.so"
>>> +loadmodule "siputils.so"
>>> +loadmodule "xlog.so"
>>> +loadmodule "sanity.so"
>>> +loadmodule "ctl.so"
>>> +loadmodule "cfg_rpc.so"
>>> +
>>> +#!ifdef WITH_AUTH
>>> +loadmodule "auth.so"
>>> +loadmodule "auth_db.so"
>>> +#!ifdef WITH_IPAUTH
>>> +loadmodule "permissions.so"
>>> +#!endif
>>> +#!endif
>>> +
>>> +#!ifdef WITH_SCA
>>> +loadmodule "sca.so"
>>> +#!endif
>>> +
>>> +
>>> +# ----------------- setting module-specific parameters ---------------
>>> +
>>> +
>>> +# ----- tm params -----
>>> +# auto-discard branches from previous serial forking leg
>>> +modparam("tm", "failure_reply_mode", 3)
>>> +# default retransmission timeout: 30sec
>>> +modparam("tm", "fr_timer", 30000)
>>> +# default invite retransmission timeout after 1xx: 120sec
>>> +modparam("tm", "fr_inv_timer", 120000)
>>> +
>>> +
>>> +# ----- rr params -----
>>> +# add value to ;lr param to cope with most of the UAs
>>> +modparam("rr", "enable_full_lr", 1)
>>> +# do not append from tag to the RR (no need for this script)
>>> +modparam("rr", "append_fromtag", 0)
>>> +
>>> +
>>> +# ----- registrar params -----
>>> +modparam("registrar", "method_filtering", 1)
>>> +/* uncomment the next line to disable parallel forking via location */
>>> +# modparam("registrar", "append_branches", 0)
>>> +/* uncomment the next line not to allow more than 10 contacts per AOR */
>>> +#modparam("registrar", "max_contacts", 10)
>>> +# max value for expires of registrations
>>> +modparam("registrar", "max_expires", 3600)
>>> +# set it to 1 to enable GRUU
>>> +modparam("registrar", "gruu_enabled", 0)
>>> +
>>> +
>>> +# ----- usrloc params -----
>>> +/* enable DB persistency for location entries */
>>> +#!ifdef WITH_USRLOCDB
>>> +modparam("usrloc", "db_url", DBURL)
>>> +modparam("usrloc", "db_mode", 2)
>>> +modparam("usrloc", "use_domain", 0)
>>> +#!endif
>>> +
>>> +
>>> +# ----- auth_db params -----
>>> +#!ifdef WITH_AUTH
>>> +modparam("auth_db", "db_url", DBURL)
>>> +modparam("auth_db", "calculate_ha1", yes)
>>> +modparam("auth_db", "password_column", "password")
>>> +modparam("auth_db", "load_credentials", "")
>>> +
>>> +# ----- permissions params -----
>>> +#!ifdef WITH_IPAUTH
>>> +modparam("permissions", "db_url", DBURL)
>>> +modparam("permissions", "db_mode", 1)
>>> +#!endif
>>> +
>>> +#!endif
>>> +
>>> +# ----- sca params -----
>>> +#!ifdef WITH_SCA
>>> +modparam("sca", "call_info_max_expires", 120)
>>> +modparam("sca", "db_url", DBURL)
>>> +#!endif
>>> +
>>> +
>>> +####### Routing Logic ########
>>> +
>>> +# Main SIP request routing logic
>>> +# - processing of any incoming SIP request starts with this route
>>> +# - note: this is the same as route { ... }
>>> +request_route {
>>> +
>>> + # per request initial checks
>>> + route(REQINIT);
>>> +
>>> + # CANCEL processing
>>> + if (is_method("CANCEL"))
>>> + {
>>> + if (t_check_trans())
>>> + route(SCA);
>>> + t_relay();
>>> + exit;
>>> + }
>>> +
>>> + # handle requests within SIP dialogs
>>> + route(WITHINDLG);
>>> +
>>> + ### only initial requests (no To tag)
>>> +
>>> + t_check_trans();
>>> +
>>> + # authentication
>>> + route(AUTH);
>>> +
>>> + # record routing for dialog forming requests (in case they are
>>> routed)
>>> + # - remove preloaded route headers
>>> + remove_hf("Route");
>>> + if (is_method("INVITE|SUBSCRIBE"))
>>> + record_route();
>>> +
>>> + # handle registrations
>>> + route(REGISTRAR);
>>> +
>>> + if ($rU==$null)
>>> + {
>>> + # request with no Username in RURI
>>> + sl_send_reply("484","Address Incomplete");
>>> + exit;
>>> + }
>>> +
>>> + # user location service
>>> + route(LOCATION);
>>> +
>>> + route(RELAY);
>>> +}
>>> +
>>> +
>>> +route[RELAY] {
>>> +
>>> + # enable additional event routes for forwarded requests
>>> + if (is_method("INVITE|BYE|SUBSCRIBE|PRACK|REFER|UPDATE")) {
>>> + if(!t_is_set("onreply_route"))
>>> t_on_reply("MANAGE_REPLY");
>>> + }
>>> + if (is_method("INVITE")) {
>>> + if(!t_is_set("failure_route"))
>>> t_on_failure("MANAGE_FAILURE");
>>> + }
>>> +
>>> +#!ifdef WITH_SCA
>>> + route(SCA);
>>> +#!endif
>>> +
>>> + if (!t_relay()) {
>>> + sl_reply_error();
>>> + }
>>> + exit;
>>> +}
>>> +
>>> +# Per SIP request initial checks
>>> +route[REQINIT] {
>>> + if (!mf_process_maxfwd_header("10")) {
>>> + sl_send_reply("483","Too Many Hops");
>>> + exit;
>>> + }
>>> +
>>> + if(!sanity_check("1511", "7"))
>>> + {
>>> + xlog("Malformed SIP message from $si:$sp\n");
>>> + exit;
>>> + }
>>> +}
>>> +
>>> +# Handle requests within SIP dialogs
>>> +route[WITHINDLG] {
>>> + if (has_totag()) {
>>> + # sequential request withing a dialog should
>>> + # take the path determined by record-routing
>>> + if (loose_route()) {
>>> + if ( is_method("NOTIFY") ) {
>>> + # Add Record-Route for in-dialog NOTIFY
>>> as per RFC 6665.
>>> + record_route();
>>> + }
>>> + route(RELAY);
>>> + } else {
>>> + if (is_method("SUBSCRIBE") && uri == myself) {
>>> + # in-dialog subscribe requests
>>> + route(SCA);
>>> + exit;
>>> + }
>>> + if ( is_method("ACK") ) {
>>> + if ( t_check_trans() ) {
>>> + # no loose-route, but stateful
>>> ACK;
>>> + # must be an ACK after a 487
>>> + # or e.g. 404 from upstream
>>> server
>>> + t_relay();
>>> + exit;
>>> + } else {
>>> + # ACK without matching
>>> transaction ... ignore and discard
>>> + exit;
>>> + }
>>> + }
>>> + sl_send_reply("404","Not here");
>>> + }
>>> + exit;
>>> + }
>>> +}
>>> +
>>> +# Handle SIP registrations
>>> +route[REGISTRAR] {
>>> + if (is_method("REGISTER"))
>>> + {
>>> + if (!save("location"))
>>> + sl_reply_error();
>>> +
>>> + exit;
>>> + }
>>> +}
>>> +
>>> +# USER location service
>>> +route[LOCATION] {
>>> + $avp(oexten) = $rU;
>>> + if (!lookup("location")) {
>>> + $var(rc) = $rc;
>>> + t_newtran();
>>> + switch ($var(rc)) {
>>> + case -1:
>>> + case -3:
>>> + send_reply("404", "Not Found");
>>> + exit;
>>> + case -2:
>>> + send_reply("405", "Method Not Allowed");
>>> + exit;
>>> + }
>>> + }
>>> +}
>>> +
>>> +# Authentication route
>>> +route[AUTH] {
>>> +#!ifdef WITH_AUTH
>>> +
>>> +#!ifdef WITH_IPAUTH
>>> + if((!is_method("REGISTER")) && allow_source_address())
>>> + {
>>> + # source IP allowed
>>> + return;
>>> + }
>>> +#!endif
>>> +
>>> + if (is_method("REGISTER") || from_uri==myself)
>>> + {
>>> + # authenticate requests
>>> + if (!auth_check("$fd", "subscriber", "1")) {
>>> + auth_challenge("$fd", "0");
>>> + exit;
>>> + }
>>> + # user authenticated - remove auth header
>>> + if(!is_method("REGISTER|PUBLISH"))
>>> + consume_credentials();
>>> + }
>>> + # if caller is not local subscriber, then check if it calls
>>> + # a local destination, otherwise deny, not an open relay here
>>> + if (from_uri!=myself && uri!=myself)
>>> + {
>>> + sl_send_reply("403","Not relaying");
>>> + exit;
>>> + }
>>> +
>>> +#!endif
>>> + return;
>>> +}
>>> +
>>> +# Shared Call Appearances handling
>>> +route[SCA] {
>>> +#!ifdef WITH_SCA
>>> + if(is_method("SUBSCRIBE")) {
>>> + if ($hdr(Event) == "call-info" || $hdr(Event) ==
>>> "line-seize") {
>>> + xdbg("SCA: $hdr(Event) SUBSCRIBE $ru from
>>> $si:$sp");
>>> + sca_handle_subscribe();
>>> + exit;
>>> + }
>>> +
>>> + return;
>>> + }
>>> +
>>> + if (!is_method("BYE|CANCEL|INVITE|PRACK|REFER")) {
>>> + return;
>>> + }
>>> +
>>> + sca_call_info_update();
>>> +#!endif
>>> +
>>> + return;
>>> +}
>>> +
>>> +# Routing to foreign domains
>>> +route[SIPOUT] {
>>> + if (!uri==myself)
>>> + {
>>> + append_hf("P-hint: outbound\r\n");
>>> + route(RELAY);
>>> + }
>>> +}
>>> +
>>> +# XMLRPC routing
>>> +#!ifdef WITH_XMLRPC
>>> +route[XMLRPC] {
>>> + # allow XMLRPC from localhost
>>> + if ((method=="POST" || method=="GET")
>>> + && (src_ip==127.0.0.1)) {
>>> + # close connection only for xmlrpclib user agents (there
>>> is a bug in
>>> + # xmlrpclib: it waits for EOF before interpreting the
>>> response).
>>> + if ($hdr(User-Agent) =~ "xmlrpclib")
>>> + set_reply_close();
>>> + set_reply_no_connect();
>>> + dispatch_rpc();
>>> + exit;
>>> + }
>>> + send_reply("403", "Forbidden");
>>> + exit;
>>> +}
>>> +#!endif
>>> +
>>> +# manage incoming replies
>>> +onreply_route[MANAGE_REPLY] {
>>> + xdbg("incoming reply\n");
>>> +
>>> +#!ifdef WITH_SCA
>>> + sca_call_info_update();
>>> +#!endif
>>> +}
>>> +
>>> +# manage failure routing cases
>>> +failure_route[MANAGE_FAILURE] {
>>> + if (t_is_canceled()) {
>>> + exit;
>>> + }
>>> +
>>> +#!ifdef WITH_SCA
>>> + route(SCA);
>>> +#!endif
>>> +}
>>> +
>>> +#!ifdef WITH_XHTTP
>>> +event_route[xhttp:request] {
>>> +#!ifdef WITH_XHTTP_RPC
>>> + $var(xhttp_rpc_root) = $(hu{s.substr,0,9});
>>> + if ($var(xhttp_rpc_root) == "/http_rpc") {
>>> + dispatch_xhttp_rpc();
>>> + }
>>> +#!endif
>>> +
>>> +#!ifdef WITH_SCA
>>> +event_route[tm:local-request] {
>>> + if (is_method("NOTIFY") {
>>> + record_route();
>>> + }
>>> +}
More information about the sr-dev
mailing list