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

Unified Diff: remoting/protocol/jingle_messages.cc

Issue 8046018: Parse termination reason and propagate the error to the Session interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 9 years, 3 months 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
Index: remoting/protocol/jingle_messages.cc
diff --git a/remoting/protocol/jingle_messages.cc b/remoting/protocol/jingle_messages.cc
index a7c71c3f3b1e7e8a614bdba3e88477229b654550..f160b622fda50d5e37150af85f14656489cde177 100644
--- a/remoting/protocol/jingle_messages.cc
+++ b/remoting/protocol/jingle_messages.cc
@@ -104,7 +104,7 @@ bool JingleMessage::IsJingleMessage(const buzz::XmlElement* stanza) {
JingleMessage::JingleMessage()
: action(UNKNOWN_ACTION),
- termination_reason(kJingleNamespace, "success") {
+ reason(UNKNOWN_REASON) {
}
JingleMessage::JingleMessage(
@@ -154,14 +154,25 @@ bool JingleMessage::ParseXml(const buzz::XmlElement* stanza,
return false;
}
- if (action == SESSION_TERMINATE) {
- const XmlElement* reason_tag =
- jingle_tag->FirstNamed(QName(kJingleNamespace, "reason"));
- if (reason_tag && reason_tag->FirstElement())
- termination_reason = reason_tag->FirstElement()->Name();
- return true;
+ const XmlElement* reason_tag =
+ jingle_tag->FirstNamed(QName(kJingleNamespace, "reason"));
+ if (reason_tag && reason_tag->FirstElement()) {
+ const QName& reason_qname(reason_tag->FirstElement()->Name());
+ if (reason_qname == QName(kJingleNamespace, "success")) {
+ reason = SUCCESS;
+ } else if (reason_qname == QName(kJingleNamespace, "decline")) {
+ reason = DECLINED;
+ } else if (reason_qname ==
+ QName(kJingleNamespace, "incompatible-parameters")) {
+ reason = INCOMPATIBLE_PARAMETERS;
+ } else {
+ reason = UNKNOWN_REASON;
+ }
}
+ if (action == SESSION_TERMINATE)
+ return true;
+
const XmlElement* content_tag =
jingle_tag->FirstNamed(QName(kJingleNamespace, "content"));
if (!content_tag) {
@@ -250,12 +261,29 @@ buzz::XmlElement* JingleMessage::ToXml() {
if (action == SESSION_INITIATE)
jingle_tag->AddAttr(QName(kEmptyNamespace, "initiator"), from);
- if (action == SESSION_TERMINATE) {
+ if (reason != UNKNOWN_REASON) {
XmlElement* reason_tag = new XmlElement(QName(kJingleNamespace, "reason"));
jingle_tag->AddElement(reason_tag);
+ std::string reason_string;
+ switch (reason) {
+ case SUCCESS:
+ reason_string = "success";
+ break;
+ case DECLINED:
+ reason_string = "decline";
+ break;
+ case INCOMPATIBLE_PARAMETERS:
+ reason_string = "incompatible-parameters";
+ break;
+ default:
+ DLOG(FATAL) << "Invalid reason: " << reason;
+ reason_string = "success";
+ }
+ reason_tag->AddElement(new XmlElement(
+ QName(kJingleNamespace, reason_string)));
+ }
- reason_tag->AddElement(new XmlElement(termination_reason));
- } else {
+ if (action != SESSION_TERMINATE) {
XmlElement* content_tag =
new XmlElement(QName(kJingleNamespace, "content"));
jingle_tag->AddElement(content_tag);

Powered by Google App Engine
This is Rietveld 408576698