[Kamailio-Users] 513 Message too big
Joao Gomes Pereira
gomespereira at startel.pt
Thu Apr 9 18:01:36 CEST 2009
Hello
Here is the most important part of my configuration.
What could be creating the loops? My t_relay is in the ENUM lookup...
but It should work this way.
Do I need t_relay in route[2] after forwarding to the PSTN gateway?
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