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
# ----- 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,--