Module: sems
Branch: master
Commit: 679ade9eb7c48b57bc9234bf6a5a9b9316d50e51
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=679ade9eb7c48b57bc9234bf6a5a9b9316d50e51

Author: Stefan Sayer <[email protected]>
Committer: Stefan Sayer <[email protected]>
Date:   Fri Nov  4 17:38:46 2011 +0100

b/f: in bye() don't do send_200_ack while iterating over uac_trans

send_200_ack erases the transaction, which may lead to fault when
iterating is continued

Conflicts:

        core/AmSipDialog.cpp

---

 core/AmSipDialog.cpp |   33 ++++++++++++++++++++-------------
 1 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/core/AmSipDialog.cpp b/core/AmSipDialog.cpp
index 6e84494..411a5fc 100644
--- a/core/AmSipDialog.cpp
+++ b/core/AmSipDialog.cpp
@@ -1274,20 +1274,27 @@ int AmSipDialog::bye(const string& hdrs, int flags)
     switch(status){
 
     case Disconnecting:
-    case Connected:
-        for (TransMap::iterator it=uac_trans.begin();
-            it != uac_trans.end(); it++) {
-         if (it->second.method == "INVITE"){
-           // finish any UAC transaction before sending BYE
-           send_200_ack(it->second.cseq);
-         }
-       }
-       if (status != Disconnecting) {
-         status = Disconnected;
-         return sendRequest("BYE", "", "", hdrs, flags);
-       } else {
-         return 0;
+    case Connected: {
+      // collect INVITE UAC transactions
+      vector<unsigned int> ack_trans;
+      for (TransMap::iterator it=uac_trans.begin(); it != uac_trans.end(); 
it++) {
+       if (it->second.method == "INVITE"){
+         ack_trans.push_back(it->second.cseq);
        }
+      }
+      // finish any UAC transaction before sending BYE
+      for (vector<unsigned int>::iterator it=
+            ack_trans.begin(); it != ack_trans.end(); it++) {
+       send_200_ack(*it);
+      }
+
+      if (status != Disconnecting) {
+       status = Disconnected;
+       return sendRequest("BYE", "", "", hdrs, flags);
+      } else {
+       return 0;
+      }
+    }
 
     case Trying:
     case Proceeding:

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

Reply via email to