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