diff options
author | Remko Tronçon <git@el-tramo.be> | 2011-01-29 17:48:13 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2011-01-29 18:45:34 (GMT) |
commit | 869c52b244c2d03313e9eda83fac05bf0fc3a619 (patch) | |
tree | 63f0518e15d0c23ece6eb55733c2ef44f710bf01 /Swiften/Jingle/JingleResponder.cpp | |
parent | 11a7f5c48ea9c90e9adaaa06a96e0a9116234bff (diff) | |
download | swift-869c52b244c2d03313e9eda83fac05bf0fc3a619.zip swift-869c52b244c2d03313e9eda83fac05bf0fc3a619.tar.bz2 |
Added some experimental Jingle classes.
Diffstat (limited to 'Swiften/Jingle/JingleResponder.cpp')
-rw-r--r-- | Swiften/Jingle/JingleResponder.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/Swiften/Jingle/JingleResponder.cpp b/Swiften/Jingle/JingleResponder.cpp new file mode 100644 index 0000000..3dfc327 --- /dev/null +++ b/Swiften/Jingle/JingleResponder.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2011 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/Jingle/JingleResponder.h> + +#include <boost/smart_ptr/make_shared.hpp> + +#include <Swiften/Jingle/JingleSessionManager.h> +#include <Swiften/Jingle/IncomingJingleSession.h> + +namespace Swift { + +JingleResponder::JingleResponder(JingleSessionManager* sessionManager, IQRouter* router) : SetResponder<JinglePayload>(router), sessionManager(sessionManager) { +} + +bool JingleResponder::handleSetRequest(const JID& from, const JID&, const String& id, boost::shared_ptr<JinglePayload> payload) { + if (payload->getAction() == JinglePayload::SessionInitiate) { + if (sessionManager->getSession(from, payload->getSessionID())) { + // TODO: Add tie-break error + sendError(from, id, ErrorPayload::Conflict, ErrorPayload::Cancel); + } + else { + sendResponse(from, id, boost::shared_ptr<JinglePayload>()); + IncomingJingleSession::ref session = boost::make_shared<IncomingJingleSession>(id, payload->getContents()); + sessionManager->handleIncomingSession(from, session); + } + } + else { + JingleSession::ref session = sessionManager->getSession(from, payload->getSessionID()); + if (session) { + session->handleIncomingAction(payload); + sendResponse(from, id, boost::shared_ptr<JinglePayload>()); + } + else { + // TODO: Add jingle-specific error + sendError(from, id, ErrorPayload::ItemNotFound, ErrorPayload::Cancel); + } + } + return true; +} + +} |