summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Whiteboard/WhiteboardResponder.cpp')
-rw-r--r--Swiften/Whiteboard/WhiteboardResponder.cpp24
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);
- }
}