Dear all,
My use case is :
I defined a username = 112 (for emergency call) This username doesn't exist in subscribers table and unavailable in location table. The idea is when Sopftphone1 call the group = 112 then Kamailio will forward the call to a group using SERIAL FORKING.
=> Softphone 1 -> Sends INVITE to 112 -> Kamailio -> FORWARD TO SERIAL FORKING (4x softphone all registered and in location table). The q priority could be hybrid that means 2x softphone could have same priority.
My issues : - the q priority forced for each softphone is not taking into account. - the first branch created when send INVITE to 112 is still available.
My setup
Kamailio is behind a NAT.
Kamailio version : sipsecure@kamailio:/$ kamailio -version version: kamailio 5.5.4 (x86_64/linux) flags: USE_TCP, USE_TLS, USE_SCTP, TLS_HOOKS, USE_RAW_SOCKS, DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MMAP, PKG_MALLOC, Q_MALLOC, F_MALLOC, TLSF_MALLOC, DBG_SR_MEMORY, USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT, USE_DNS_CACHE, USE_DNS_FAILOVER, USE_NAPTR, USE_DST_BLOCKLIST, HAVE_RESOLV_RES, TLS_PTHREAD_MUTEX_SHARED ADAPTIVE_WAIT_LOOPS 1024, MAX_RECV_BUFFER_SIZE 262144, MAX_URI_SIZE 1024, BUF_SIZE 65535, DEFAULT PKG_SIZE 8MB poll method support: poll, epoll_lt, epoll_et, sigio_rt, select. id: unknown compiled with gcc 10.2.1 Kamailio.cfg # ----- tm params ----- # auto-discard branches from previous serial forking leg modparam("tm", "failure_reply_mode", 3) # default retransmission timeout: 5sec modparam("tm", "fr_timer", 5000) # default invite retransmission timeout after 1xx: 10sec modparam("tm", "fr_inv_timer", 10000) # This is the name of an XAVP that the t_load_contacts() function uses to store contacts of the destination set and that t_next_contacts() function uses to restore those contacts. modparam("tm", "contacts_avp", "tm_contacts") modparam("tm", "contact_flows_avp", "tm_contact_flows")
# modparam("tm|usrloc", "xavp_contact", "tm_contacts")
# ----- rr params ----- # set next param to 1 to add value to ;lr param (helps with some UAs) modparam("rr", "enable_full_lr", 0) # do not append from tag to the RR (no need for this script) modparam("rr", "append_fromtag", 0) route[INVITE]{ route(THREAD_CHECK); route(AUTH); route(RECORD_ROUTE); setflag(FLT_ACC);
switch($tU) { case "112": xlog("MY_SEVERITY"," -- Calling Group Serial"); route(FORK_SERIAL); break;
case "113": xlog("MY_SEVERITY"," -- Calling Group Parralelle"); route(FORK_PARALLEL); break;
default: xlog("MY_SEVERITY"," -- Calling Someone"); route(LOCATION); route(RELAY); break; } exit; }
route[FORK_SERIAL]{
t_on_reply("MANAGE_REPLY");
#!ifndef WITH_BRIDGE_ON_FAIL setbflag(FLB_BRIDGE); #!endif route(IPV4V6); route(NATMANAGE);
$var(uri1)="sip:9919995@192.168.1.41"; $var(uri2)="sip:9919994@192.168.1.41"; $var(uri3)="sip:9919991@192.168.1.41"; $var(uri4)="sip:9919997@192.168.1.41";
lookup("location","$var(uri4)"); append_branch("$ru","0.2");
lookup("location","$var(uri1)"); append_branch("$ru","0.8");
lookup("location","$var(uri2)"); append_branch("$ru","0.5");
lookup("location","$var(uri3)"); append_branch("$ru","0.5");
t_load_contacts();
t_next_contacts();
t_on_failure("SERIAL");
#!ifdef WITH_SIPSECURE_DEBUG xlog("MY_SEVERITY"," ROUTE_SERIAL : Relaying \n"); #!endif #Relay (aka Forward) the request t_relay(); break; }
failure_route[SERIAL]{
xlog("MY_SEVERITY","At failure route - Trying next destination");
if (!t_next_contacts()) { send_reply("408","Nobody available"); exit; }
t_on_failure("SERIAL"); t_relay(); }
Any highlight will be welcome.
Best Regards, -- Youssef