[Kamailio-Users] Kamailio speed dial

Elena-Ramona Modroiu ramona at asipto.com
Mon Sep 14 10:57:11 CEST 2009


Hi,

I see in one config you use $au@$fd for lookup, that is wrong unless you 
have the two digits in username of auth header. Better use sd_lookup() 
without second parameter.

Then print $ru in xlog() before and after sd_lookup() -- that will 
reveal what is looked up and if the function changed the r-uri.

Regards,
Ramona


Mythili D wrote:
> Hiii...I installed kamailio 1.5.1 and mysql 5.0.37 properly. 
> Authnetication is working properly. Now i'm going to configure the 
> feature "speed dial".
>  
> I tried with two config files. I'm facing the same problem with two 
> config files..
> 1st config file
> -----------------------------------------------------------
> #
> # $Id: speeddial.cfg 4585 2008-08-06 08:20:30Z klaus_darilion $
> #
> # sample config script to use speeddial module
> #
> debug=3
> log_stderror=yes
> log_facility=LOG_LOCAL0
> fork=yes
> children=4
> # ----------- global configuration parameters ------------------------
> check_via=no # (cmd. line: -v)
> dns=no # (cmd. line: -r)
> rev_dns=no # (cmd. line: -R)
> port=5060
> # ------------------ module loading ----------------------------------
> loadmodule "/usr/local/lib/kamailio/modules/sl.so"
> loadmodule "/usr/local/lib/kamailio/modules/tm.so"
> loadmodule "/usr/local/lib/kamailio/modules/rr.so"
> loadmodule "/usr/local/lib/kamailio/modules/maxfwd.so"
> loadmodule "/usr/local/lib/kamailio/modules/usrloc.so"
> loadmodule "/usr/local/lib/kamailio/modules/registrar.so"
> loadmodule "/usr/local/lib/kamailio/modules/textops.so"
> loadmodule "/usr/local/lib/kamailio/modules/db_mysql.so"
> loadmodule "/usr/local/lib/kamailio/modules/speeddial.so"
> loadmodule "/usr/local/lib/kamailio/modules/mi_fifo.so"
> loadmodule "/usr/local/lib/kamailio/modules/xlog.so"
> # ----------------- setting module-specific parameters ---------------
> modparam("speeddial", "db_url", 
> "mysql://openser:openserrw@localhost/openser")
> modparam("speeddial", "use_domain", 1)
>  
> # -- mi_fifo params --
> modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")
> # -- usrloc params --
> modparam("usrloc", "db_mode", 0)
> # -- rr params --
> # add value to ;lr param to make some broken UAs happy
> modparam("rr", "enable_full_lr", 1)
> # ------------------------- request routing logic -------------------
> # main routing logic
> route{
> # initial sanity checks
> if (!mf_process_maxfwd_header("10"))
> {
> sl_send_reply("483","Too Many Hops");
> exit;
> };
> if (msg:len >= max_len )
> {
> sl_send_reply("513", "Message too big");
> exit;
> };
> if (!method=="REGISTER") record_route();
> if (loose_route())
> {
> if (!t_relay())
> {
> sl_reply_error();
> };
> exit;
> };
> if (!uri==myself)
> {
> if (!t_relay())
> {
> sl_reply_error();
> };
> exit;
> };
> if (uri==myself)
> {
> if (method=="REGISTER")
> {
> save("location");
> exit;
> };
> if(uri=~"sip:[0-9]{2}@.*"){
> xlog("L_INFO","mylog: test1.\n");
> sd_lookup("speed_dial");
> #sd_lookup("speed_dial", "sip:$au@$fd");
> xlog("L_INFO","mylog: test2.\n");
> }
> lookup("aliases");
> if (!uri==myself)
> {
> if (!t_relay())
> {
> sl_reply_error();
> };
> exit;
> };
> if (!lookup("location"))
> {
> sl_send_reply("404", "Not Found");
> exit;
> };
> };
> if (!t_relay())
> {
> sl_reply_error();
> };
> }
>  
> --------------------------------------------------------------------
> I'm using the table speed_dial. My data in table is
> username=5001
> domain=192.168.64.94
> sd_username=51
> sd_domain=192.168.64.94
>  
> I dialled 51 from useragent 1001. the output is not found.
> but it is displaying test1 and test2 messages from my cfg file which i 
> gave, i.e., it is entring into loop and function 
> sd_lookup("speed_dial"). But the problem with speed_dial i think so...
> Please help me......
>  
> 2nd config file
> ---------------------------------------------------------------------
> #
> # $Id: kamailio.cfg 5881 2009-06-22 09:13:04Z henningw $
> #
> # Kamailio (OpenSER) SIP Server - basic configuration script
> # - web: http://www.kamailio.org
> # - svn: http://openser.svn.sourceforge.net/viewvc/openser/
> #
> # Direct your questions about this file to: <users at lists.kamailio.org 
> <mailto:users at lists.kamailio.org>>
> #
> # Refer to the Core CookBook at http://www.kamailio.org/dokuwiki/doku.php
> # for an explanation of possible statements, functions and parameters.
> #
> # There are comments showing how to enable different features in th 
> econfig
> # file. Such commented code starts with #X# where X is a letter to 
> identify
> # a feature. Delete entire #X# if you want to enable that feature. 
> Next are
> # sed commands that help you enable such features.
> #
> # *** To enamble mysql execute:
> # sed -i 's///g' kamailio.cfg
> #
> # *** To enamble authentication execute:
> # - enable mysql
> # sed -i 's///g' kamailio.cfg
> # - add users using 'kamctl'
> #
> # *** To enamble persistent user location execute:
> # - enable mysql
> # sed -i 's/#u#//g' kamailio.cfg
> #
> # *** To enamble presence server execute:
> # - enable mysql
> # sed -i 's/#p#//g' kamailio.cfg
> #
> # *** To enamble nat traversal execute:
> # sed -i 's/#n#//g' kamailio.cfg
> # - install RTPProxy: http://www.rtpproxy.org
> # - start RTPProxy:
> # rtpproxy -l _your_public_ip_ -s udp:localhost:7722
> #
> # *** To enhance accounting execute:
> # - enable mysql
> # sed -i 's/#c#//g' kamailio.cfg
> # - add following columns to database
> # ALTER TABLE acc ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT '';
> # ALTER TABLE acc ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT '';
> # ALTER TABLE acc ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT '';
> # ALTER TABLE acc ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT '';
> # ALTER TABLE acc ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT '';
> # ALTER TABLE missed_calls ADD COLUMN src_user VARCHAR(64) NOT NULL 
> DEFAULT '';
> # ALTER TABLE missed_calls ADD COLUMN src_domain VARCHAR(128) NOT NULL 
> DEFAULT '';
> # ALTER TABLE missed_calls ADD COLUMN dst_ouser VARCHAR(64) NOT NULL 
> DEFAULT '';
> # ALTER TABLE missed_calls ADD COLUMN dst_user VARCHAR(64) NOT NULL 
> DEFAULT '';
> # ALTER TABLE missed_calls ADD COLUMN dst_domain VARCHAR(128) NOT NULL 
> DEFAULT '';
> #
>  
> ####### Global Parameters #########
> debug=3
> log_stderror=yes
> log_facility=LOG_LOCAL0
> fork=yes
> children=4
> /* uncomment the following lines to enable debugging */
> #debug=6
> #fork=no
> #log_stderror=yes
> /* uncomment the next line to disable TCP (default on) */
> #disable_tcp=yes
> /* uncomment the next line to enable the auto temporary blacklisting of
> not available destinations (default disabled) */
> #disable_dns_blacklist=no
> /* uncomment the next line to enable IPv6 lookup after IPv4 dns
> lookup failures (default disabled) */
> #dns_try_ipv6=yes
> /* uncomment the next line to disable the auto discovery of local aliases
> based on revers DNS on IPs (default on) */
> #auto_aliases=no
> /* uncomment the following lines to enable TLS support (default off) */
> #disable_tls = no
> #listen = tls:your_IP:5061
> #tls_verify_server = 1
> #tls_verify_client = 1
> #tls_require_client_certificate = 0
> #tls_method = TLSv1
> #tls_certificate = "/usr/local/etc/kamailio/tls/user/user-cert.pem"
> #tls_private_key = "/usr/local/etc/kamailio/tls/user/user-privkey.pem"
> #tls_ca_list = "/usr/local/etc/kamailio/tls/user/user-calist.pem"
>  
> port=5070
> /* uncomment and configure the following line if you want Kamailio to
> bind on a specific interface/port/proto (default bind on all available) */
> #listen=udp:192.168.1.2:5060 <http://192.168.1.2:5060>
>  
> ####### Modules Section ########
> #set module path
> mpath="/usr/local/lib/kamailio/modules/"
> /* uncomment next line for MySQL DB support */
> loadmodule "db_mysql.so"
> loadmodule "mi_fifo.so"
> loadmodule "sl.so"
> loadmodule "tm.so"
> loadmodule "rr.so"
> loadmodule "pv.so"
> loadmodule "maxfwd.so"
> loadmodule "usrloc.so"
> loadmodule "registrar.so"
> loadmodule "textops.so"
> loadmodule "uri_db.so"
> loadmodule "siputils.so"
> loadmodule "xlog.so"
> loadmodule "acc.so"
> loadmodule "speeddial.so"
> /* uncomment next lines for MySQL based authentication support
> NOTE: a DB (like db_mysql) module must be also loaded */
> loadmodule "auth.so"
> loadmodule "auth_db.so"
> /* uncomment next line for aliases support
> NOTE: a DB (like db_mysql) module must be also loaded */
> #loadmodule "alias_db.so"
> /* uncomment next line for multi-domain support
> NOTE: a DB (like db_mysql) module must be also loaded
> NOTE: be sure and enable multi-domain support in all used modules
> (see "multi-module params" section ) */
> #loadmodule "domain.so"
> /* uncomment the next two lines for presence server support
> NOTE: a DB (like db_mysql) module must be also loaded */
> #p#loadmodule "presence.so"
> #p#loadmodule "presence_xml.so"
> #n#loadmodule "nathelper.so"
> # ----------------- setting module-specific parameters ---------------
>  
> # ----- mi_fifo params -----
> modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")
>  
> # ----- 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)
>  
> # ----- rr 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)
>  
> # ----- uri_db params -----
> /* by default we disable the DB support in the module as we do not need it
> in this configuration */
> modparam("uri_db", "use_uri_table", 0)
> modparam("uri_db", "db_url", "")
>  
> # ----- acc params -----
> /* what sepcial events should be accounted ? */
> modparam("acc", "early_media", 1)
> modparam("acc", "report_ack", 1)
> modparam("acc", "report_cancels", 1)
> /* by default ww do not adjust the direct of the sequential requests.
> if you enable this parameter, be sure the enable "append_fromtag"
> in "rr" module */
> modparam("acc", "detect_direction", 0)
> /* account triggers (flags) */
> modparam("acc", "failed_transaction_flag", 3)
> modparam("acc", "log_flag", 1)
> modparam("acc", "log_missed_flag", 2)
> modparam("acc", "log_extra",
> "src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")
> /* uncomment the following lines to enable DB accounting also */
> #c#modparam("acc", "db_flag", 1)
> #c#modparam("acc", "db_missed_flag", 2)
> #c#modparam("acc", "db_url",
> #c# "mysql://openser:openserrw@localhost/openser")
> #c#modparam("acc", "db_extra",
> #c# 
> "src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")
>  
> # ----- usrloc params -----
> /* uncomment the following lines if you want to enable DB persistency
> for location entries */
> #u#modparam("usrloc", "db_mode", 0)
> #u#modparam("usrloc", "db_url",
> #u# "mysql://openser:openserrw@localhost/openser")
> # ----- auth_db params -----
> /* uncomment the following lines if you want to enable the DB based
> authentication */
> modparam("auth_db", "calculate_ha1", yes)
> modparam("auth_db", "password_column", "password")
> modparam("auth_db", "db_url",
> "mysql://openser:openserrw@localhost/openser")
> modparam("auth_db", "load_credentials", "")
>  
> # ----- alias_db params -----
> /* uncomment the following lines if you want to enable the DB based
> aliases */
> #modparam("alias_db", "db_url",
> # "mysql://openser:openserrw@localhost/openser")
>  
> # ----- domain params -----
> /* uncomment the following lines to enable multi-domain detection
> support */
> #modparam("domain", "db_url",
> # "mysql://openser:openserrw@localhost/openser")
> #modparam("domain", "db_mode", 1) # Use caching
>  
> # ----- multi-module params -----
> /* uncomment the following line if you want to enable multi-domain support
> in the modules (dafault off) */
> #modparam("alias_db|auth_db|usrloc|uri_db", "use_domain", 1)
>  
> # ----- presence params -----
> /* uncomment the following lines if you want to enable presence */
> #p#modparam("presence|presence_xml", "db_url",
> #p# "mysql://openser:openserrw@localhost/openser")
> #p#modparam("presence_xml", "force_active", 1)
> #p#modparam("presence", "server_address", "sip:192.168.1.2:5060 
> <http://192.168.1.2:5060>")
> # -- nathelper
> #n#modparam("nathelper", "rtpproxy_sock", "udp:127.0.0.1:7722 
> <http://127.0.0.1:7722>")
> #n#modparam("nathelper", "natping_interval", 30)
> #n#modparam("nathelper", "ping_nated_only", 1)
> #n#modparam("nathelper", "sipping_bflag", 7)
> #n#modparam("nathelper", "sipping_from", "sip:pinger at kamailio.org 
> <mailto:sip%3Apinger at kamailio.org>")
> #n#modparam("registrar|nathelper", "received_avp", "$avp(i:80)")
> #n#modparam("usrloc", "nat_bflag", 6)
> ####### Routing Logic ########
>  
> # main request routing logic
> route{
> if (!mf_process_maxfwd_header("10")) {
> sl_send_reply("483","Too Many Hops");
> exit;
> }
> #
> # NAT detection
> route(4);
> if (has_totag()) {
> # sequential request withing a dialog should
> # take the path determined by record-routing
> if (loose_route()) {
> if (is_method("BYE")) {
> setflag(1); # do accounting ...
> setflag(3); # ... even if the transaction fails
> }
> route(1);
> } else {
> if (is_method("SUBSCRIBE") && uri == myself) {
> # in-dialog subscribe requests
> route(2);
> exit;
> }
> if ( is_method("ACK") ) {
> if ( t_check_trans() ) {
> # non 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.\n");
> exit;
> }
> }
> sl_send_reply("404","Not here");
> }
> exit;
> }
> #initial requests
> # CANCEL processing
> if (is_method("CANCEL"))
> {
> if (t_check_trans())
> t_relay();
> exit;
> }
> t_check_trans();
> # authentication
> route(3);
> # record routing
> if (!is_method("REGISTER|MESSAGE"))
> record_route();
> # account only INVITEs
> if (is_method("INVITE")) {
> setflag(1); # do accounting
> }
> if (!uri==myself)
> /* replace with following line if multi-domain support is used */
> ##if (!is_uri_host_local())
> {
> append_hf("P-hint: outbound\r\n");
> # if you have some interdomain connections via TLS
> ##if($rd=="tls_domain1.net <http://tls_domain1.net>") {
> ## t_relay("tls:domain1.net <http://domain1.net>");
> ## exit;
> ##} else if($rd=="tls_domain2.net <http://tls_domain2.net>") {
> ## t_relay("tls:domain2.net <http://domain2.net>");
> ## exit;
> ##}
> route(1);
> }
> # requests for my domain
> if( is_method("PUBLISH|SUBSCRIBE"))
> route(2);
> if (is_method("REGISTER"))
> {
> if (!save("location"))
> sl_reply_error();
> exit;
> }
> if ($rU==NULL) {
> # request with no Username in RURI
> sl_send_reply("484","Address Incomplete");
> exit;
> }
> # apply DB based aliases (uncomment to enable)
> ##alias_db_lookup("dbaliases");
>  
> if(uri=~"sip:[0-9]{2}@.*"){
> xlog("L_INFO","mylog: test1.\n");
> sd_lookup("speed_dial", "sip:$au@$fd");
> #sd_lookup("speed_dial");
> xlog("L_INFO","mylog: test2.\n");
> }
>  
> if (!lookup("location")) {
> switch ($retcode) {
> case -1:
> case -3:
> t_newtran();
> t_reply("404", "Not Found");
> exit;
> case -2:
> sl_send_reply("405", "Method Not Allowed");
> exit;
> }
> }
> # when routing via usrloc, log the missed calls also
> setflag(2);
> route(1);
> }
>  
> route[1] {
> #n# if (check_route_param("nat=yes")) {
> #n# setbflag(6);
> #n# }
> #n# if (isflagset(5) || isbflagset(6)) {
> #n# route(5);
> #n# }
> /* example how to enable some additional event routes */
> if (is_method("INVITE")) {
> #t_on_branch("1");
> t_on_reply("1");
> t_on_failure("1");
> }
> if (!t_relay()) {
> sl_reply_error();
> }
> exit;
> }
>  
> # Presence route
> /* uncomment the whole following route for enabling presence server */
> route[2]
> {
> #p# if (!t_newtran())
> #p# {
> #p# sl_reply_error();
> #p# exit;
> #p# };
> #p#
> #p# if(is_method("PUBLISH"))
> #p# {
> #p# handle_publish();
> #p# t_release();
> #p# }
> #p# else
> #p# if( is_method("SUBSCRIBE"))
> #p# {
> #p# handle_subscribe();
> #p# t_release();
> #p# }
> #p# exit;
>
> # if presence enabled, this part will not be executed
> if (is_method("PUBLISH") || $rU==null)
> {
> sl_send_reply("404", "Not here");
> exit;
> }
> return;
> }
> # Authentication route
> /* uncomment the whole following route for enabling authentication */
> route[3] {
> if (is_method("REGISTER"))
> {
> # authenticate the REGISTER requests (uncomment to enable auth)
> if (!www_authorize("", "subscriber"))
> {
> www_challenge("", "0");
> exit;
> }
> if ($au!=$tU)
> {
> sl_send_reply("403","Forbidden auth ID");
> exit;
> }
> } else {
> # authenticate if from local subscriber (uncomment to enable auth)
> if (from_uri==myself)
> {
> if (!proxy_authorize("", "subscriber")) {
> proxy_challenge("", "0");
> exit;
> }
> if (is_method("PUBLISH"))
> {
> if ($au!=$tU) {
> sl_send_reply("403","Forbidden auth ID");
> exit;
> }
> } else {
> if ($au!=$fU) {
> sl_send_reply("403","Forbidden auth ID");
> exit;
> }
> }
> consume_credentials();
> # caller authenticated
> }
> }
> return;
> }
> # Caller NAT detection route
> /* uncomment the whole following route for enabling Caller NAT 
> Detection */
> route[4]{
> #n# force_rport();
> #n# if (nat_uac_test("19")) {
> #n# if (method=="REGISTER") {
> #n# fix_nated_register();
> #n# } else {
> #n# fix_nated_contact();
> #n# }
> #n# setflag(5);
> #n# }
> return;
> }
> # RTPProxy control
> /* uncomment the whole following route for enabling RTPProxy Control */
> route[5] {
> #n# if (is_method("BYE")) {
> #n# unforce_rtp_proxy();
> #n# } else if (is_method("INVITE")){
> #n# force_rtp_proxy();
> #n# }
> #n# if (!has_totag()) add_rr_param(";nat=yes");
> return;
> }
> branch_route[1] {
> xdbg("new branch at $ru\n");
> }
>  
> onreply_route[1] {
> xdbg("incoming reply\n");
> #n# if ((isflagset(5) || isbflagset(6)) && 
> status=~"(183)|(2[0-9][0-9])") {
> #n# force_rtp_proxy();
> #n# }
> #n# if (isbflagset(6)) {
> #n# fix_nated_contact();
> #n# }
> }
>  
> failure_route[1] {
> #n# if (is_method("INVITE")
> #n# && (isbflagset(6) || isflagset(5))) {
> #n# unforce_rtp_proxy();
> #n# }
> if (t_was_cancelled()) {
> exit;
> }
> # uncomment the following lines if you want to block client
> # redirect based on 3xx replies.
> ##if (t_check_status("3[0-9][0-9]")) {
> ##t_reply("404","Not found");
> ## exit;
> ##}
> # uncomment the following lines if you want to redirect the failed
> # calls to a different new destination
> ##if (t_check_status("486|408")) {
> ## sethostport("192.168.2.100:5060 <http://192.168.2.100:5060>");
> ## append_branch();
> ## # do not set the missed call flag again
> ## t_relay();
> ##}
> }
> -------------------------------------------------------------------
> Here i'm using the table speed_dial. My data in table is
> username=5001
> domain=192.168.64.94
> sd_username=51
> sd_domain=192.168.64.94
>  
> I dialled 51 from useragent 1001. the output is not found.
> but it is displaying test1 and test2 messages from my cfg file which i 
> gave, i.e., it is entring into loop and function 
> sd_lookup("speed_dial"). But the problem with speed_dial i think so
>  
> Problem is same in two files...
> Please help me...
> Thanks in advance....
>  
> regards,
> Mythili.
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Kamailio (OpenSER) - Users mailing list
> Users at lists.kamailio.org
> http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
> http://lists.openser-project.org/cgi-bin/mailman/listinfo/users




More information about the Users mailing list