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

Side by Side Diff: remoting/host/chromoting_host.cc

Issue 6724033: Remove authenticated_ fields from stubs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove redundant comment. Created 9 years, 8 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 | Annotate | Revision Log
OLDNEW
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/host/chromoting_host.h" 5 #include "remoting/host/chromoting_host.h"
6 6
7 #include "base/bind.h"
7 #include "base/stl_util-inl.h" 8 #include "base/stl_util-inl.h"
8 #include "base/task.h" 9 #include "base/task.h"
9 #include "build/build_config.h" 10 #include "build/build_config.h"
10 #include "remoting/base/constants.h" 11 #include "remoting/base/constants.h"
11 #include "remoting/base/encoder.h" 12 #include "remoting/base/encoder.h"
12 #include "remoting/base/encoder_row_based.h" 13 #include "remoting/base/encoder_row_based.h"
13 #include "remoting/base/encoder_vp8.h" 14 #include "remoting/base/encoder_vp8.h"
14 #include "remoting/host/capturer.h" 15 #include "remoting/host/capturer.h"
15 #include "remoting/host/chromoting_host_context.h" 16 #include "remoting/host/chromoting_host_context.h"
16 #include "remoting/host/curtain.h" 17 #include "remoting/host/curtain.h"
17 #include "remoting/host/desktop_environment.h" 18 #include "remoting/host/desktop_environment.h"
18 #include "remoting/host/event_executor.h" 19 #include "remoting/host/event_executor.h"
19 #include "remoting/host/host_config.h" 20 #include "remoting/host/host_config.h"
20 #include "remoting/host/host_key_pair.h" 21 #include "remoting/host/host_key_pair.h"
21 #include "remoting/host/screen_recorder.h" 22 #include "remoting/host/screen_recorder.h"
23 #include "remoting/host/user_authenticator.h"
22 #include "remoting/proto/auth.pb.h" 24 #include "remoting/proto/auth.pb.h"
23 #include "remoting/protocol/connection_to_client.h" 25 #include "remoting/protocol/connection_to_client.h"
24 #include "remoting/protocol/client_stub.h" 26 #include "remoting/protocol/client_stub.h"
25 #include "remoting/protocol/host_stub.h" 27 #include "remoting/protocol/host_stub.h"
26 #include "remoting/protocol/input_stub.h" 28 #include "remoting/protocol/input_stub.h"
27 #include "remoting/protocol/jingle_session_manager.h" 29 #include "remoting/protocol/jingle_session_manager.h"
28 #include "remoting/protocol/session_config.h" 30 #include "remoting/protocol/session_config.h"
29 31
30 using remoting::protocol::ConnectionToClient; 32 using remoting::protocol::ConnectionToClient;
31 using remoting::protocol::InputStub; 33 using remoting::protocol::InputStub;
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 } 175 }
174 176
175 // This method is called when a client connects. 177 // This method is called when a client connects.
176 void ChromotingHost::OnClientConnected(ConnectionToClient* connection) { 178 void ChromotingHost::OnClientConnected(ConnectionToClient* connection) {
177 DCHECK_EQ(context_->main_message_loop(), MessageLoop::current()); 179 DCHECK_EQ(context_->main_message_loop(), MessageLoop::current());
178 } 180 }
179 181
180 void ChromotingHost::OnClientDisconnected(ConnectionToClient* connection) { 182 void ChromotingHost::OnClientDisconnected(ConnectionToClient* connection) {
181 DCHECK_EQ(context_->main_message_loop(), MessageLoop::current()); 183 DCHECK_EQ(context_->main_message_loop(), MessageLoop::current());
182 184
185 // Find the client session corresponding to the given connection.
186 std::vector<scoped_refptr<ClientSession> >::iterator client;
187 for (client = clients_.begin(); client != clients_.end(); ++client) {
188 if (client->get()->connection() == connection)
189 break;
190 }
191 if (client == clients_.end())
192 return;
193
183 // Remove the connection from the session manager and stop the session. 194 // Remove the connection from the session manager and stop the session.
184 // TODO(hclam): Stop only if the last connection disconnected. 195 // TODO(hclam): Stop only if the last connection disconnected.
185 if (recorder_.get()) { 196 if (recorder_.get()) {
186 recorder_->RemoveConnection(connection); 197 recorder_->RemoveConnection(connection);
187 // The recorder only exists to serve the unique authenticated client. 198 // The recorder only exists to serve the unique authenticated client.
188 // If that client has disconnected, then we can kill the recorder. 199 // If that client has disconnected, then we can kill the recorder.
189 if (connection->client_authenticated()) { 200 if (client->get()->authenticated()) {
190 recorder_->Stop(NULL); 201 recorder_->Stop(NULL);
191 recorder_ = NULL; 202 recorder_ = NULL;
192 } 203 }
193 } 204 }
194 205
195 // Close the connection to connection just to be safe. 206 // Close the connection to connection just to be safe.
196 connection->Disconnect(); 207 connection->Disconnect();
197 208
198 // Also remove reference to ConnectionToClient from this object. 209 // Also remove reference to ConnectionToClient from this object.
199 std::vector<scoped_refptr<ClientSession> >::iterator it; 210 clients_.erase(client);
200 for (it = clients_.begin(); it != clients_.end(); ++it) { 211
201 if (it->get()->connection() == connection) {
202 clients_.erase(it);
203 break;
204 }
205 }
206 if (!HasAuthenticatedClients()) 212 if (!HasAuthenticatedClients())
207 EnableCurtainMode(false); 213 EnableCurtainMode(false);
208 } 214 }
209 215
210 //////////////////////////////////////////////////////////////////////////// 216 ////////////////////////////////////////////////////////////////////////////
211 // protocol::ConnectionToClient::EventHandler implementations 217 // protocol::ConnectionToClient::EventHandler implementations
212 void ChromotingHost::OnConnectionOpened(ConnectionToClient* connection) { 218 void ChromotingHost::OnConnectionOpened(ConnectionToClient* connection) {
213 DCHECK_EQ(context_->network_message_loop(), MessageLoop::current()); 219 DCHECK_EQ(context_->network_message_loop(), MessageLoop::current());
214 220
215 // Completes the connection to the client. 221 // Completes the connection to the client.
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 session->set_config(config); 320 session->set_config(config);
315 session->set_receiver_token( 321 session->set_receiver_token(
316 GenerateHostAuthToken(session->initiator_token())); 322 GenerateHostAuthToken(session->initiator_token()));
317 323
318 *response = protocol::SessionManager::ACCEPT; 324 *response = protocol::SessionManager::ACCEPT;
319 325
320 VLOG(1) << "Client connected: " << session->jid(); 326 VLOG(1) << "Client connected: " << session->jid();
321 327
322 // We accept the connection, so create a connection object. 328 // We accept the connection, so create a connection object.
323 ConnectionToClient* connection = new ConnectionToClient( 329 ConnectionToClient* connection = new ConnectionToClient(
324 context_->network_message_loop(), 330 context_->network_message_loop(), this);
325 this,
326 desktop_environment_->input_stub());
327 331
328 // Create a client object. 332 // Create a client object.
329 ClientSession* client = new ClientSession(this, connection); 333 ClientSession* client = new ClientSession(
334 this,
335 base::Bind(UserAuthenticator::Create),
336 connection,
337 desktop_environment_->input_stub());
330 connection->set_host_stub(client); 338 connection->set_host_stub(client);
339 connection->set_input_stub(client);
331 340
332 connection->Init(session); 341 connection->Init(session);
333 342
334 clients_.push_back(client); 343 clients_.push_back(client);
335 } 344 }
336 345
337 void ChromotingHost::set_protocol_config( 346 void ChromotingHost::set_protocol_config(
338 protocol::CandidateSessionConfig* config) { 347 protocol::CandidateSessionConfig* config) {
339 DCHECK(config_.get()); 348 DCHECK(config_.get());
340 DCHECK_EQ(state_, kInitial); 349 DCHECK_EQ(state_, kInitial);
(...skipping 29 matching lines...) Expand all
370 379
371 std::string ChromotingHost::GenerateHostAuthToken( 380 std::string ChromotingHost::GenerateHostAuthToken(
372 const std::string& encoded_client_token) { 381 const std::string& encoded_client_token) {
373 // TODO(ajwong): Return the signature of this instead. 382 // TODO(ajwong): Return the signature of this instead.
374 return encoded_client_token; 383 return encoded_client_token;
375 } 384 }
376 385
377 bool ChromotingHost::HasAuthenticatedClients() const { 386 bool ChromotingHost::HasAuthenticatedClients() const {
378 std::vector<scoped_refptr<ClientSession> >::const_iterator it; 387 std::vector<scoped_refptr<ClientSession> >::const_iterator it;
379 for (it = clients_.begin(); it != clients_.end(); ++it) { 388 for (it = clients_.begin(); it != clients_.end(); ++it) {
380 if (it->get()->connection()->client_authenticated()) 389 if (it->get()->authenticated())
381 return true; 390 return true;
382 } 391 }
383 return false; 392 return false;
384 } 393 }
385 394
386 void ChromotingHost::EnableCurtainMode(bool enable) { 395 void ChromotingHost::EnableCurtainMode(bool enable) {
387 // TODO(jamiewalch): This will need to be more sophisticated when we think 396 // TODO(jamiewalch): This will need to be more sophisticated when we think
388 // about proper crash recovery and daemon mode. 397 // about proper crash recovery and daemon mode.
389 if (enable == is_curtained_) 398 if (enable == is_curtained_)
390 return; 399 return;
(...skipping 10 matching lines...) Expand all
401 &ChromotingHost::LocalLoginSucceeded, 410 &ChromotingHost::LocalLoginSucceeded,
402 connection)); 411 connection));
403 return; 412 return;
404 } 413 }
405 414
406 protocol::LocalLoginStatus* status = new protocol::LocalLoginStatus(); 415 protocol::LocalLoginStatus* status = new protocol::LocalLoginStatus();
407 status->set_success(true); 416 status->set_success(true);
408 connection->client_stub()->BeginSessionResponse( 417 connection->client_stub()->BeginSessionResponse(
409 status, new DeleteTask<protocol::LocalLoginStatus>(status)); 418 status, new DeleteTask<protocol::LocalLoginStatus>(status));
410 419
411 connection->OnClientAuthenticated();
412
413 // Disconnect all other clients. 420 // Disconnect all other clients.
414 // Iterate over a copy of the list of clients, to avoid mutating the list 421 // Iterate over a copy of the list of clients, to avoid mutating the list
415 // while iterating over it. 422 // while iterating over it.
416 std::vector<scoped_refptr<ClientSession> > clients_copy(clients_); 423 std::vector<scoped_refptr<ClientSession> > clients_copy(clients_);
417 std::vector<scoped_refptr<ClientSession> >::const_iterator client; 424 std::vector<scoped_refptr<ClientSession> >::const_iterator client;
418 for (client = clients_copy.begin(); client != clients_copy.end(); client++) { 425 for (client = clients_copy.begin(); client != clients_copy.end(); client++) {
419 ConnectionToClient* connection_other = client->get()->connection(); 426 ConnectionToClient* connection_other = client->get()->connection();
420 if (connection_other != connection) { 427 if (connection_other != connection) {
421 OnClientDisconnected(connection_other); 428 OnClientDisconnected(connection_other);
422 } 429 }
(...skipping 29 matching lines...) Expand all
452 return; 459 return;
453 } 460 }
454 461
455 protocol::LocalLoginStatus* status = new protocol::LocalLoginStatus(); 462 protocol::LocalLoginStatus* status = new protocol::LocalLoginStatus();
456 status->set_success(false); 463 status->set_success(false);
457 connection->client_stub()->BeginSessionResponse( 464 connection->client_stub()->BeginSessionResponse(
458 status, new DeleteTask<protocol::LocalLoginStatus>(status)); 465 status, new DeleteTask<protocol::LocalLoginStatus>(status));
459 } 466 }
460 467
461 } // namespace remoting 468 } // namespace remoting
OLDNEW
« no previous file with comments | « no previous file | remoting/host/chromoting_host_unittest.cc » ('j') | remoting/host/chromoting_host_unittest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698