[Kamailio-Users] 513 Message too big

Joao Gomes Pereira gomespereira at startel.pt
Thu Apr 9 19:52:09 CEST 2009



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-9]*@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-9]*@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 <gomespereira at 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: gomespereira at startel.pt




More information about the Users mailing list