[Kamailio-Users] Kamailio 1.4.3 Carrierroute BYE does not

unknown at 1.org unknown at 1.org
Wed Feb 18 05:12:05 CET 2009


Here is it Basic config for Kamailio 1.4.3


####### Global Parameters #########
debug=9 # change this to 3
log_stderror=yes
fork=yes
children=4

listen=udp:x.x.x.x:5060

####### Modules Section ########

#set module path
mpath="/opt/openser/lib64/kamailio/modules/"
loadmodule "db_mysql.so"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "textops.so"
loadmodule "mi_fifo.so"
#loadmodule "uri_db.so"
loadmodule "uri.so"
loadmodule "xlog.so"
loadmodule "carrierroute.so"
# ----------------- setting module-specific parameters ---------------

# ----- mi_fifo params -----
modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")

# ----- carrierroute params -----
modparam("carrierroute", "db_url", "mysql://help:help@localhost/sip")
modparam("carrierroute", "config_source", "db")


####### Routing Logic ########
# main request routing logic

route{
        if (!mf_process_maxfwd_header("10")) {
                sl_send_reply("483","Too Many Hops");
                exit;
        };

        if (has_totag()) {
                # sequential request withing a dialog should
                # take the path determined by record-routing
                if (loose_route()) {
    #                            if (is_method("BYE")) { 
    # with or without BYE i have the same result
    #                            if (t_check_trans())
    #                            t_relay();
    #				}
                        route(10);
                } else {
                        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");
                                        xlog("L_WARN", "[$mi] discarding
ACK\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();

        # record routing
        if (!is_method("REGISTER|MESSAGE"))
                record_route();

        if (!uri==myself) {
                append_hf("P-hint: outbound\r\n");
                route(10);
                exit;
        }

        # requests for my domain

        if ($rU==NULL) {
                # request with no Username in RURI
                sl_send_reply("484","Address Incomplete");
                exit;
        }

        if (is_method("INVITE")) {
                if (cr_route("default", "3", "$rU", "$rU", "call_id")) {
                        t_on_failure("1");
                        route(10);
                        exit;
                }
                exit;
        }
}


route[10] {
         cr_user_carrier("$fU", "$fd", "$avp(s:carrier)");
        $avp(s:domain)="3";
         if (!cr_route("$avp(s:carrier)", "$avp(s:domain)", "$rU",
"$rU", "call_id")) {
                xlog("L_ERR", "cr_route failed\n");
                exit;
         }
        # if you store also the port as part of the rewrite host,
        # otherwise you can just use $rd later
        $avp(s:host)= $rd;
        t_on_failure("1");
#                xlog("method: $rm");
                if (!t_relay()) {
                        sl_reply_error();
        }
}


#onreply_route[2] {
#        xlog("incoming reply\n");
#}

failure_route[1] {
        revert_uri();
        if (!cr_next_domain("$avp(s:carrier)", "$avp(s:domain)", "$rU",
"$avp(s:host)", "$T_reply_code", "$avp(s:domain)")) {
                xlog("L_ERR", "cr_next_domain failed\n");
                exit;
        }
        if (!cr_route("$avp(s:carrier)", "$avp(s:domain)", "$rU", "$rU",
"call_id")) {
                xlog("L_ERR", "cr_route failed\n");
                exit;
        }
#        $avp(s:host)= $rd+":"+$rp;
        $avp(s:host)= $rd;
        t_on_failure("1");
        append_branch();
        if (!t_relay()) {
                xlog("L_ERR", "t_relay failed\n");
                exit;
        }
}

i am running solaris 10, 64 bits, then i really don't know if i should
not try in this platform.

I somebody has a Working config as an example will be great.

but i still dont have the BYE, is not leaving the server, when i sniff
the network.

the kamailio debug shows at least 4 times something like this :

bash-3.00# Feb 17 22:32:11 [15673] DBG:tm:utimer_routine: timer
routine:7,tl=fffffffef0293738 next=0, timeout=44300000
Feb 17 22:32:11 [15673] DBG:tm:retransmission_handler:
retransmission_handler : request resending (t=fffffffef0293518, BYE
sip:4 ... )
Feb 17 22:32:11 [15673] DBG:tm:set_timer: relative timeout is 4000000
Feb 17 22:32:11 [15673] DBG:tm:insert_timer_unsafe: [7]:
fffffffef0293738 (48300000)
Feb 17 22:32:11 [15673] DBG:tm:retransmission_handler:
retransmission_handler : done

bash-3.00# Feb 17 22:32:16 [15673] DBG:tm:utimer_routine: timer
routine:7,tl=fffffffef0293738 next=0, timeout=48300000
Feb 17 22:32:16 [15673] DBG:tm:retransmission_handler:
retransmission_handler : request resending (t=fffffffef0293518, BYE
sip:4 ... )
Feb 17 22:32:16 [15673] DBG:tm:set_timer: relative timeout is 4000000
Feb 17 22:32:16 [15673] DBG:tm:insert_timer_unsafe: [7]:
fffffffef0293738 (52300000)
Feb 17 22:32:16 [15673] DBG:tm:retransmission_handler:
retransmission_handler : done

thanks

F


On Tue, 2009-02-17 at 18:48 +0100, Henning Westerholt wrote:
> On Tuesday 17 February 2009, Omar wrote:
> > i did
> >
> > there is no bye leaving from the kamailio at all
> >
> > the config is i stated before but now without the exit in the BYE
> > condition.
> >
> > kamailio saves the bye when the bye comes from the B side, yes
> > but it does not send anything back to the Originator GW, as it should.
> > i made the captures and nothing. Kamailio receives and process the bye
> > for CDR, but it does not send the BYE to the originator. i captured in
> > the port 5060 and nothing comes.
> >
> > it is maybe a bug.?
> 
> Hi Omar,
> 
> it could be a bug, a misconfiguration, or a user agent which does not act 
> according the standard. Does the BYE reach your forwarding/ t_relay statement 
> in your config, you can check with xlog as well. This gives you the method of 
> the SIP message you actually proceed in the config, just add this before the 
> forwarding statement.
> 
> xlog("method: $rm");
> 
> Cheers,
> 
> Henning





More information about the Users mailing list