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 <[email protected]> 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 <[email protected]> >> 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 <[email protected]> >>> Committer: Andrew Mortensen <[email protected]> >>> 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(); >>> + } >>> +} _______________________________________________ sr-dev mailing list [email protected] http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
