From 6f30d20883b303f3bd536b2d8164963d61b9897a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Remko=20Tron=C3=A7on?= Date: Tue, 26 Apr 2011 20:26:28 +0200 Subject: Make stanza ack handling safer in case of a view without stanza acking support. diff --git a/Swift/Controllers/Chat/ChatController.cpp b/Swift/Controllers/Chat/ChatController.cpp index 22ef68d..911f3e2 100644 --- a/Swift/Controllers/Chat/ChatController.cpp +++ b/Swift/Controllers/Chat/ChatController.cpp @@ -117,7 +117,7 @@ void ChatController::preSendMessageRequest(boost::shared_ptr message) { void ChatController::postSendMessage(const std::string& body, boost::shared_ptr sentStanza) { std::string id = addMessage(body, QT_TRANSLATE_NOOP("", "me"), true, labelsEnabled_ ? chatWindow_->getSelectedSecurityLabel().getLabel() : boost::shared_ptr(), std::string(avatarManager_->getAvatarPath(selfJID_).string()), boost::posix_time::microsec_clock::universal_time()); - if (stanzaChannel_->getStreamManagementEnabled()) { + if (stanzaChannel_->getStreamManagementEnabled() && !id.empty()) { chatWindow_->setAckState(id, ChatWindow::Pending); unackedStanzas_[sentStanza] = id; } @@ -126,11 +126,11 @@ void ChatController::postSendMessage(const std::string& body, boost::shared_ptr< } void ChatController::handleStanzaAcked(boost::shared_ptr stanza) { - std::string id = unackedStanzas_[stanza]; - if (id != "") { - chatWindow_->setAckState(id, ChatWindow::Received); + std::map, std::string>::iterator unackedStanza = unackedStanzas_.find(stanza); + if (unackedStanza != unackedStanzas_.end()) { + chatWindow_->setAckState(unackedStanza->second, ChatWindow::Received); + unackedStanzas_.erase(unackedStanza); } - unackedStanzas_.erase(unackedStanzas_.find(stanza)); } void ChatController::setOnline(bool online) { -- cgit v0.10.2-6-g49f6