Index: remoting/protocol/jingle_session.cc |
diff --git a/remoting/protocol/jingle_session.cc b/remoting/protocol/jingle_session.cc |
index 40f06579db13724e9c3b0da708ee6c4b63c4c98b..0d6dc4f21ecb77fa4dfa262f461652b634a2bf75 100644 |
--- a/remoting/protocol/jingle_session.cc |
+++ b/remoting/protocol/jingle_session.cc |
@@ -45,6 +45,8 @@ JingleSession::JingleSession( |
jid_ = cricket_session_->remote_name(); |
cricket_session_->SignalState.connect(this, &JingleSession::OnSessionState); |
cricket_session_->SignalError.connect(this, &JingleSession::OnSessionError); |
+ cricket_session_->SignalReceivedTerminateReason.connect( |
+ this, &JingleSession::OnTerminateReason); |
} |
JingleSession::~JingleSession() { |
@@ -244,6 +246,11 @@ void JingleSession::OnSessionError( |
} |
} |
+void JingleSession::OnTerminateReason(cricket::Session* session, |
+ const std::string& reason) { |
+ terminate_reason_ = reason; |
+} |
+ |
void JingleSession::OnInitiate() { |
DCHECK(CalledOnValidThread()); |
jid_ = cricket_session_->remote_name(); |
@@ -332,7 +339,16 @@ void JingleSession::OnAccept() { |
void JingleSession::OnTerminate() { |
DCHECK(CalledOnValidThread()); |
- CloseInternal(net::ERR_CONNECTION_ABORTED, OK); |
+ |
+ if (terminate_reason_ == "success") { |
+ CloseInternal(net::ERR_CONNECTION_ABORTED, OK); |
+ } else if (terminate_reason_ == "decline") { |
+ CloseInternal(net::ERR_CONNECTION_ABORTED, AUTHENTICATION_FAILED); |
+ } else if (terminate_reason_ == "incompatible-protocol") { |
+ CloseInternal(net::ERR_CONNECTION_ABORTED, INCOMPATIBLE_PROTOCOL); |
+ } else { |
+ CloseInternal(net::ERR_CONNECTION_ABORTED, UNKNOWN_ERROR); |
+ } |
} |
void JingleSession::AcceptConnection() { |