[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