diff options
author | Remko Tronçon <git@el-tramo.be> | 2010-11-01 14:50:17 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2010-11-03 12:17:41 (GMT) |
commit | 210accbcb135a9551cb56e5197a3a5acf8d15f49 (patch) | |
tree | d330a827ff3f531ab01ab2bb3b8f047a477702c0 /Swiften/Disco/JIDDiscoInfoResponder.cpp | |
parent | 9d9fb66aefef85a1c5ad432391014d15011747d1 (diff) | |
download | swift-contrib-210accbcb135a9551cb56e5197a3a5acf8d15f49.zip swift-contrib-210accbcb135a9551cb56e5197a3a5acf8d15f49.tar.bz2 |
Added JIDDiscoInfoResponder + Added "to" parameter to responder callback.
Diffstat (limited to 'Swiften/Disco/JIDDiscoInfoResponder.cpp')
-rw-r--r-- | Swiften/Disco/JIDDiscoInfoResponder.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/Swiften/Disco/JIDDiscoInfoResponder.cpp b/Swiften/Disco/JIDDiscoInfoResponder.cpp new file mode 100644 index 0000000..311447f --- /dev/null +++ b/Swiften/Disco/JIDDiscoInfoResponder.cpp @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include "Swiften/Disco/JIDDiscoInfoResponder.h" +#include "Swiften/Queries/IQRouter.h" +#include "Swiften/Elements/DiscoInfo.h" + +namespace Swift { + +JIDDiscoInfoResponder::JIDDiscoInfoResponder(IQRouter* router) : GetResponder<DiscoInfo>(router) { +} + +void JIDDiscoInfoResponder::clearDiscoInfo(const JID& jid) { + info.erase(jid); +} + +void JIDDiscoInfoResponder::setDiscoInfo(const JID& jid, const DiscoInfo& discoInfo) { + JIDDiscoInfoMap::iterator i = info.insert(std::make_pair(jid, JIDDiscoInfo())).first; + i->second.discoInfo = discoInfo; +} + +void JIDDiscoInfoResponder::setDiscoInfo(const JID& jid, const String& node, const DiscoInfo& discoInfo) { + JIDDiscoInfoMap::iterator i = info.insert(std::make_pair(jid, JIDDiscoInfo())).first; + DiscoInfo newInfo(discoInfo); + newInfo.setNode(node); + i->second.nodeDiscoInfo[node] = newInfo; +} + +bool JIDDiscoInfoResponder::handleGetRequest(const JID& from, const JID& to, const String& id, boost::shared_ptr<DiscoInfo> discoInfo) { + JIDDiscoInfoMap::const_iterator i = info.find(to); + if (i != info.end()) { + if (discoInfo->getNode().isEmpty()) { + sendResponse(from, to, id, boost::shared_ptr<DiscoInfo>(new DiscoInfo(i->second.discoInfo))); + } + else { + std::map<String,DiscoInfo>::const_iterator j = i->second.nodeDiscoInfo.find(discoInfo->getNode()); + if (j != i->second.nodeDiscoInfo.end()) { + sendResponse(from, to, id, boost::shared_ptr<DiscoInfo>(new DiscoInfo(j->second))); + } + else { + sendError(from, to, id, ErrorPayload::ItemNotFound, ErrorPayload::Cancel); + } + } + } + else { + sendError(from, to, id, ErrorPayload::ItemNotFound, ErrorPayload::Cancel); + } + return true; +} + +} |