/* * 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 namespace Swift { class Payload; class SWIFTEN_API Stanza : public ToplevelElement { public: typedef std::shared_ptr ref; protected: Stanza(); public: virtual ~Stanza(); SWIFTEN_DEFAULT_COPY_CONSTRUCTOR(Stanza) template std::shared_ptr getPayload() const { for (size_t i = 0; i < payloads_.size(); ++i) { std::shared_ptr result(std::dynamic_pointer_cast(payloads_[i])); if (result) { return result; } } return std::shared_ptr(); } template std::vector< std::shared_ptr > getPayloads() const { std::vector< std::shared_ptr > results; for (size_t i = 0; i < payloads_.size(); ++i) { std::shared_ptr result(std::dynamic_pointer_cast(payloads_[i])); if (result) { results.push_back(result); } } return results; } const std::vector< std::shared_ptr >& getPayloads() const { return payloads_; } void addPayload(std::shared_ptr payload) { payloads_.push_back(payload); } template void addPayloads(InputIterator begin, InputIterator end) { payloads_.insert(payloads_.end(), begin, end); } void updatePayload(std::shared_ptr payload); void removePayloadOfSameType(std::shared_ptr); std::shared_ptr getPayloadOfSameType(std::shared_ptr) const; const JID& getFrom() const { return from_; } void setFrom(const JID& from) { from_ = from; } const JID& getTo() const { return to_; } void setTo(const JID& to) { to_ = to; } const std::string& getID() const { return id_; } void setID(const std::string& id) { id_ = id; } boost::optional getTimestamp() const; // Falls back to any timestamp if no specific timestamp for the given JID is found. boost::optional getTimestampFrom(const JID& jid) const; private: std::string id_; JID from_; JID to_; std::vector< std::shared_ptr > payloads_; }; }