[Kamailio-Users] Handling CANCEL and 487

Juan Perez jperezsip2008 at yahoo.com
Wed Feb 25 19:25:28 CET 2009


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 at 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 at 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 at 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 at 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 at 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 at 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 at 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;
}


      
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20090225/534960d9/attachment.htm>


More information about the sr-users mailing list