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