diff options
author | Mateusz Piekos <mateuszpiekos@gmail.com> | 2012-06-12 10:52:03 (GMT) |
---|---|---|
committer | Mateusz Piekos <mateuszpiekos@gmail.com> | 2012-06-12 10:52:03 (GMT) |
commit | edd726abb1d0f7532218efbb8067a75a313e9e98 (patch) | |
tree | 7eec4f7912a59bb9a383a61c2c96616d5b5847b6 /Swiften/Whiteboard/WhiteboardResponder.cpp | |
parent | 6e9fb4e4a3aeee8c40617a4dda6e5e0892ceebad (diff) | |
download | swift-contrib-edd726abb1d0f7532218efbb8067a75a313e9e98.zip swift-contrib-edd726abb1d0f7532218efbb8067a75a313e9e98.tar.bz2 |
Improved whiteboard session handling
Diffstat (limited to 'Swiften/Whiteboard/WhiteboardResponder.cpp')
-rw-r--r-- | Swiften/Whiteboard/WhiteboardResponder.cpp | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/Swiften/Whiteboard/WhiteboardResponder.cpp b/Swiften/Whiteboard/WhiteboardResponder.cpp index 8a1b290..c947aec 100644 --- a/Swiften/Whiteboard/WhiteboardResponder.cpp +++ b/Swiften/Whiteboard/WhiteboardResponder.cpp @@ -7,6 +7,7 @@ #include <Swiften/Whiteboard/WhiteboardResponder.h> #include <Swiften/Whiteboard/WhiteboardSessionManager.h> +#include <Swiften/Whiteboard/IncomingWhiteboardSession.h> #include <Swiften/Whiteboard/WhiteboardSession.h> #include <Swiften/Queries/IQRouter.h> @@ -16,27 +17,20 @@ namespace Swift { bool WhiteboardResponder::handleSetRequest(const JID& from, const JID& to, const std::string& id, boost::shared_ptr<WhiteboardPayload> payload) { if (payload->getType() == WhiteboardPayload::SessionRequest) { - sessionManager_->onRequestReceived(from); - sessionRequests_[from] = id; + if (sessionManager_->getSession(from.toBare())) { + sendError(from, id, ErrorPayload::Conflict, ErrorPayload::Cancel); + } else { + sendResponse(from, id, boost::shared_ptr<WhiteboardPayload>()); + IncomingWhiteboardSession::ref session = boost::make_shared<IncomingWhiteboardSession>(from, router_); + sessionManager_->handleIncomingSession(session); + } } else { sendResponse(from, id, boost::shared_ptr<WhiteboardPayload>()); - WhiteboardSession* session = sessionManager_->getSession(from.toBare()); + WhiteboardSession::ref session = sessionManager_->getSession(from.toBare()); if (session != NULL) { session->handleIncomingAction(payload); } } return true; } - - void WhiteboardResponder::sendRequestResponse(const JID& contact, bool accepted) { - if (sessionRequests_.find(contact) == sessionRequests_.end()) { - return; - } - if (accepted ) { - sendResponse(contact, sessionRequests_[contact], boost::shared_ptr<WhiteboardPayload>()); - } else { - sendError(contact, sessionRequests_[contact], ErrorPayload::Conflict, ErrorPayload::Cancel); - } - sessionRequests_.erase(contact); - } } |