| Index: remoting/protocol/jingle_messages.cc
|
| diff --git a/remoting/protocol/jingle_messages.cc b/remoting/protocol/jingle_messages.cc
|
| index 8c8c1640bfd0cf223720c7b8c84a6c8c4a81331b..85b13b4478d6ad47791cf75b648c39e7833fe41b 100644
|
| --- a/remoting/protocol/jingle_messages.cc
|
| +++ b/remoting/protocol/jingle_messages.cc
|
| @@ -342,10 +342,23 @@ bool JingleMessage::ParseXml(const buzz::XmlElement* stanza,
|
| return false;
|
| }
|
|
|
| + const XmlElement* plugin_tag =
|
| + jingle_tag->FirstNamed(QName(kChromotingXmlNamespace, "plugin"));
|
| + if (plugin_tag) {
|
| + plugin_message.reset(new XmlElement(*plugin_tag));
|
| + } else {
|
| + plugin_message.reset(nullptr);
|
| + }
|
| +
|
| if (action == SESSION_INFO) {
|
| // session-info messages may contain arbitrary information not
|
| // defined by the Jingle protocol. We don't need to parse it.
|
| const XmlElement* child = jingle_tag->FirstElement();
|
| + // Plugin messages are action independent, which should not be considered as
|
| + // session-info.
|
| + if (child == plugin_tag) {
|
| + child = child->NextElement();
|
| + }
|
| if (child) {
|
| // session-info is allowed to be empty.
|
| info.reset(new XmlElement(*child));
|
| @@ -443,6 +456,10 @@ std::unique_ptr<buzz::XmlElement> JingleMessage::ToXml() const {
|
| LOG(FATAL) << "Invalid action value " << action;
|
| jingle_tag->AddAttr(QName(kEmptyNamespace, "action"), action_attr);
|
|
|
| + if (plugin_message) {
|
| + jingle_tag->AddElement(new XmlElement(*plugin_message));
|
| + }
|
| +
|
| if (action == SESSION_INFO) {
|
| if (info.get())
|
| jingle_tag->AddElement(new XmlElement(*info.get()));
|
|
|