diff options
Diffstat (limited to 'Swiften/Whiteboard/WhiteboardResponder.cpp')
-rw-r--r-- | Swiften/Whiteboard/WhiteboardResponder.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/Swiften/Whiteboard/WhiteboardResponder.cpp b/Swiften/Whiteboard/WhiteboardResponder.cpp index 2e4905a..8a1b290 100644 --- a/Swiften/Whiteboard/WhiteboardResponder.cpp +++ b/Swiften/Whiteboard/WhiteboardResponder.cpp @@ -15,11 +15,28 @@ namespace Swift { } bool WhiteboardResponder::handleSetRequest(const JID& from, const JID& to, const std::string& id, boost::shared_ptr<WhiteboardPayload> payload) { - sendResponse(from, id, boost::shared_ptr<WhiteboardPayload>()); - WhiteboardSession* session = sessionManager_->getSession(from.toBare()); - if (session != NULL) { - session->handleIncomingAction(payload); + if (payload->getType() == WhiteboardPayload::SessionRequest) { + sessionManager_->onRequestReceived(from); + sessionRequests_[from] = id; + } else { + sendResponse(from, id, boost::shared_ptr<WhiteboardPayload>()); + WhiteboardSession* 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); + } } |