// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef REMOTING_PROTOCOL_JINGLE_MESSAGES_H_ #define REMOTING_PROTOCOL_JINGLE_MESSAGES_H_ #include #include #include "base/memory/scoped_ptr.h" #include "third_party/webrtc/libjingle/xmllite/xmlelement.h" #include "third_party/webrtc/p2p/base/candidate.h" namespace remoting { namespace protocol { class ContentDescription; struct JingleMessage { enum ActionType { UNKNOWN_ACTION, SESSION_INITIATE, SESSION_ACCEPT, SESSION_TERMINATE, SESSION_INFO, TRANSPORT_INFO, }; enum Reason { UNKNOWN_REASON, SUCCESS, DECLINE, CANCEL, EXPIRED, GENERAL_ERROR, FAILED_APPLICATION, INCOMPATIBLE_PARAMETERS, }; JingleMessage(); JingleMessage(const std::string& to_value, ActionType action_value, const std::string& sid_value); ~JingleMessage(); // Caller keeps ownership of |stanza|. static bool IsJingleMessage(const buzz::XmlElement* stanza); static std::string GetActionName(ActionType action); // Caller keeps ownership of |stanza|. |error| is set to debug error // message when parsing fails. bool ParseXml(const buzz::XmlElement* stanza, std::string* error); scoped_ptr ToXml() const; std::string from; std::string to; ActionType action = UNKNOWN_ACTION; std::string sid; std::string initiator; scoped_ptr description; scoped_ptr transport_info; // Content of session-info messages. scoped_ptr info; // Value from the tag if it is present in the // message. Useful mainly for session-terminate messages, but Jingle // spec allows it in any message. Reason reason = UNKNOWN_REASON; }; struct JingleMessageReply { enum ReplyType { REPLY_RESULT, REPLY_ERROR, }; enum ErrorType { NONE, BAD_REQUEST, NOT_IMPLEMENTED, INVALID_SID, UNEXPECTED_REQUEST, UNSUPPORTED_INFO, }; JingleMessageReply(); JingleMessageReply(ErrorType error); JingleMessageReply(ErrorType error, const std::string& text); ~JingleMessageReply(); // Formats reply stanza for the specified |request_stanza|. Id and // recepient as well as other information needed to generate a valid // reply are taken from |request_stanza|. scoped_ptr ToXml( const buzz::XmlElement* request_stanza) const; ReplyType type; ErrorType error_type; std::string text; }; struct IceTransportInfo { IceTransportInfo(); ~IceTransportInfo(); struct NamedCandidate { NamedCandidate() = default; NamedCandidate(const std::string& name, const cricket::Candidate& candidate); std::string name; cricket::Candidate candidate; }; struct IceCredentials { IceCredentials() = default; IceCredentials(std::string channel, std::string ufrag, std::string password); std::string channel; std::string ufrag; std::string password; }; // Caller keeps ownership of |stanza|. |error| is set to debug error // message when parsing fails. bool ParseXml(const buzz::XmlElement* stanza); scoped_ptr ToXml() const; std::list ice_credentials; std::list candidates; }; } // protocol } // remoting #endif // REMOTING_PROTOCOL_JINGLE_MESSAGES_H_