/* * Copyright (c) 2011-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 SWIFTEN_API JinglePayload : public Payload { public: typedef std::shared_ptr ref; struct Reason : public Payload { enum Type { UnknownType, AlternativeSession, Busy, Cancel, ConnectivityError, Decline, Expired, FailedApplication, FailedTransport, GeneralError, Gone, IncompatibleParameters, MediaError, SecurityError, Success, Timeout, UnsupportedApplications, UnsupportedTransports }; Reason() : type(UnknownType), text("") {} Reason(Type type, const std::string& text = "") : type(type), text(text) {} Type type; std::string text; }; enum Action { UnknownAction, ContentAccept, ContentAdd, ContentModify, ContentReject, ContentRemove, DescriptionInfo, SecurityInfo, SessionAccept, SessionInfo, SessionInitiate, SessionTerminate, TransportAccept, TransportInfo, TransportReject, TransportReplace }; JinglePayload() : action(SessionTerminate), sessionID("") { } JinglePayload(Action action, const std::string& sessionID) : action(action), sessionID(sessionID) { } void setAction(Action action) { this->action = action; } Action getAction() const { return action; } void setInitiator(const JID& initiator) { this->initiator = initiator; } const JID& getInitiator() const { return initiator; } void setResponder(const JID& responder) { this->responder = responder; } const JID& getResponder() const { return responder; } void setSessionID(const std::string& id) { sessionID = id; } const std::string& getSessionID() const { return sessionID; } void addContent(JingleContentPayload::ref content) { this->payloads.push_back(content); } void addPayload(std::shared_ptr payload) { this->payloads.push_back(payload); } const std::vector getContents() const { return getPayloads(); } const std::vector > getPayloads() const { return payloads; } template const std::vector > getPayloads() const { std::vector > matched_payloads; for (const auto& payload : payloads) { std::shared_ptr result = std::dynamic_pointer_cast(payload); if (result) { matched_payloads.push_back(result); } } return matched_payloads; } template const std::shared_ptr getPayload() const { std::shared_ptr result; for (const auto& payload : payloads) { result = std::dynamic_pointer_cast(payload); if (result) { return result; } } return result; } void setReason(const Reason& reason) { this->reason = reason; } const boost::optional& getReason() const { return reason; } private: Action action; JID initiator; JID responder; std::string sessionID; std::vector > payloads; boost::optional reason; }; }