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
