[Kamailio-Users] 513 Message too big
Klaus Darilion
klaus.mailinglists at pernau.at
Thu Apr 9 19:11:56 CEST 2009
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();
>> }
>>
>>
>
>
More information about the sr-users
mailing list