Hello,
the ACK for negative reply is hop by hop, absorbed by Kamailio. Somehow
it does not match the transaction. Can you send here a sip trace of such
call, from INVITE to ACK?
Maybe some headers are broken and transaction matching fails.
Cheers,
Daniel
On 02/25/2009 08:25 PM, Juan Perez wrote:
hello
I am having a prob handling the CANCEL in this
scenario
Kamailio 1.4 doing basic load balancing with LCR module.
Calling party makes a call, sends it to Kamailio, Kamailio looks up the
destination gw and sends the call to the dest IP.
I am using statefull mode and loose routing.
The calling party makes the call and while it is ringing it hangs up.
Kamailio receives the CANCEL and forward it to the dest IP, it receives
the 487 from dest IP and pass it back to the calling party.
This is when it gets weird. The calling party sends the ACK to the 487
and it looks like the proxy [kamailio] ignores it and keep sending the
487 to the calling party.
Calling party IP: 192.168.1.200
kamailio[proxy]: 192.168.1.50
dest IP: 192.168.11
PLease see below a tethereal output and my config file.
I would appreciate any help to help me fix this prob.
[root@proxy1 ~]# tethereal -i eth1 -S -w /root/call-with-cancel3.pcap
udp port 5060
Running as user "root" and group "root". This could be dangerous.
Capturing on eth1
0.000000 192.168.1.200 -> 192.168.1.50 SIP/SDP Request: INVITE
sip:664050495179280@192.168.1.50, with session description
0.000702 192.168.1.50 -> 192.168.1.200 SIP Status: 100 Giving a try
0.000774 192.168.1.50 -> 192.168.1.11 SIP/SDP Request: INVITE
sip:664050495179280@192.168.1.11:5060;transport=udp, with session
description
0.044219 192.168.1.11 -> 192.168.1.50 SIP Status: 100 Trying
0.731527 192.168.1.11 -> 192.168.1.50 SIP/SDP Status: 183 Session
Progress, with session description
0.731585 192.168.1.50 -> 192.168.1.200 SIP/SDP Status: 183 Session
Progress, with session description
1.869161 192.168.1.200 -> 192.168.1.50 SIP Request: CANCEL
sip:664050495179280@192.168.1.50
1.869626 192.168.1.50 -> 192.168.1.200 SIP Status: 200 canceling
1.869738 192.168.1.50 -> 192.168.1.11 SIP Request: CANCEL
sip:664050495179280@192.168.1.11:5060;transport=udp
1.869942 192.168.1.11 -> 192.168.1.50 SIP Status: 487 Request Terminated
1.869946 192.168.1.11 -> 192.168.1.50 SIP Status: 200 OK
1.870243 192.168.1.50 -> 192.168.1.11 SIP Request: ACK
sip:664050495179280@192.168.1.11:5060;transport=udp
1.870273 192.168.1.50 -> 192.168.1.200 SIP Status: 487 Request Terminated
1.871112 192.168.1.200 -> 192.168.1.50 SIP Request: ACK
sip:664050495179280@192.168.1.50
2.317041 192.168.1.50 -> 192.168.1.200 SIP Status: 487 Request Terminated
3.317025 192.168.1.50 -> 192.168.1.200 SIP Status: 487 Request Terminated
5.317028 192.168.1.50 -> 192.168.1.200 SIP Status: 487 Request Terminated
9.317036 192.168.1.50 -> 192.168.1.200 SIP Status: 487 Request Terminated
13.317043 192.168.1.50 -> 192.168.1.200 SIP Status: 487 Request Terminated
17.317049 192.168.1.50 -> 192.168.1.200 SIP Status: 487 Request Terminated
21.317057 192.168.1.50 -> 192.168.1.200 SIP Status: 487 Request Terminated
25.317064 192.168.1.50 -> 192.168.1.200 SIP Status: 487 Request Terminated
29.317071 192.168.1.50 -> 192.168.1.200 SIP Status: 487 Request Terminated
23 packets captured
This is my routing logic:
####### Routing Logic ########
# main routing logic
route{
xlog("L_INFO", "mylog: starting_main_logic.\n");
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
xlog("L_INFO","mylog: Too Many Hops.\n");
exit;
};
if (msg:len >= 2048 ) {
sl_send_reply("513", "Message too big");
xlog("L_INFO","mylog: Message too big.\n");
exit;
};
if (!method=="REGISTER") {
record_route();
xlog("L_INFO","mylog: Recording Route. Method: [$rm].\n");
}
if (loose_route()) {
# mark routing logic in request
append_hf("P-hint: rr-enforced\r\n");
xlog("L_INFO","mylog: Loose Route section. Method: [$rm].\n");
route(1);
};
if (method=="INVITE") {
if (!load_gws()) {
sl_send_reply("503", "Unable to load gateways");
exit;
}
if(!next_gw()){
sl_send_reply("503", "Unable to find a gateway");
exit;
}
route(1);
}
#CANCEL processing
if (is_method("CANCEL")) {
if (t_check_trans()) t_relay();
exit;
}
}
route[1] {
xlog("L_INFO","mylog: Route 1 section. Method [$rm].");
if (!t_relay()) {
xlog("L_INFO","mylog: Route 1 section. T_Relay failed. Method
[$rm].");
sl_reply_error();
};
exit;
}
------------------------------------------------------------------------
_______________________________________________
Kamailio (OpenSER) - Users mailing list
Users(a)lists.kamailio.org
http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
http://lists.openser-project.org/cgi-bin/mailman/listinfo/users
--
Daniel-Constantin Mierla
http://www.asipto.com