Module: sems Branch: master Commit: 4960be4d5363b3e7e2139e57638a3b7d99e24bbb URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=4960be4d5363b3e7e2139e57638a3b7d99e24bbb
Author: Raphael Coeffic <[email protected]> Committer: Stefan Sayer <[email protected]> Date: Wed Apr 2 11:53:38 2014 +0200 core: b/f: do not re-use the uac transaction iterator after onRxReplyStatus() The transaction could possibly have been deleted in between, whereby it is unclear where. --- core/AmBasicSipDialog.cpp | 12 +++++++----- core/AmBasicSipDialog.h | 3 +-- core/AmSipDialog.cpp | 3 +-- core/AmSipDialog.h | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/core/AmBasicSipDialog.cpp b/core/AmBasicSipDialog.cpp index f2a8e47..ac37157 100644 --- a/core/AmBasicSipDialog.cpp +++ b/core/AmBasicSipDialog.cpp @@ -358,8 +358,7 @@ void AmBasicSipDialog::onRxRequest(const AmSipRequest& req) hdl->onSipRequest(req); } -bool AmBasicSipDialog::onRxReplyStatus(const AmSipReply& reply, - TransMap::iterator t_uac_it) +bool AmBasicSipDialog::onRxReplyStatus(const AmSipReply& reply) { /** * Error code list from RFC 5057: @@ -448,15 +447,18 @@ void AmBasicSipDialog::onRxReply(const AmSipReply& reply) updateDialogTarget(reply); Status saved_status = status; - if(onRxReplyStatus(reply,t_it) && hdl) - hdl->onSipReply(t_it->second,reply,saved_status); + AmSipRequest orig_req(t_it->second); + + if(onRxReplyStatus(reply) && hdl) { + hdl->onSipReply(orig_req,reply,saved_status); + } if((reply.code >= 200) && // final reply // but not for 2xx INV reply (wait for 200 ACK) ((reply.cseq_method != SIP_METH_INVITE) || (reply.code >= 300))) { - uac_trans.erase(t_it); + uac_trans.erase(reply.cseq); } } diff --git a/core/AmBasicSipDialog.h b/core/AmBasicSipDialog.h index 29ef0b6..a6bf330 100644 --- a/core/AmBasicSipDialog.h +++ b/core/AmBasicSipDialog.h @@ -183,8 +183,7 @@ protected: * * @return true to continue processing, false otherwise */ - virtual bool onRxReplyStatus(const AmSipReply& reply, - TransMap::iterator t_uac_it); + virtual bool onRxReplyStatus(const AmSipReply& reply); /** * Terminate pending UAS transactions diff --git a/core/AmSipDialog.cpp b/core/AmSipDialog.cpp index d2a930d..d0f2ad6 100644 --- a/core/AmSipDialog.cpp +++ b/core/AmSipDialog.cpp @@ -332,8 +332,7 @@ void AmSipDialog::onRequestTxed(const AmSipRequest& req) } } -bool AmSipDialog::onRxReplyStatus(const AmSipReply& reply, - TransMap::iterator t_uac_it) +bool AmSipDialog::onRxReplyStatus(const AmSipReply& reply) { // rfc3261 12.1 // Dialog established only by 101-199 or 2xx diff --git a/core/AmSipDialog.h b/core/AmSipDialog.h index 650cb11..aea6834 100644 --- a/core/AmSipDialog.h +++ b/core/AmSipDialog.h @@ -68,7 +68,7 @@ protected: bool onRxReqSanity(const AmSipRequest& req); bool onRxReqStatus(const AmSipRequest& req); - bool onRxReplyStatus(const AmSipReply& reply, TransMap::iterator t_uac_it); + bool onRxReplyStatus(const AmSipReply& reply); public: _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
