/* * Copyright (c) 2010-2018 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include #include namespace Swift { /** * disco#info from XEP-0030 */ class SWIFTEN_API DiscoInfo : public Payload { public: typedef std::shared_ptr ref; static const std::string ChatStatesFeature; static const std::string ClientStatesFeature; static const std::string SecurityLabelsFeature; static const std::string SecurityLabelsCatalogFeature; static const std::string JabberSearchFeature; static const std::string CommandsFeature; static const std::string MessageCorrectionFeature; static const std::string JingleFeature; static const std::string JingleFTFeature; static const std::string JingleTransportsIBBFeature; static const std::string JingleTransportsS5BFeature; static const std::string Bytestream; static const std::string MessageDeliveryReceiptsFeature; static const std::string WhiteboardFeature; static const std::string BlockingCommandFeature; static const std::string MessageCarbonsFeature; static const std::string ReferencesFeature; class Identity { public: Identity(const std::string& name, const std::string& category = "client", const std::string& type = "pc", const std::string& lang = "") : name_(name), category_(category), type_(type), lang_(lang) { } const std::string& getCategory() const { return category_; } const std::string& getType() const { return type_; } const std::string& getLanguage() const { return lang_; } const std::string& getName() const { return name_; } // Sorted according to XEP-115 rules bool operator<(const Identity& other) const; private: std::string name_; std::string category_; std::string type_; std::string lang_; }; DiscoInfo() { } const std::string& getNode() const { return node_; } void setNode(const std::string& node) { node_ = node; } const std::vector& getIdentities() const { return identities_; } void addIdentity(const Identity& identity) { identities_.push_back(identity); } const std::vector& getFeatures() const { return features_; } void addFeature(const std::string& feature) { features_.push_back(feature); } bool hasFeature(const std::string& feature) const; void addExtension(Form::ref form) { extensions_.push_back(form); } const std::vector& getExtensions() const { return extensions_; } private: std::string node_; std::vector identities_; std::vector features_; std::vector extensions_; }; }