Module: sems Branch: master Commit: 24d5489f76afe6e95ecdb55dc996ef3cf226b73d URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=24d5489f76afe6e95ecdb55dc996ef3cf226b73d
Author: Raphael Coeffic <[email protected]> Committer: Raphael Coeffic <[email protected]> Date: Wed Oct 19 16:22:49 2011 +0200 b/f: fixes broken OA with offerless INV w/ SEMS as UAS. the bugs were introduced by the changes in commit 618f6371. --- core/AmSipDialog.cpp | 34 +++++++++++++--------------------- core/AmSipDialog.h | 3 +++ 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/core/AmSipDialog.cpp b/core/AmSipDialog.cpp index 087823c..3b05825 100644 --- a/core/AmSipDialog.cpp +++ b/core/AmSipDialog.cpp @@ -91,6 +91,7 @@ void AmSipDialog::OATrans::clearTransitionalState() AmSipDialog::AmSipDialog(AmSipDialogEventHandler* h) : status(Disconnected),oa_trans(), + early_session_started(false),session_started(false), cseq(10),r_cseq_i(false),hdl(h), pending_invites(0),cancel_pending(false), outbound_proxy(AmConfig::OutboundProxy), @@ -381,29 +382,19 @@ int AmSipDialog::checkStateChange() (oa_trans.state == OA_Completed)) { ret = onSdpCompleted(); - } + if(ret) return ret; - if(saved_status != getStatus()){ - switch(getStatus()){ - case Early: - if(oa_trans.state == OA_Completed){ - hdl->onEarlySessionStart(); - } - break; - case Connected: - if(oa_trans.state == OA_Completed){ - hdl->onSessionStart(); - } - else { - // Anything we should do about it??? - DBG("SIP dialog transitioned to Connected without a valid media session setup.\n"); - } - break; - default: - break; + if((getStatus() == Early) && !early_session_started) { + hdl->onEarlySessionStart(); + early_session_started = true; + } + + if((getStatus() == Connected) && !session_started) { + hdl->onSessionStart(); + session_started = true; } } - + return ret; } @@ -1192,7 +1183,8 @@ int AmSipDialog::reply(const AmSipTransaction& t, ret = checkStateChange(); if((uas_trans.find(reply.cseq) == uas_trans.end()) && - (reply.cseq == oa_trans.cseq)){ + (reply.cseq == oa_trans.cseq) && + (reply.cseq_method != SIP_METH_INVITE)){ // transaction has been removed: // -> cleanup OA state DBG("transaction finished by final reply %u: resetting OA state\n", reply.cseq); diff --git a/core/AmSipDialog.h b/core/AmSipDialog.h index dbbdea9..2fc1c12 100644 --- a/core/AmSipDialog.h +++ b/core/AmSipDialog.h @@ -147,6 +147,9 @@ private: Status saved_status; OAState saved_oa_state; + bool early_session_started; + bool session_started; + AmSipDialogEventHandler* hdl; int onTxReply(AmSipReply& reply); _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
