/* * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file 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 CryptoProvider; class SWIFTEN_API CapsManager : public CapsProvider, public boost::signals2::trackable { public: CapsManager(CapsStorage*, StanzaChannel*, IQRouter*, CryptoProvider*); DiscoInfo::ref getCaps(const std::string&) const; // Mainly for testing purposes void setWarnOnInvalidHash(bool b) { warnOnInvalidHash = b; } private: void handlePresenceReceived(std::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; CryptoProvider* crypto; CapsStorage* capsStorage; bool warnOnInvalidHash; std::set requestedDiscoInfos; std::set< std::pair > failingCaps; std::map > > fallbacks; }; }