| 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);
|
|
|