Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2402)

Unified Diff: remoting/protocol/jingle_messages.cc

Issue 2567953002: [Chromoting] Plugin message in JingleMessage (Closed)
Patch Set: Add OWNERS file to work around IPC security check Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/protocol/jingle_messages.h ('k') | remoting/protocol/jingle_messages_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/protocol/jingle_messages.cc
diff --git a/remoting/protocol/jingle_messages.cc b/remoting/protocol/jingle_messages.cc
index 8c8c1640bfd0cf223720c7b8c84a6c8c4a81331b..c2402d60c70a59899554a6fd68c16bfd249d9989 100644
--- a/remoting/protocol/jingle_messages.cc
+++ b/remoting/protocol/jingle_messages.cc
@@ -342,15 +342,28 @@ bool JingleMessage::ParseXml(const buzz::XmlElement* stanza,
return false;
}
+ const XmlElement* attachments_tag =
+ jingle_tag->FirstNamed(QName(kChromotingXmlNamespace, "attachments"));
+ if (attachments_tag) {
+ attachments.reset(new XmlElement(*attachments_tag));
+ } else {
+ attachments.reset();
+ }
+
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 == attachments_tag) {
+ child = child->NextElement();
+ }
if (child) {
// session-info is allowed to be empty.
info.reset(new XmlElement(*child));
} else {
- info.reset(nullptr);
+ info.reset();
}
return true;
}
@@ -374,8 +387,9 @@ bool JingleMessage::ParseXml(const buzz::XmlElement* stanza,
}
}
- if (action == SESSION_TERMINATE)
+ if (action == SESSION_TERMINATE) {
return true;
+ }
const XmlElement* content_tag =
jingle_tag->FirstNamed(QName(kJingleNamespace, "content"));
@@ -396,7 +410,7 @@ bool JingleMessage::ParseXml(const buzz::XmlElement* stanza,
transport_info.reset(new buzz::XmlElement(*webrtc_transport_tag));
}
- description.reset(nullptr);
+ description.reset();
if (action == SESSION_INITIATE || action == SESSION_ACCEPT) {
const XmlElement* description_tag = content_tag->FirstNamed(
QName(kChromotingXmlNamespace, "description"));
@@ -439,18 +453,25 @@ std::unique_ptr<buzz::XmlElement> JingleMessage::ToXml() const {
SetAddress(root.get(), jingle_tag, from, true);
const char* action_attr = ValueToName(kActionTypes, action);
- if (!action_attr)
+ if (!action_attr) {
LOG(FATAL) << "Invalid action value " << action;
+ }
jingle_tag->AddAttr(QName(kEmptyNamespace, "action"), action_attr);
+ if (attachments) {
+ jingle_tag->AddElement(new XmlElement(*attachments));
+ }
+
if (action == SESSION_INFO) {
- if (info.get())
+ if (info.get()) {
jingle_tag->AddElement(new XmlElement(*info.get()));
+ }
return root;
}
- if (action == SESSION_INITIATE)
+ if (action == SESSION_INITIATE) {
jingle_tag->AddAttr(QName(kEmptyNamespace, "initiator"), initiator);
+ }
if (reason != UNKNOWN_REASON) {
XmlElement* reason_tag = new XmlElement(QName(kJingleNamespace, "reason"));
@@ -475,8 +496,9 @@ std::unique_ptr<buzz::XmlElement> JingleMessage::ToXml() const {
ContentDescription::kChromotingContentName);
content_tag->AddAttr(QName(kEmptyNamespace, "creator"), "initiator");
- if (description)
+ if (description) {
content_tag->AddElement(description->ToXml());
+ }
if (transport_info) {
content_tag->AddElement(new XmlElement(*transport_info));
@@ -573,8 +595,9 @@ std::unique_ptr<buzz::XmlElement> JingleMessageReply::ToXml(
NOTREACHED();
}
- if (!text.empty())
+ if (!text.empty()) {
error_text = text;
+ }
error->SetAttr(QName(kEmptyNamespace, "type"), type);
@@ -604,8 +627,9 @@ IceTransportInfo::~IceTransportInfo() {}
bool IceTransportInfo::ParseXml(
const buzz::XmlElement* element) {
- if (element->Name() != QName(kIceTransportNamespace, "transport"))
+ if (element->Name() != QName(kIceTransportNamespace, "transport")) {
return false;
+ }
ice_credentials.clear();
candidates.clear();
@@ -615,8 +639,9 @@ bool IceTransportInfo::ParseXml(
credentials_tag;
credentials_tag = credentials_tag->NextNamed(qn_credentials)) {
IceTransportInfo::IceCredentials credentials;
- if (!ParseIceCredentials(credentials_tag, &credentials))
+ if (!ParseIceCredentials(credentials_tag, &credentials)) {
return false;
+ }
ice_credentials.push_back(credentials);
}
@@ -624,8 +649,9 @@ bool IceTransportInfo::ParseXml(
for (const XmlElement* candidate_tag = element->FirstNamed(qn_candidate);
candidate_tag; candidate_tag = candidate_tag->NextNamed(qn_candidate)) {
IceTransportInfo::NamedCandidate candidate;
- if (!ParseIceCandidate(candidate_tag, &candidate))
+ if (!ParseIceCandidate(candidate_tag, &candidate)) {
return false;
+ }
candidates.push_back(candidate);
}
« no previous file with comments | « remoting/protocol/jingle_messages.h ('k') | remoting/protocol/jingle_messages_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698