| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "remoting/protocol/pepper_session.h" | 5 #include "remoting/protocol/pepper_session.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/rand_util.h" | 8 #include "base/rand_util.h" |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "base/string_number_conversions.h" | 10 #include "base/string_number_conversions.h" |
| 11 #include "remoting/base/constants.h" | 11 #include "remoting/base/constants.h" |
| 12 #include "remoting/jingle_glue/iq_request.h" | 12 #include "remoting/jingle_glue/iq_sender.h" |
| 13 #include "remoting/protocol/content_description.h" | 13 #include "remoting/protocol/content_description.h" |
| 14 #include "remoting/protocol/jingle_messages.h" | 14 #include "remoting/protocol/jingle_messages.h" |
| 15 #include "remoting/protocol/pepper_session_manager.h" | 15 #include "remoting/protocol/pepper_session_manager.h" |
| 16 #include "remoting/protocol/pepper_stream_channel.h" | 16 #include "remoting/protocol/pepper_stream_channel.h" |
| 17 #include "third_party/libjingle/source/talk/p2p/base/candidate.h" | 17 #include "third_party/libjingle/source/talk/p2p/base/candidate.h" |
| 18 #include "third_party/libjingle/source/talk/xmllite/xmlelement.h" | 18 #include "third_party/libjingle/source/talk/xmllite/xmlelement.h" |
| 19 | 19 |
| 20 using buzz::XmlElement; | 20 using buzz::XmlElement; |
| 21 | 21 |
| 22 namespace remoting { | 22 namespace remoting { |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 // enough entropy. In the worst case connection will fail when two | 74 // enough entropy. In the worst case connection will fail when two |
| 75 // clients generate the same session ID concurrently. | 75 // clients generate the same session ID concurrently. |
| 76 session_id_ = base::Int64ToString(base::RandGenerator(kint64max)); | 76 session_id_ = base::Int64ToString(base::RandGenerator(kint64max)); |
| 77 | 77 |
| 78 // Send session-initiate message. | 78 // Send session-initiate message. |
| 79 JingleMessage message(peer_jid_, JingleMessage::SESSION_INITIATE, | 79 JingleMessage message(peer_jid_, JingleMessage::SESSION_INITIATE, |
| 80 session_id_); | 80 session_id_); |
| 81 message.from = session_manager_->local_jid_; | 81 message.from = session_manager_->local_jid_; |
| 82 message.description.reset( | 82 message.description.reset( |
| 83 new ContentDescription(candidate_config_->Clone(), initiator_token_, "")); | 83 new ContentDescription(candidate_config_->Clone(), initiator_token_, "")); |
| 84 initiate_request_.reset(session_manager_->CreateIqRequest()); | 84 initiate_request_.reset(session_manager_->iq_sender()->SendIq( |
| 85 initiate_request_->set_callback(base::Bind( | 85 message.ToXml(), |
| 86 &PepperSession::OnSessionInitiateResponse, base::Unretained(this))); | 86 base::Bind(&PepperSession::OnSessionInitiateResponse, |
| 87 initiate_request_->SendIq(message.ToXml()); | 87 base::Unretained(this)))); |
| 88 | 88 |
| 89 SetState(CONNECTING); | 89 SetState(CONNECTING); |
| 90 } | 90 } |
| 91 | 91 |
| 92 void PepperSession::OnSessionInitiateResponse( | 92 void PepperSession::OnSessionInitiateResponse( |
| 93 const buzz::XmlElement* response) { | 93 const buzz::XmlElement* response) { |
| 94 const std::string& type = response->Attr(buzz::QName("", "type")); | 94 const std::string& type = response->Attr(buzz::QName("", "type")); |
| 95 if (type != "result") { | 95 if (type != "result") { |
| 96 LOG(ERROR) << "Received error in response to session-initiate message: \"" | 96 LOG(ERROR) << "Received error in response to session-initiate message: \"" |
| 97 << response->Str() | 97 << response->Str() |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 } | 189 } |
| 190 | 190 |
| 191 void PepperSession::Close() { | 191 void PepperSession::Close() { |
| 192 DCHECK(CalledOnValidThread()); | 192 DCHECK(CalledOnValidThread()); |
| 193 | 193 |
| 194 if (state_ == CONNECTING || state_ == CONNECTED || | 194 if (state_ == CONNECTING || state_ == CONNECTED || |
| 195 state_ == CONNECTED_CHANNELS) { | 195 state_ == CONNECTED_CHANNELS) { |
| 196 // Send session-terminate message. | 196 // Send session-terminate message. |
| 197 JingleMessage message(peer_jid_, JingleMessage::SESSION_TERMINATE, | 197 JingleMessage message(peer_jid_, JingleMessage::SESSION_TERMINATE, |
| 198 session_id_); | 198 session_id_); |
| 199 scoped_ptr<IqRequest> terminate_request( | 199 scoped_ptr<IqRequest> terminate_request( |
| 200 session_manager_->CreateIqRequest()); | 200 session_manager_->iq_sender()->SendIq( |
| 201 terminate_request->SendIq(message.ToXml()); | 201 message.ToXml(), IqSender::ReplyCallback())); |
| 202 } | 202 } |
| 203 | 203 |
| 204 CloseInternal(false); | 204 CloseInternal(false); |
| 205 } | 205 } |
| 206 | 206 |
| 207 void PepperSession::OnIncomingMessage(const JingleMessage& message, | 207 void PepperSession::OnIncomingMessage(const JingleMessage& message, |
| 208 JingleMessageReply* reply) { | 208 JingleMessageReply* reply) { |
| 209 DCHECK(CalledOnValidThread()); | 209 DCHECK(CalledOnValidThread()); |
| 210 | 210 |
| 211 if (message.from != peer_jid_) { | 211 if (message.from != peer_jid_) { |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 | 323 |
| 324 void PepperSession::OnDeleteChannel(PepperChannel* channel) { | 324 void PepperSession::OnDeleteChannel(PepperChannel* channel) { |
| 325 ChannelsMap::iterator it = channels_.find(channel->name()); | 325 ChannelsMap::iterator it = channels_.find(channel->name()); |
| 326 DCHECK_EQ(it->second, channel); | 326 DCHECK_EQ(it->second, channel); |
| 327 channels_.erase(it); | 327 channels_.erase(it); |
| 328 } | 328 } |
| 329 | 329 |
| 330 void PepperSession::SendTransportInfo() { | 330 void PepperSession::SendTransportInfo() { |
| 331 JingleMessage message(peer_jid_, JingleMessage::TRANSPORT_INFO, session_id_); | 331 JingleMessage message(peer_jid_, JingleMessage::TRANSPORT_INFO, session_id_); |
| 332 message.candidates.swap(pending_candidates_); | 332 message.candidates.swap(pending_candidates_); |
| 333 scoped_ptr<IqRequest> request(session_manager_->CreateIqRequest()); | 333 scoped_ptr<IqRequest> request(session_manager_->iq_sender()->SendIq( |
| 334 request->SendIq(message.ToXml()); | 334 message.ToXml(), IqSender::ReplyCallback())); |
| 335 } | 335 } |
| 336 | 336 |
| 337 void PepperSession::CreateChannels() { | 337 void PepperSession::CreateChannels() { |
| 338 CreateStreamChannel( | 338 CreateStreamChannel( |
| 339 kControlChannelName, | 339 kControlChannelName, |
| 340 base::Bind(&PepperSession::OnChannelConnected, | 340 base::Bind(&PepperSession::OnChannelConnected, |
| 341 base::Unretained(this), &control_channel_socket_)); | 341 base::Unretained(this), &control_channel_socket_)); |
| 342 CreateStreamChannel( | 342 CreateStreamChannel( |
| 343 kEventChannelName, | 343 kEventChannelName, |
| 344 base::Bind(&PepperSession::OnChannelConnected, | 344 base::Bind(&PepperSession::OnChannelConnected, |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 DCHECK_NE(state_, FAILED); | 383 DCHECK_NE(state_, FAILED); |
| 384 | 384 |
| 385 state_ = new_state; | 385 state_ = new_state; |
| 386 if (!state_change_callback_.is_null()) | 386 if (!state_change_callback_.is_null()) |
| 387 state_change_callback_.Run(new_state); | 387 state_change_callback_.Run(new_state); |
| 388 } | 388 } |
| 389 } | 389 } |
| 390 | 390 |
| 391 } // namespace protocol | 391 } // namespace protocol |
| 392 } // namespace remoting | 392 } // namespace remoting |
| OLD | NEW |