Home | History | Annotate | Download | only in protocol
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef REMOTING_PROTOCOL_JINGLE_MESSAGES_H_
      6 #define REMOTING_PROTOCOL_JINGLE_MESSAGES_H_
      7 
      8 #include <list>
      9 #include <string>
     10 
     11 #include "base/memory/scoped_ptr.h"
     12 #include "third_party/libjingle/source/talk/p2p/base/candidate.h"
     13 #include "third_party/webrtc/libjingle/xmllite/xmlelement.h"
     14 
     15 
     16 namespace remoting {
     17 namespace protocol {
     18 
     19 class ContentDescription;
     20 
     21 extern const char kJabberNamespace[];
     22 extern const char kJingleNamespace[];
     23 extern const char kP2PTransportNamespace[];
     24 
     25 struct JingleMessage {
     26   enum ActionType {
     27     UNKNOWN_ACTION,
     28     SESSION_INITIATE,
     29     SESSION_ACCEPT,
     30     SESSION_TERMINATE,
     31     SESSION_INFO,
     32     TRANSPORT_INFO,
     33   };
     34 
     35   enum Reason {
     36     UNKNOWN_REASON,
     37     SUCCESS,
     38     DECLINE,
     39     CANCEL,
     40     GENERAL_ERROR,
     41     INCOMPATIBLE_PARAMETERS,
     42   };
     43 
     44   struct NamedCandidate {
     45     NamedCandidate();
     46     NamedCandidate(const std::string& name,
     47                    const cricket::Candidate& candidate);
     48 
     49     std::string name;
     50     cricket::Candidate candidate;
     51   };
     52 
     53   JingleMessage();
     54   JingleMessage(const std::string& to_value,
     55                 ActionType action_value,
     56                 const std::string& sid_value);
     57   ~JingleMessage();
     58 
     59   // Caller keeps ownership of |stanza|.
     60   static bool IsJingleMessage(const buzz::XmlElement* stanza);
     61   static std::string GetActionName(ActionType action);
     62 
     63   // Caller keeps ownership of |stanza|. |error| is set to debug error
     64   // message when parsing fails.
     65   bool ParseXml(const buzz::XmlElement* stanza, std::string* error);
     66 
     67   scoped_ptr<buzz::XmlElement> ToXml() const;
     68 
     69   std::string from;
     70   std::string to;
     71   ActionType action;
     72   std::string sid;
     73 
     74   std::string initiator;
     75 
     76   scoped_ptr<ContentDescription> description;
     77   std::list<NamedCandidate> candidates;
     78 
     79   // Content of session-info messages.
     80   scoped_ptr<buzz::XmlElement> info;
     81 
     82   // Value from the <reason> tag if it is present in the
     83   // message. Useful mainly for session-terminate messages, but Jingle
     84   // spec allows it in any message.
     85   Reason reason;
     86 };
     87 
     88 struct JingleMessageReply {
     89   enum ReplyType {
     90     REPLY_RESULT,
     91     REPLY_ERROR,
     92   };
     93   enum ErrorType {
     94     NONE,
     95     BAD_REQUEST,
     96     NOT_IMPLEMENTED,
     97     INVALID_SID,
     98     UNEXPECTED_REQUEST,
     99     UNSUPPORTED_INFO,
    100   };
    101 
    102   JingleMessageReply();
    103   JingleMessageReply(ErrorType error);
    104   JingleMessageReply(ErrorType error, const std::string& text);
    105   ~JingleMessageReply();
    106 
    107   // Formats reply stanza for the specified |request_stanza|. Id and
    108   // recepient as well as other information needed to generate a valid
    109   // reply are taken from |request_stanza|.
    110   scoped_ptr<buzz::XmlElement> ToXml(
    111       const buzz::XmlElement* request_stanza) const;
    112 
    113   ReplyType type;
    114   ErrorType error_type;
    115   std::string text;
    116 };
    117 
    118 }  // protocol
    119 }  // remoting
    120 
    121 #endif  // REMOTING_PROTOCOL_JINGLE_MESSAGES_H_
    122