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

Side by Side Diff: remoting/protocol/jingle_session.cc

Issue 1545743002: Move ownership of Transport out of Session. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move_not_pass_client
Patch Set: Created 4 years, 11 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 unified diff | Download patch
« no previous file with comments | « remoting/protocol/jingle_session.h ('k') | remoting/protocol/jingle_session_manager.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/jingle_session.h" 5 #include "remoting/protocol/jingle_session.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <limits> 9 #include <limits>
10 #include <utility> 10 #include <utility>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/rand_util.h" 13 #include "base/rand_util.h"
14 #include "base/single_thread_task_runner.h" 14 #include "base/single_thread_task_runner.h"
15 #include "base/stl_util.h" 15 #include "base/stl_util.h"
16 #include "base/strings/string_number_conversions.h" 16 #include "base/strings/string_number_conversions.h"
17 #include "base/thread_task_runner_handle.h" 17 #include "base/thread_task_runner_handle.h"
18 #include "base/time/time.h" 18 #include "base/time/time.h"
19 #include "remoting/base/constants.h" 19 #include "remoting/base/constants.h"
20 #include "remoting/protocol/authenticator.h" 20 #include "remoting/protocol/authenticator.h"
21 #include "remoting/protocol/content_description.h" 21 #include "remoting/protocol/content_description.h"
22 #include "remoting/protocol/jingle_messages.h" 22 #include "remoting/protocol/jingle_messages.h"
23 #include "remoting/protocol/jingle_session_manager.h" 23 #include "remoting/protocol/jingle_session_manager.h"
24 #include "remoting/protocol/session_config.h" 24 #include "remoting/protocol/session_config.h"
25 #include "remoting/protocol/transport.h"
25 #include "remoting/signaling/iq_sender.h" 26 #include "remoting/signaling/iq_sender.h"
26 #include "third_party/webrtc/libjingle/xmllite/xmlelement.h" 27 #include "third_party/webrtc/libjingle/xmllite/xmlelement.h"
27 #include "third_party/webrtc/p2p/base/candidate.h" 28 #include "third_party/webrtc/p2p/base/candidate.h"
28 29
29 using buzz::XmlElement; 30 using buzz::XmlElement;
30 31
31 namespace remoting { 32 namespace remoting {
32 namespace protocol { 33 namespace protocol {
33 34
34 namespace { 35 namespace {
(...skipping 27 matching lines...) Expand all
62 63
63 JingleSession::JingleSession(JingleSessionManager* session_manager) 64 JingleSession::JingleSession(JingleSessionManager* session_manager)
64 : session_manager_(session_manager), 65 : session_manager_(session_manager),
65 event_handler_(nullptr), 66 event_handler_(nullptr),
66 state_(INITIALIZING), 67 state_(INITIALIZING),
67 error_(OK), 68 error_(OK),
68 weak_factory_(this) { 69 weak_factory_(this) {
69 } 70 }
70 71
71 JingleSession::~JingleSession() { 72 JingleSession::~JingleSession() {
72 transport_.reset();
73
74 STLDeleteContainerPointers(pending_requests_.begin(), 73 STLDeleteContainerPointers(pending_requests_.begin(),
75 pending_requests_.end()); 74 pending_requests_.end());
76 STLDeleteContainerPointers(transport_info_requests_.begin(), 75 STLDeleteContainerPointers(transport_info_requests_.begin(),
77 transport_info_requests_.end()); 76 transport_info_requests_.end());
78 77
79 session_manager_->SessionDestroyed(this); 78 session_manager_->SessionDestroyed(this);
80 } 79 }
81 80
82 void JingleSession::SetEventHandler(Session::EventHandler* event_handler) { 81 void JingleSession::SetEventHandler(Session::EventHandler* event_handler) {
83 DCHECK(CalledOnValidThread()); 82 DCHECK(thread_checker_.CalledOnValidThread());
84 DCHECK(event_handler); 83 DCHECK(event_handler);
85 event_handler_ = event_handler; 84 event_handler_ = event_handler;
86 } 85 }
87 86
88 ErrorCode JingleSession::error() { 87 ErrorCode JingleSession::error() {
89 DCHECK(CalledOnValidThread()); 88 DCHECK(thread_checker_.CalledOnValidThread());
90 return error_; 89 return error_;
91 } 90 }
92 91
93 void JingleSession::StartConnection(const std::string& peer_jid, 92 void JingleSession::StartConnection(const std::string& peer_jid,
94 scoped_ptr<Authenticator> authenticator) { 93 scoped_ptr<Authenticator> authenticator) {
95 DCHECK(CalledOnValidThread()); 94 DCHECK(thread_checker_.CalledOnValidThread());
96 DCHECK(authenticator.get()); 95 DCHECK(authenticator.get());
97 DCHECK_EQ(authenticator->state(), Authenticator::MESSAGE_READY); 96 DCHECK_EQ(authenticator->state(), Authenticator::MESSAGE_READY);
98 97
99 peer_jid_ = peer_jid; 98 peer_jid_ = peer_jid;
100 authenticator_ = std::move(authenticator); 99 authenticator_ = std::move(authenticator);
101 100
102 // Generate random session ID. There are usually not more than 1 101 // Generate random session ID. There are usually not more than 1
103 // concurrent session per host, so a random 64-bit integer provides 102 // concurrent session per host, so a random 64-bit integer provides
104 // enough entropy. In the worst case connection will fail when two 103 // enough entropy. In the worst case connection will fail when two
105 // clients generate the same session ID concurrently. 104 // clients generate the same session ID concurrently.
106 session_id_ = base::Uint64ToString( 105 session_id_ = base::Uint64ToString(
107 base::RandGenerator(std::numeric_limits<uint64_t>::max())); 106 base::RandGenerator(std::numeric_limits<uint64_t>::max()));
108 107
109 transport_ = session_manager_->transport_factory_->CreateTransport();
110
111 // Send session-initiate message. 108 // Send session-initiate message.
112 JingleMessage message(peer_jid_, JingleMessage::SESSION_INITIATE, 109 JingleMessage message(peer_jid_, JingleMessage::SESSION_INITIATE,
113 session_id_); 110 session_id_);
114 message.initiator = session_manager_->signal_strategy_->GetLocalJid(); 111 message.initiator = session_manager_->signal_strategy_->GetLocalJid();
115 message.description.reset(new ContentDescription( 112 message.description.reset(new ContentDescription(
116 session_manager_->protocol_config_->Clone(), 113 session_manager_->protocol_config_->Clone(),
117 authenticator_->GetNextMessage())); 114 authenticator_->GetNextMessage()));
118 SendMessage(message); 115 SendMessage(message);
119 116
120 SetState(CONNECTING); 117 SetState(CONNECTING);
121 } 118 }
122 119
123 void JingleSession::InitializeIncomingConnection( 120 void JingleSession::InitializeIncomingConnection(
124 const JingleMessage& initiate_message, 121 const JingleMessage& initiate_message,
125 scoped_ptr<Authenticator> authenticator) { 122 scoped_ptr<Authenticator> authenticator) {
126 DCHECK(CalledOnValidThread()); 123 DCHECK(thread_checker_.CalledOnValidThread());
127 DCHECK(initiate_message.description.get()); 124 DCHECK(initiate_message.description.get());
128 DCHECK(authenticator.get()); 125 DCHECK(authenticator.get());
129 DCHECK_EQ(authenticator->state(), Authenticator::WAITING_MESSAGE); 126 DCHECK_EQ(authenticator->state(), Authenticator::WAITING_MESSAGE);
130 127
131 peer_jid_ = initiate_message.from; 128 peer_jid_ = initiate_message.from;
132 authenticator_ = std::move(authenticator); 129 authenticator_ = std::move(authenticator);
133 session_id_ = initiate_message.sid; 130 session_id_ = initiate_message.sid;
134 131
135 SetState(ACCEPTING); 132 SetState(ACCEPTING);
136 133
137 config_ = 134 config_ =
138 SessionConfig::SelectCommon(initiate_message.description->config(), 135 SessionConfig::SelectCommon(initiate_message.description->config(),
139 session_manager_->protocol_config_.get()); 136 session_manager_->protocol_config_.get());
140 if (!config_) { 137 if (!config_) {
141 LOG(WARNING) << "Rejecting connection from " << peer_jid_ 138 LOG(WARNING) << "Rejecting connection from " << peer_jid_
142 << " because no compatible configuration has been found."; 139 << " because no compatible configuration has been found.";
143 Close(INCOMPATIBLE_PROTOCOL); 140 Close(INCOMPATIBLE_PROTOCOL);
144 return; 141 return;
145 } 142 }
146
147 transport_ = session_manager_->transport_factory_->CreateTransport();
148 } 143 }
149 144
150 void JingleSession::AcceptIncomingConnection( 145 void JingleSession::AcceptIncomingConnection(
151 const JingleMessage& initiate_message) { 146 const JingleMessage& initiate_message) {
152 DCHECK(config_); 147 DCHECK(config_);
153 148
154 // Process the first authentication message. 149 // Process the first authentication message.
155 const buzz::XmlElement* first_auth_message = 150 const buzz::XmlElement* first_auth_message =
156 initiate_message.description->authenticator_message(); 151 initiate_message.description->authenticator_message();
157 152
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 OnAuthenticated(); 188 OnAuthenticated();
194 } else { 189 } else {
195 DCHECK_EQ(authenticator_->state(), Authenticator::WAITING_MESSAGE); 190 DCHECK_EQ(authenticator_->state(), Authenticator::WAITING_MESSAGE);
196 if (authenticator_->started()) { 191 if (authenticator_->started()) {
197 SetState(AUTHENTICATING); 192 SetState(AUTHENTICATING);
198 } 193 }
199 } 194 }
200 } 195 }
201 196
202 const std::string& JingleSession::jid() { 197 const std::string& JingleSession::jid() {
203 DCHECK(CalledOnValidThread()); 198 DCHECK(thread_checker_.CalledOnValidThread());
204 return peer_jid_; 199 return peer_jid_;
205 } 200 }
206 201
207 const SessionConfig& JingleSession::config() { 202 const SessionConfig& JingleSession::config() {
208 DCHECK(CalledOnValidThread()); 203 DCHECK(thread_checker_.CalledOnValidThread());
209 return *config_; 204 return *config_;
210 } 205 }
211 206
212 Transport* JingleSession::GetTransport() { 207 void JingleSession::SetTransport(Transport* transport) {
213 DCHECK(CalledOnValidThread()); 208 DCHECK(thread_checker_.CalledOnValidThread());
214 return transport_.get(); 209 DCHECK(!transport_);
210 DCHECK(transport);
211 transport_ = transport;
212 }
213
214 void JingleSession::SendTransportInfo(
215 scoped_ptr<buzz::XmlElement> transport_info) {
216 DCHECK(thread_checker_.CalledOnValidThread());
217 DCHECK_EQ(state_, AUTHENTICATED);
218
219 JingleMessage message(peer_jid_, JingleMessage::TRANSPORT_INFO, session_id_);
220 message.transport_info = std::move(transport_info);
221
222 scoped_ptr<IqRequest> request = session_manager_->iq_sender()->SendIq(
223 message.ToXml(), base::Bind(&JingleSession::OnTransportInfoResponse,
224 base::Unretained(this)));
225 if (request) {
226 request->SetTimeout(base::TimeDelta::FromSeconds(kTransportInfoTimeout));
227 transport_info_requests_.push_back(request.release());
228 } else {
229 LOG(ERROR) << "Failed to send a transport-info message";
230 }
215 } 231 }
216 232
217 void JingleSession::Close(protocol::ErrorCode error) { 233 void JingleSession::Close(protocol::ErrorCode error) {
218 DCHECK(CalledOnValidThread()); 234 DCHECK(thread_checker_.CalledOnValidThread());
219
220 transport_.reset();
221 235
222 if (is_session_active()) { 236 if (is_session_active()) {
223 // Send session-terminate message with the appropriate error code. 237 // Send session-terminate message with the appropriate error code.
224 JingleMessage::Reason reason; 238 JingleMessage::Reason reason;
225 switch (error) { 239 switch (error) {
226 case OK: 240 case OK:
227 reason = JingleMessage::SUCCESS; 241 reason = JingleMessage::SUCCESS;
228 break; 242 break;
229 case SESSION_REJECTED: 243 case SESSION_REJECTED:
230 case AUTHENTICATION_FAILED: 244 case AUTHENTICATION_FAILED:
(...skipping 26 matching lines...) Expand all
257 if (state_ != FAILED && state_ != CLOSED) { 271 if (state_ != FAILED && state_ != CLOSED) {
258 if (error != OK) { 272 if (error != OK) {
259 SetState(FAILED); 273 SetState(FAILED);
260 } else { 274 } else {
261 SetState(CLOSED); 275 SetState(CLOSED);
262 } 276 }
263 } 277 }
264 } 278 }
265 279
266 void JingleSession::SendMessage(const JingleMessage& message) { 280 void JingleSession::SendMessage(const JingleMessage& message) {
267 DCHECK(CalledOnValidThread()); 281 DCHECK(thread_checker_.CalledOnValidThread());
268 282
269 scoped_ptr<IqRequest> request = session_manager_->iq_sender()->SendIq( 283 scoped_ptr<IqRequest> request = session_manager_->iq_sender()->SendIq(
270 message.ToXml(), 284 message.ToXml(),
271 base::Bind(&JingleSession::OnMessageResponse, 285 base::Bind(&JingleSession::OnMessageResponse,
272 base::Unretained(this), 286 base::Unretained(this),
273 message.action)); 287 message.action));
274 288
275 int timeout = kDefaultMessageTimeout; 289 int timeout = kDefaultMessageTimeout;
276 if (message.action == JingleMessage::SESSION_INITIATE || 290 if (message.action == JingleMessage::SESSION_INITIATE ||
277 message.action == JingleMessage::SESSION_ACCEPT) { 291 message.action == JingleMessage::SESSION_ACCEPT) {
278 timeout = kSessionInitiateAndAcceptTimeout; 292 timeout = kSessionInitiateAndAcceptTimeout;
279 } 293 }
280 if (request) { 294 if (request) {
281 request->SetTimeout(base::TimeDelta::FromSeconds(timeout)); 295 request->SetTimeout(base::TimeDelta::FromSeconds(timeout));
282 pending_requests_.insert(request.release()); 296 pending_requests_.insert(request.release());
283 } else { 297 } else {
284 LOG(ERROR) << "Failed to send a " 298 LOG(ERROR) << "Failed to send a "
285 << JingleMessage::GetActionName(message.action) << " message"; 299 << JingleMessage::GetActionName(message.action) << " message";
286 } 300 }
287 } 301 }
288 302
289 void JingleSession::OnMessageResponse( 303 void JingleSession::OnMessageResponse(
290 JingleMessage::ActionType request_type, 304 JingleMessage::ActionType request_type,
291 IqRequest* request, 305 IqRequest* request,
292 const buzz::XmlElement* response) { 306 const buzz::XmlElement* response) {
293 DCHECK(CalledOnValidThread()); 307 DCHECK(thread_checker_.CalledOnValidThread());
294 308
295 // Delete the request from the list of pending requests. 309 // Delete the request from the list of pending requests.
296 pending_requests_.erase(request); 310 pending_requests_.erase(request);
297 delete request; 311 delete request;
298 312
299 // Ignore all responses after session was closed. 313 // Ignore all responses after session was closed.
300 if (state_ == CLOSED || state_ == FAILED) 314 if (state_ == CLOSED || state_ == FAILED)
301 return; 315 return;
302 316
303 std::string type_str = JingleMessage::GetActionName(request_type); 317 std::string type_str = JingleMessage::GetActionName(request_type);
(...skipping 11 matching lines...) Expand all
315 << " message: \"" << response->Str() 329 << " message: \"" << response->Str()
316 << "\". Terminating the session."; 330 << "\". Terminating the session.";
317 331
318 // TODO(sergeyu): There may be different reasons for error 332 // TODO(sergeyu): There may be different reasons for error
319 // here. Parse the response stanza to find failure reason. 333 // here. Parse the response stanza to find failure reason.
320 Close(PEER_IS_OFFLINE); 334 Close(PEER_IS_OFFLINE);
321 } 335 }
322 } 336 }
323 } 337 }
324 338
325 void JingleSession::OnOutgoingTransportInfo(
326 scoped_ptr<XmlElement> transport_info) {
327 DCHECK(CalledOnValidThread());
328
329 JingleMessage message(peer_jid_, JingleMessage::TRANSPORT_INFO, session_id_);
330 message.transport_info = std::move(transport_info);
331
332 scoped_ptr<IqRequest> request = session_manager_->iq_sender()->SendIq(
333 message.ToXml(), base::Bind(&JingleSession::OnTransportInfoResponse,
334 base::Unretained(this)));
335 if (request) {
336 request->SetTimeout(base::TimeDelta::FromSeconds(kTransportInfoTimeout));
337 transport_info_requests_.push_back(request.release());
338 } else {
339 LOG(ERROR) << "Failed to send a transport-info message";
340 }
341 }
342
343 void JingleSession::OnTransportRouteChange(const std::string& channel_name,
344 const TransportRoute& route) {
345 DCHECK(CalledOnValidThread());
346
347 event_handler_->OnSessionRouteChange(channel_name, route);
348 }
349
350 void JingleSession::OnTransportConnected() {
351 DCHECK(CalledOnValidThread());
352 DCHECK_EQ(state_, AUTHENTICATED);
353 SetState(CONNECTED);
354 }
355
356 void JingleSession::OnTransportError(ErrorCode error) {
357 DCHECK(CalledOnValidThread());
358
359 Close(error);
360 }
361
362 void JingleSession::OnTransportInfoResponse(IqRequest* request, 339 void JingleSession::OnTransportInfoResponse(IqRequest* request,
363 const buzz::XmlElement* response) { 340 const buzz::XmlElement* response) {
364 DCHECK(CalledOnValidThread()); 341 DCHECK(thread_checker_.CalledOnValidThread());
365 DCHECK(!transport_info_requests_.empty()); 342 DCHECK(!transport_info_requests_.empty());
366 343
367 // Consider transport-info requests sent before this one lost and delete 344 // Consider transport-info requests sent before this one lost and delete
368 // corresponding IqRequest objects. 345 // corresponding IqRequest objects.
369 while (transport_info_requests_.front() != request) { 346 while (transport_info_requests_.front() != request) {
370 delete transport_info_requests_.front(); 347 delete transport_info_requests_.front();
371 transport_info_requests_.pop_front(); 348 transport_info_requests_.pop_front();
372 } 349 }
373 350
374 // Delete the |request| itself. 351 // Delete the |request| itself.
(...skipping 10 matching lines...) Expand all
385 const std::string& type = response->Attr(buzz::QName(std::string(), "type")); 362 const std::string& type = response->Attr(buzz::QName(std::string(), "type"));
386 if (type != "result") { 363 if (type != "result") {
387 LOG(ERROR) << "Received error in response to transport-info message: \"" 364 LOG(ERROR) << "Received error in response to transport-info message: \""
388 << response->Str() << "\". Terminating the session."; 365 << response->Str() << "\". Terminating the session.";
389 Close(PEER_IS_OFFLINE); 366 Close(PEER_IS_OFFLINE);
390 } 367 }
391 } 368 }
392 369
393 void JingleSession::OnIncomingMessage(const JingleMessage& message, 370 void JingleSession::OnIncomingMessage(const JingleMessage& message,
394 const ReplyCallback& reply_callback) { 371 const ReplyCallback& reply_callback) {
395 DCHECK(CalledOnValidThread()); 372 DCHECK(thread_checker_.CalledOnValidThread());
396 373
397 if (message.from != peer_jid_) { 374 if (message.from != peer_jid_) {
398 // Ignore messages received from a different Jid. 375 // Ignore messages received from a different Jid.
399 reply_callback.Run(JingleMessageReply::INVALID_SID); 376 reply_callback.Run(JingleMessageReply::INVALID_SID);
400 return; 377 return;
401 } 378 }
402 379
403 switch (message.action) { 380 switch (message.action) {
404 case JingleMessage::SESSION_ACCEPT: 381 case JingleMessage::SESSION_ACCEPT:
405 OnAccept(message, reply_callback); 382 OnAccept(message, reply_callback);
406 break; 383 break;
407 384
408 case JingleMessage::SESSION_INFO: 385 case JingleMessage::SESSION_INFO:
409 OnSessionInfo(message, reply_callback); 386 OnSessionInfo(message, reply_callback);
410 break; 387 break;
411 388
412 case JingleMessage::TRANSPORT_INFO: 389 case JingleMessage::TRANSPORT_INFO:
413 if (message.transport_info && 390 if (!transport_) {
414 transport_->ProcessTransportInfo(message.transport_info.get())) { 391 LOG(ERROR) << "Received unexpected transport-info message.";
415 reply_callback.Run(JingleMessageReply::NONE); 392 reply_callback.Run(JingleMessageReply::NONE);
416 } else { 393 return;
394 }
395
396 if (!message.transport_info ||
397 !transport_->ProcessTransportInfo(
398 message.transport_info.get())) {
417 reply_callback.Run(JingleMessageReply::BAD_REQUEST); 399 reply_callback.Run(JingleMessageReply::BAD_REQUEST);
400 return;
418 } 401 }
402
403 reply_callback.Run(JingleMessageReply::NONE);
419 break; 404 break;
420 405
421 case JingleMessage::SESSION_TERMINATE: 406 case JingleMessage::SESSION_TERMINATE:
422 OnTerminate(message, reply_callback); 407 OnTerminate(message, reply_callback);
423 break; 408 break;
424 409
425 default: 410 default:
426 reply_callback.Run(JingleMessageReply::UNEXPECTED_REQUEST); 411 reply_callback.Run(JingleMessageReply::UNEXPECTED_REQUEST);
427 } 412 }
428 } 413 }
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 } 521 }
537 if (!session_manager_->protocol_config_->IsSupported(*config_)) { 522 if (!session_manager_->protocol_config_->IsSupported(*config_)) {
538 LOG(ERROR) << "session-accept specifies an invalid configuration"; 523 LOG(ERROR) << "session-accept specifies an invalid configuration";
539 return false; 524 return false;
540 } 525 }
541 526
542 return true; 527 return true;
543 } 528 }
544 529
545 void JingleSession::ProcessAuthenticationStep() { 530 void JingleSession::ProcessAuthenticationStep() {
546 DCHECK(CalledOnValidThread()); 531 DCHECK(thread_checker_.CalledOnValidThread());
547 DCHECK_NE(authenticator_->state(), Authenticator::PROCESSING_MESSAGE); 532 DCHECK_NE(authenticator_->state(), Authenticator::PROCESSING_MESSAGE);
548 533
549 if (state_ != ACCEPTED && state_ != AUTHENTICATING) { 534 if (state_ != ACCEPTED && state_ != AUTHENTICATING) {
550 DCHECK(state_ == FAILED || state_ == CLOSED); 535 DCHECK(state_ == FAILED || state_ == CLOSED);
551 // The remote host closed the connection while the authentication was being 536 // The remote host closed the connection while the authentication was being
552 // processed asynchronously, nothing to do. 537 // processed asynchronously, nothing to do.
553 return; 538 return;
554 } 539 }
555 540
556 if (authenticator_->state() == Authenticator::MESSAGE_READY) { 541 if (authenticator_->state() == Authenticator::MESSAGE_READY) {
(...skipping 21 matching lines...) Expand all
578 void JingleSession::ContinueAuthenticationStep() { 563 void JingleSession::ContinueAuthenticationStep() {
579 if (authenticator_->state() == Authenticator::ACCEPTED) { 564 if (authenticator_->state() == Authenticator::ACCEPTED) {
580 OnAuthenticated(); 565 OnAuthenticated();
581 } else if (authenticator_->state() == Authenticator::REJECTED) { 566 } else if (authenticator_->state() == Authenticator::REJECTED) {
582 Close(AuthRejectionReasonToErrorCode( 567 Close(AuthRejectionReasonToErrorCode(
583 authenticator_->rejection_reason())); 568 authenticator_->rejection_reason()));
584 } 569 }
585 } 570 }
586 571
587 void JingleSession::OnAuthenticated() { 572 void JingleSession::OnAuthenticated() {
588 transport_->Start(this, authenticator_.get()); 573 transport_->Start(authenticator_.get(),
574 base::Bind(&JingleSession::SendTransportInfo,
575 weak_factory_.GetWeakPtr()));
589 576
590 SetState(AUTHENTICATED); 577 SetState(AUTHENTICATED);
591 } 578 }
592 579
593 void JingleSession::SetState(State new_state) { 580 void JingleSession::SetState(State new_state) {
594 DCHECK(CalledOnValidThread()); 581 DCHECK(thread_checker_.CalledOnValidThread());
595 582
596 if (new_state != state_) { 583 if (new_state != state_) {
597 DCHECK_NE(state_, CLOSED); 584 DCHECK_NE(state_, CLOSED);
598 DCHECK_NE(state_, FAILED); 585 DCHECK_NE(state_, FAILED);
599 586
600 state_ = new_state; 587 state_ = new_state;
601 if (event_handler_) 588 if (event_handler_)
602 event_handler_->OnSessionStateChange(new_state); 589 event_handler_->OnSessionStateChange(new_state);
603 } 590 }
604 } 591 }
605 592
606 bool JingleSession::is_session_active() { 593 bool JingleSession::is_session_active() {
607 return state_ == CONNECTING || state_ == ACCEPTING || state_ == ACCEPTED || 594 return state_ == CONNECTING || state_ == ACCEPTING || state_ == ACCEPTED ||
608 state_ == AUTHENTICATING || state_ == AUTHENTICATED; 595 state_ == AUTHENTICATING || state_ == AUTHENTICATED;
609 } 596 }
610 597
611 } // namespace protocol 598 } // namespace protocol
612 } // namespace remoting 599 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/protocol/jingle_session.h ('k') | remoting/protocol/jingle_session_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698