Yes, I do have loops:
192.168.1.20:5060 -> 192.168.1.20:5060 NOTIFY sip:sip.startel.pt SIP/2.0..Record-Route: <sip:192.168.1.20;lr=on;ftag=8719b3b8add4581co1> ..Record-Route: <sip:192.168.1.20;lr=on;ftag=8719b3b8add4581co1>..Record-Route: <sip:213.63.185.5 8;lr=on;ftag=8719b3b8add4581co1>..Record-Route: <sip:192.168.1.20;lr=on;ftag=8719b3b8add4581co1>. .Record-Route: <sip:192.168.1.20;lr=on;ftag=8719b3b8add4581co1>..Record-Route: <sip:192.168.1.20 ;lr=on;ftag=8719b3b8add4581co1>..Record-Route: <sip:192.168.1.20;lr=on;ftag=8719b3b8add4581co1>.. Record-Route: <sip:192.168.1.20;lr=on;ftag=8719b3b8add4581co1>..Record-Route: <sip:192.168.1.20; lr=on;ftag=8719b3b8add4581co1>..Record-Route: <sip:192.168.1.20;lr=on;ftag=8719b3b8add4581co1>..R ecord-Route: <sip:192.168.1.20;lr=on;ftag=8719b3b8add4581co1>..Record-Route: <sip:192.168.1.20;l r=on;ftag=8719b3b8add4581co1>..Record-Route: <sip:192.168.1.20;lr=on;ftag=8719b3b8add4581co1>..Re cord-Route: <sip:192.168.1.20;lr=on;ftag=8719b3b8add4581co1>..Record-Route: <sip:192.168.1.20;lr =on;ftag=8719b3b8add4581co1>..Record-Route: <sip:192.168.1.20;lr=on;ftag=8719b3b8add4581co1>..Rec ord-Route: <sip:192.168.1.20;lr=on;ftag=8719b3b8add4581co1>..Record-Route: <sip:192.168.1.20;lr= on;ftag= Klaus Darilion wrote: > Joao Gomes Pereira wrote: >> Hello >> Here is the most important part of my configuration. >> What could be creating the loops? My t_relay is in the ENUM lookup... > > Before analyzing the config we have to find out if there is really a > loop. Have you verified with ngrep that the proxy loops the message to > itself? > >> but It should work this way. >> Do I need t_relay in route[2] after forwarding to the PSTN gateway? > > yes. > > regards > klaus > > PS: often seen errors: > - missing "exit" causes the message is t_relayed twice > - uri == myself fails: proxy does not detect that the RURI domain is > itself > >> Thanks >> Joao Pereira >> >> >> route{ >> >> if (!mf_process_maxfwd_header("10")) { >> sl_send_reply("483","Too Many Hops"); >> exit; >> }; >> >> if (msg:len >= 2048 ) { >> sl_send_reply("513", "Message too big"); >> exit; >> }; >> >> >> >> >> # -------------------------------------------------- >> # PRESENCE Section >> # -------------------------------------------------- >> if (has_totag()) { >> log(3, "LOG - has_totag \n"); >> # 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(6); >> exit; >> } >> if ( is_method("ACK") ) { >> if ( t_check_trans() ) { >> # non loose-route, but >> stateful ACK; must be an A >> t_relay(); >> exit; >> } else { >> # ACK without matching >> transaction ... ignore and >> exit; >> } >> } >> sl_send_reply("404","Not here"); >> } >> exit; >> } >> >> >> >> if( is_method("PUBLISH|SUBSCRIBE")) >> route(6); >> >> if (!method=="REGISTER") >> record_route(); >> >> if (loose_route()) { >> # mark routing logic in request >> append_hf("P-hint: rr-enforced\r\n"); >> route(1); >> }; >> >> >> >> # -------------------------------------------------- >> # OPTIONS Section >> # -------------------------------------------------- >> if (method=="OPTIONS") { >> options_reply(); >> return; >> }; >> >> >> >> >> if (!uri==myself) { >> append_hf("P-hint: outbound\r\n"); >> route(1); >> }; >> >> >> >> # -------------------------------------------------- >> # Users Registration >> # -------------------------------------------------- >> >> # if the request is for other domain use UsrLoc >> # (in case, it does not work, use the following command >> # with proper names and addresses in it) >> if (uri==myself) { >> >> if (method=="REGISTER") { >> >> # Uncomment this if you want to use digest >> authentication >> if (!www_authorize("mydomain.pt", >> "subscriber")) { >> www_challenge("mydomain.pt", "0"); >> exit; >> }; >> >> save("location"); >> exit; >> }; >> >> >> >> # -------------------------------------------------- >> # Call Routing Section >> # -------------------------------------------------- >> if (!lookup("location")) { >> >> if (is_method("INVITE")) { >> log(3, "LOG: CALL ROUTING - method = invite\n"); >> >> # ENUM >> if ( method=="INVITE" && >> uri=~"sip:\+[1-9][0-...@mydomain.pt") { >> >> if(!enum_query("e164.org.")) { >> log(1, "LOG: ENUM: failed!!! :( \n"); >> }else{ >> log(1, "LOG: ENUM: query exists!!! :) \n"); >> >> if (!method=="REGISTER") record_route(); >> t_relay(); >> return; >> } >> >> } >> >> >> # Route E.164 numbers to PSTN Gateway >> if (uri=~"sip:\+[1-9][0-...@mydomain.pt" ) { >> >> if (isflagset(29)){ >> # gateway 1 >> route(2); >> return; } else{ >> #gateway 2 >> route(3); >> return; } >> >> } >> >> >> >> } >> } >> >> route(1); >> } >> >> route[1] { >> xlog("LOG: route 1 $ru/$du\n"); >> >> if (check_route_param("nat=yes")) { >> setbflag(6); >> } >> if (isflagset(5) || isbflagset(6)) { >> route(5); >> } >> >> t_on_reply("1"); >> >> # send it out now; use stateful forwarding as it works reliably >> # even for UDP2TCP >> if (!t_relay()) { >> sl_reply_error(); >> }; >> exit; >> >> } >> >> >> >> # PSTN Gateway >> route[2] >> { >> log(3, "LOG: route 2 \n"); >> >> if (check_route_param("nat=yes")) { >> setbflag(6); >> } >> if (isflagset(5) || isbflagset(6)) { >> route(5); >> } >> >> t_on_reply("1"); >> >> # forward to PSTN gateway >> rewritehostport("gateway_IP:5060"); >> >> if (!t_relay()) { >> sl_reply_error(); >> }; >> } >> >> >> >> >> # Caller NAT detection route >> route[4]{ >> log(3, "LOG: route 4 \n"); >> force_rport(); >> if (nat_uac_test("19")) { >> if (method=="REGISTER") { >> fix_nated_register(); >> } else { >> fix_nated_contact(); >> } >> setflag(5); >> } >> >> return; >> } >> >> # RTPProxy control >> route[5] { >> >> >> if (is_method("BYE")) { >> unforce_rtp_proxy(); >> } else if (is_method("INVITE")){ >> force_rtp_proxy(); >> } >> if (!has_totag()) add_rr_param(";nat=yes"); >> >> return; >> } >> >> >> >> >> >> >> >> onreply_route[1] { >> xdbg("incoming reply\n"); >> if ((isflagset(5) || isbflagset(6)) && >> status=~"(183)|(2[0-9][0-9])") { >> force_rtp_proxy(); >> } >> if (isbflagset(6)) { >> fix_nated_contact(); >> } >> >> >> } >> >> >> >> failure_route[1] { >> >> if (is_method("INVITE") >> && (isbflagset(6) || isflagset(5))) { >> unforce_rtp_proxy(); >> } >> >> if (t_was_cancelled()) { >> exit; >> } >> >> } >> >> >> >> >> >> >> >> >> >> >> Iñaki Baz Castillo wrote: >>> 2009/4/9 Joao Gomes Pereira <gomespere...@startel.pt>: >>> >>>> Hello >>>> I did ngrep -d lo port 5060 >>>> >>>> And there are loops, because the message "513 Message too big " >>>> appears lots >>>> of times, and always from my IP to my IP >>>> >>>> What parts of the configuration could be creating these loops? >>>> >>> Obviously we don't know your configuration. >>> But tipically, a loop occurs when Kamailio does t_relay() and the >>> request leaves the proxy with the RURI unchanged (so pointed to >>> itself). >>> >>> You must inspect the ngrep capture and determine why the request is >>> looped. A very basic example of looping: >>> >>> route { >>> t_relay(); >>> } >>> >>> >> >> > -- StarTel - A Rede Livre Joao Gomes Pereira www.startel.pt +351 304500650 sip: gomespere...@startel.pt _______________________________________________ Kamailio (OpenSER) - Users mailing list Users@lists.kamailio.org http://lists.kamailio.org/cgi-bin/mailman/listinfo/users http://lists.openser-project.org/cgi-bin/mailman/listinfo/users