/* * Copyright (c) 2010 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #pragma once #include #include #include #include #include #include #include #include #include namespace Swift { class StanzaChannel; class IQRouter; class JID; class CapsStorage; class SWIFTEN_API CapsManager : public CapsProvider, public boost::bsignals::trackable { public: CapsManager(CapsStorage*, StanzaChannel*, IQRouter*); DiscoInfo::ref getCaps(const std::string&) const; // Mainly for testing purposes void setWarnOnInvalidHash(bool b) { warnOnInvalidHash = b; } private: void handlePresenceReceived(boost::shared_ptr); void handleStanzaChannelAvailableChanged(bool); void handleDiscoInfoReceived(const JID&, const std::string& hash, DiscoInfo::ref, ErrorPayload::ref); void requestDiscoInfo(const JID& jid, const std::string& node, const std::string& hash); private: IQRouter* iqRouter; CapsStorage* capsStorage; bool warnOnInvalidHash; std::set requestedDiscoInfos; std::set< std::pair > failingCaps; std::map > > fallbacks; }; }