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

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 44cc5518046d13495e343dbb27e4616b05afaa04..f160b622fda50d5e37150af85f14656489cde177 100644
--- a/remoting/protocol/jingle_messages.cc
+++ b/remoting/protocol/jingle_messages.cc
@@ -29,7 +29,6 @@ const char kXmlNamespace[] = "http://www.w3.org/XML/1998/namespace";
const char kSessionInitiateAction[] = "session-initiate";
const char kSessionAcceptAction[] = "session-accept";
const char kSessionTerminateAction[] = "session-terminate";
-const char kSessionRejectAction[] = "session-return";
const char kTransportInfoAction[] = "transport-info";
const int kPortMin = 1000;
@@ -105,7 +104,7 @@ bool JingleMessage::IsJingleMessage(const buzz::XmlElement* stanza) {
JingleMessage::JingleMessage()
: action(UNKNOWN_ACTION),
- termination_reason(kJingleNamespace, "success") {
+ reason(UNKNOWN_REASON) {
}
JingleMessage::JingleMessage(
@@ -142,8 +141,6 @@ bool JingleMessage::ParseXml(const buzz::XmlElement* stanza,
action = SESSION_ACCEPT;
} else if (action_str == kSessionTerminateAction) {
action = SESSION_TERMINATE;
- } else if (action_str == kSessionRejectAction) {
- action = SESSION_REJECT;
} else if (action_str == kTransportInfoAction) {
action = TRANSPORT_INFO;
} else {
@@ -157,14 +154,25 @@ bool JingleMessage::ParseXml(const buzz::XmlElement* stanza,
return false;
}
- if (action == SESSION_TERMINATE || action == SESSION_REJECT) {
- 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) {
@@ -241,9 +249,6 @@ buzz::XmlElement* JingleMessage::ToXml() {
case SESSION_TERMINATE:
action_attr = kSessionTerminateAction;
break;
- case SESSION_REJECT:
- action_attr = kSessionRejectAction;
- break;
case TRANSPORT_INFO:
action_attr = kTransportInfoAction;
break;
@@ -256,12 +261,29 @@ buzz::XmlElement* JingleMessage::ToXml() {
if (action == SESSION_INITIATE)
jingle_tag->AddAttr(QName(kEmptyNamespace, "initiator"), from);
- if (action == SESSION_TERMINATE || action == SESSION_REJECT) {
+ 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";
+ }
simonmorris 2011/09/26 23:33:44 Factor out the map from Reason to string, so it do
Sergey Ulanov 2011/09/27 01:09:46 Done. Also refactored ActionType->string mapping.
+ 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