session hangup on CANCEL request timeout on legB after canceled legA

there is a sequence which leads to session hangup:

http://pastebin.com/raw.php?i=a7LTxMAH

log related to trans_layer timeout response processing:

 [7423//core/sip/trans_layer.cpp:2029] DEBUG:  Transaction timeout!
 [7423//core/SipCtrlInterface.cpp:687] DEBUG:  Received reply: 408 Timeout
 [7423//core/SipCtrlInterface.cpp:688] DEBUG:  reply.callid =
<5B7B3E7D-5245401300096B25-7F213700>
 [7423//core/SipCtrlInterface.cpp:689] DEBUG:  reply.from_tag =
<361E9F5D-5245401300096B1D-7F213700>
 [7423//core/SipCtrlInterface.cpp:690] DEBUG:  reply.to_tag = <>
 [7423//core/SipCtrlInterface.cpp:691] DEBUG:  reply.contact = <>
 [7423//core/SipCtrlInterface.cpp:692] DEBUG:  reply.to_uri = <>
 [7423//core/SipCtrlInterface.cpp:693] DEBUG:  cseq = <10>
 [7423//core/SipCtrlInterface.cpp:694] DEBUG:  reply.route = <>
 [7423//core/SipCtrlInterface.cpp:695] DEBUG:  hdrs = <>
 [7423//core/SipCtrlInterface.cpp:696] DEBUG:  body-ct = <>
 [7423//core/SipCtrlInterface.cpp:702] DEBUG:  ^^ M
[5B7B3E7D-5245401300096B25-7F213700|361E9F5D-5245401300096B1D-7F213700]
ru SIP reply 408 Timeout handled ^^
 [7398//core/AmSessionProcessor.cpp:97] DEBUG:  running processing loop
 [7398//core/AmSessionProcessor.cpp:133] DEBUG:  processing events for 
up to 1 sessions
 [7398//core/AmSession.cpp:378] DEBUG:  vv S
[5B7B3E7D-5245401300096B25-7F213700|361E9F5D-5245401300096B1D-7F213700]
Cancelling, stopped, 1 UACTransPending, 0 usages vv
 [7398//core/AmSession.cpp:729] DEBUG:  AmSession processing event
 [7398//core/AmBasicSipDialog.cpp:410] DEBUG:  onRxReply(rep = 408
Timeout): transaction found!
 [7398//apps/sbc/SBCCallLeg.cpp:539] DEBUG:  onSipReply: 408 Timeout (fwd=1)
 [7398//apps/sbc/SBCCallLeg.cpp:540] DEBUG:  onSipReply: content-type =
 [7398//apps/sbc/CallLeg.cpp:838] DEBUG: 
361E9F5D-5245401300096B1D-7F213700: SIP reply 408/10 CANCEL (to relayed
request) received in Ringing state
 [7398//core/AmB2BSession.cpp:463] DEBUG:  onSipReply: CANCEL -> 408
Timeout (fwd=true), c-t=
 [7398//core/AmB2BSession.cpp:467] DEBUG:  sess 0x7fb36c002cc0 received
408 reply with != to-tag:  (remote-tag:as5ca9b297)

quick fix (requires a correct solution):

$ git diff core/AmB2BSession.cpp
diff --git a/core/AmB2BSession.cpp b/core/AmB2BSession.cpp
index 29ea826..2f135bb 100644
--- a/core/AmB2BSession.cpp
+++ b/core/AmB2BSession.cpp
@@ -462,6 +462,12 @@ void AmB2BSession::onSipReply(const AmSipRequest&
req, const AmSipReply& reply,
       reply.cseq_method.c_str(), reply.code,reply.reason.c_str(),
       fwd?"true":"false",reply.body.getCTStr().c_str());
 
+  if(!a_leg && reply.cseq_method==SIP_METH_CANCEL && reply.code>=400){
+         DBG("received failure reply for CANCEL on legB. Terminate leg");
+         terminateLeg();
+         return;
+  }
+
   if(!dlg->getRemoteTag().empty() && dlg->getRemoteTag() !=
reply.to_tag) {   
     DBG("sess %p received %i reply with != to-tag: %s (remote-tag:%s)",
        this, reply.code, reply.to_tag.c_str(),dlg->getRemoteTag().c_str());


-- 
Michael Furmur

_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev

Reply via email to