Hi Mates,I am testing a Client in Nokia E65 using kamailio 1.3.3. I managed to successfull get it Registered but when i attempt to make a call i always get the "404 Not Found" message in the INVITE. Strangely enough, the Client appears to still be ONLINE in the location table.
################################ kamailio config below ############################## if(!is_method("REGISTER")){ if(nat_uac_test("19")){ record_route(";nat=yes"); } else { record_route(); }; };
##Loose_route packets if (has_totag()) { #sequential request withing a dialog should # take the path determined by record-routing if (loose_route()) { if(method=="BYE") { #Account BYE transactions setflag(2); }; #Check authentication of re-invites if(method=="INVITE" && (!allow_trusted())) { if (!proxy_authorize("","subscriber")) { proxy_challenge("","0"); exit; } else if (!check_from()) { sl_send_reply("403", "Forbidden, use From=ID"); exit; }; }; if(method=="BYE" || method=="CANCEL") { end_media_session(); }; ##Detect requests in the dialog behind NAT and flag with 6 if(nat_uac_test("19") || search("^Route:.*;nat=yes")){ append_hf("P-hint: LR|fixcontact,setflag6\r\n"); fix_contact(); setflag(6); }; route(1); } else { sl_send_reply("404","Not here"); } exit; }
##Loose_route packets if (loose_route()) { if(!has_totag()){ sl_send_reply("403", "Initial Loose-Routing Rejected"); exit; };
route(1); };
#CANCEL processing if (is_method("CANCEL")) { if (t_check_trans()) { end_media_session(); t_relay(); }; exit; }
t_check_trans(); # # -- 3 -- Determine Request Target # if (method=="REGISTER") { route(2); } else { route(3); }; }
route[1] { # # -- 4 -- Forward request to target # # Forward statefully t_on_reply("1"); t_on_failure("1"); if (!t_relay()) { # sl_reply_error(); }; exit; } route[2] { ## Register request handler if (is_uri_host_local()) { if (!www_authorize("", "subscriber")) { www_challenge("", "0"); exit; };
if (!check_to()) { sl_send_reply("403", "Forbidden"); exit; };
if(!search("^Contact:[ ]**") && client_nat_test("7")) { setflag(6); fix_nated_register(); force_rport(); }; save("location"); exit;
} else if {
sl_send_reply("403", "Forbidden");
}; }
route[3] { ## Requests handler if (method=="INVITE") { # Account INVITE packets setflag(2); # Account Missed calls setflag(3); # Radius Extra # $avp(s:sip_proxy_ip)="127.0.0.1"; }; if (is_from_local()){ # From an internal domain -> check the credentials and the FROM if(!allow_trusted()){ if (!proxy_authorize("","subscriber")) { proxy_challenge("","0"); exit; } else if(!check_from()) { sl_send_reply("403", "Forbidden, use From=ID"); exit; }; };
if (client_nat_test("3")) { append_hf("P-hint: route(3)|setflag7,forcerport,fix_contact\r\n"); setflag(7); force_rport(); fix_contact(); };
#unconditional call forward if(avp_db_load("$ru/username","$avp(s:callfwd)")) { avp_pushto("$ru", "$avp(s:callfwd)"); route(1); exit; } consume_credentials(); #verify aliases, if found replace R-URI. lookup("aliases"); if (is_uri_host_local()) { # -- Inbound to Inbound route(10); } else { # -- Inbound to outbound route(11); };
} else {
#From an external domain ->do not check credentials #Verify aliases, if found replace R-URI. lookup("aliases"); if (is_uri_host_local()) { #-- Outbound to inbound route(12); } else { # -- Outbound to outbound route(13); }; }; }
route[4] { # routing to the public network rewritehostport("xx.xxx.xxx.xx:5065"); #t_on_failure("2"); if (!t_relay()) { sl_reply_error(); }; exit; }
route[6] { # # -- NAT handling -- # if (isflagset(6) || isflagset(7)) { append_hf("P-hint: Route[6]: mediaproxy \r\n"); use_media_proxy(); }; }
route[10] { #from an internal domain -> inbound #Native SIP destinations are handled using the location table #Gateway destinations are handled by regular expressions append_hf("P-hint: inbound->inbound \r\n");
if (uri=~"^sip:0[1-9][0-9]*@") { if (is_user_in("credentials","local")) { strip(1); prefix("27"); route(6); route(4); exit; } else { sl_send_reply("403", "No permissions for local calls"); exit; }; };
if (uri=~"^sip:00[1-9][0-9]*@") { if (is_user_in("credentials","int")) { strip(2); route(6); route(4); exit; } else { sl_send_reply("403", "No permissions for international calls"); }; };
if (!lookup("location")) {
route(6); route(1); } else { sl_send_reply("404", "Not Found"); exit; }; route(6); route(1); } route[11] { # from an internal domain -> outbound # Simply route the call outbound using DNS search append_hf("P-hint: inbound->outbound \r\n"); route(1); }
route[12] { # From an external domain -> inbound # Verify aliases, if found replace R-URI. lookup("aliases"); if (!lookup("location")) { sl_send_reply("404", "Not Found"); exit; }; route(1); }
route[13] { #From an external domain outbound #we are not accepting these calls append_hf("P-hint: outbound->inbound \r\n"); sl_send_reply("403", "Forbidden"); exit; }
failure_route[1] { ##-- ##-- If cancelled, exit. ##-- if (t_was_cancelled()) { exit; }; ##-- ##-- If busy send to the e-mail server, prefix the "b" ##-- character to indicate busy. ##-- if (t_check_status("486")) { revert_uri(); prefix("b"); rewritehostport("xx.xxx.xxx.xx:5065"); append_branch(); route(1); exit; }; ##-- ##-- If timeout (408) or unavailable temporarily (480), ##-- prefix the uri with the "u"character to indicate ##-- unanswered and send to the e-mail ##-- sever ##-- if (t_check_status("408") || t_check_status("480")) { revert_uri(); prefix("u"); rewritehostport("xx.xxx.xxx.xx:5065"); append_branch(); route(1); exit; }; }
failure_route[2] { t_on_failure("2"); t_relay(); }
onreply_route[1] { # #-- On-replay block routing -- # if (client_nat_test("1")) { append_hf("P-hint: Onreply-route - fixcontact \r\n"); fix_contact(); };
if ((isflagset(6) || isflagset(7)) && (status=~"(180)|(183)|2[0-9][0-9]")) { if (search("^Content-Type:[ ]*application/sdp")) { append_hf("P-hint: onreply_route|usemediaproxy \r\n"); use_media_proxy(); }; }; exit; }
###################################################################### Captured Invite packets below. #####################################################################
. U 2008/12/12 20:41:19.227089 41.23.215.255:5060 -> xx.xxx.xxx.xx:5060 INVITE sip:0123825710@xx.xxx.xxx.xx SIP/2.0. Via: SIP/2.0/UDP 41.23.215.255:5060 ;branch=z9hG4bK5lvrd249rhhc6dbif4j3i48;rport. From: <sip:1974@10.20.11.62 sip%3A1974@10.20.11.62
;tag=gm8rd21tl9hc68h6f4j2.
To: sip:0123825710@xx.xxx.xxx.xx. Contact: <sip:1974@41.23.215.255 sip%3A1974@41.23.215.255>. Accept-Contact: *;+media=audio. CSeq: 953 INVITE. Call-ID: -u6Sy5l7oIf2mTACTYE46_z8sRn-_f. User-Agent: Tuune Mobile. Max-Forwards: 70. Content-Type: application/sdp. Content-Length: 172. . v=0. o=- 54865261 0 IN IP4 41.23.215.255. s=Tuune Mobile. c=IN IP4 41.23.215.255. t=0 0. m=audio 5000 RTP/AVP 0 97. a=sendrecv. a=rtpmap:0 PCMU/8000. a=rtpmap:97 AMR/8000.
U 2008/12/12 20:41:19.227945 xx.xxx.xxx.xx:5060 -> 41.23.215.255:5060 SIP/2.0 404 Not Found. Via: SIP/2.0/UDP 41.23.215.255:5060 ;branch=z9hG4bK5lvrd249rhhc6dbif4j3i48;rport= 5060. From: <sip:1974@10.20.11.62 sip%3A1974@10.20.11.62
;tag=gm8rd21tl9hc68h6f4j2.
To: <sip:0123825710@xx.xxx.xxx.xx
;tag=329cfeaa6ded039da25ff8cbb8668bd2.bf78.
CSeq: 953 INVITE. Call-ID: -u6Sy5l7oIf2mTACTYE46_z8sRn-_f. Server:Tuune Mobile Test. Content-Length: 0. . #################################### It is online ############ 41:/# openserctl ul show database engine 'MYSQL' loaded Control engine 'FIFO' loaded entering fifo_cmd ul_dump Domain:: aliases table=512 records=0 max_slot=0 Domain:: location table=512 records=1 max_slot=1 AOR:: 1974 Contact:: sip:1974@41.22.248.8 sip%3A1974@41.22.248.8 Q= Expires:: 932 Callid:: x1ySy9r2oIf1Ogj2Uzeht2FSEcYGxE Cseq:: 957 User-agent:: n/a State:: CS_SYNC Flags:: 0 Cflag:: 0 Socket:: udp:xx.xxx.xxx.xx:5060 Methods:: 4294967295 FIFO command was: :ul_dump:openser_receiver_15196
I hope some one can give a clue, WBR, Lu.
2008/10/15 luzango mfupe luzango.mfupe@gmail.com:
Hi Mates, I am testing a Client in Nokia E65 using kamailio 1.3.3. I managed to successfull get it Registered but when i attempt to make a call i always get the "404 Not Found" message in the INVITE. Strangely enough, the Client appears to still be ONLINE in the location table.
Your conclusion is wrong. A user doen't need to be registered in order to make a PSTN call (except if you add that logic to your script, that is not the case).
So, forget yuor user is registered, it's doesn't matter, and debug why your dialed number is not matched as a number to the PSTN.
On Wed, Oct 15, 2008 at 10:48 AM, Iñaki Baz Castillo ibc@aliax.net wrote:
2008/10/15 luzango mfupe luzango.mfupe@gmail.com:
Hi Mates, I am testing a Client in Nokia E65 using kamailio 1.3.3. I managed to successfull get it Registered but when i attempt to make a call i always get the "404 Not Found" message in the INVITE. Strangely enough, the Client appears to still be ONLINE in the location table.
Your conclusion is wrong. A user doen't need to be registered in order to make a PSTN call (except if you add that logic to your script, that is not the case).
So, forget yuor user is registered, it's doesn't matter, and debug why your dialed number is not matched as a number to the PSTN.
Iñaki is right here.
In addition, "404 Not Found" is not the correct reponse when the destination target is not registered, IMO it should be a 480 instead.
2008/10/16 Victor Pascual Ávila victor.pascual.avila@gmail.com:
In addition, "404 Not Found" is not the correct reponse when the destination target is not registered, IMO it should be a 480 instead.
Yeah!!!
404 should be returned when the proxy/UAS received a request and it's not responsible for it, for example a non existing user (non existing user != non registered user). When a user is not registered, but it does exist in the server, the server must reply "480".