Index: remoting/host/client_session.cc |
diff --git a/remoting/host/client_session.cc b/remoting/host/client_session.cc |
index 72cd5ba518fe202209ae9a22d4e33dc5eb8fc141..ba8cff437804963e7d782522ca4a37ca4db2c256 100644 |
--- a/remoting/host/client_session.cc |
+++ b/remoting/host/client_session.cc |
@@ -6,6 +6,7 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/task.h" |
+#include "media/base/callback.h" |
#include "remoting/host/user_authenticator.h" |
#include "remoting/proto/auth.pb.h" |
@@ -13,9 +14,14 @@ namespace remoting { |
ClientSession::ClientSession( |
EventHandler* event_handler, |
- scoped_refptr<protocol::ConnectionToClient> connection) |
+ const base::Callback<UserAuthenticatorFactory>& auth_factory, |
+ scoped_refptr<protocol::ConnectionToClient> connection, |
+ protocol::InputStub* input_stub) |
: event_handler_(event_handler), |
- connection_(connection) { |
+ auth_factory_(auth_factory), |
+ connection_(connection), |
+ input_stub_(input_stub), |
+ authenticated_(false) { |
} |
ClientSession::~ClientSession() { |
@@ -23,8 +29,13 @@ ClientSession::~ClientSession() { |
void ClientSession::SuggestResolution( |
const protocol::SuggestResolutionRequest* msg, Task* done) { |
- done->Run(); |
- delete done; |
+ media::AutoTaskRunner task_runner(done); |
+ |
+ if (!authenticated_) { |
+ LOG(WARNING) << "Invalid control message received " |
+ << "(client not authenticated)."; |
+ return; |
+ } |
Wez
2011/03/30 20:24:57
If the client sends unexpected messages before hav
simonmorris
2011/03/31 11:14:00
Could be good, in another CL.
|
} |
void ClientSession::BeginSessionRequest( |
@@ -32,7 +43,7 @@ void ClientSession::BeginSessionRequest( |
DCHECK(event_handler_); |
bool success = false; |
- scoped_ptr<UserAuthenticator> authenticator(UserAuthenticator::Create()); |
+ scoped_ptr<UserAuthenticator> authenticator(auth_factory_.Run()); |
switch (credentials->type()) { |
case protocol::PASSWORD: |
success = authenticator->Authenticate(credentials->username(), |
@@ -45,6 +56,7 @@ void ClientSession::BeginSessionRequest( |
} |
if (success) { |
+ authenticated_ = true; |
event_handler_->LocalLoginSucceeded(connection_.get()); |
} else { |
LOG(WARNING) << "Login failed for user " << credentials->username(); |
@@ -55,12 +67,29 @@ void ClientSession::BeginSessionRequest( |
delete done; |
} |
-void ClientSession::Disconnect() { |
- connection_->Disconnect(); |
+void ClientSession::InjectKeyEvent(const protocol::KeyEvent* event, |
+ Task* done) { |
+ if (authenticated_) { |
+ input_stub_->InjectKeyEvent(event, done); |
+ return; |
+ } |
+ done->Run(); |
garykac
2011/03/30 20:04:03
nit: The
media::AutoTaskRunner task_runner(done)
simonmorris
2011/03/31 11:14:00
Done.
|
+ delete done; |
+} |
+ |
+void ClientSession::InjectMouseEvent(const protocol::MouseEvent* event, |
+ Task* done) { |
+ if (authenticated_) { |
+ input_stub_->InjectMouseEvent(event, done); |
+ return; |
+ } |
+ done->Run(); |
garykac
2011/03/30 20:04:03
nit: AutoTaskRunner
Wez
2011/03/30 20:24:57
As above, it's not valid for the client to send in
simonmorris
2011/03/31 11:14:00
Done.
simonmorris
2011/03/31 11:14:00
Could be good, in another CL.
|
+ delete done; |
} |
-protocol::ConnectionToClient* ClientSession::connection() const { |
- return connection_.get(); |
+void ClientSession::Disconnect() { |
+ connection_->Disconnect(); |
+ authenticated_ = false; |
} |
} // namespace remoting |