Index: remoting/host/client_session.cc |
diff --git a/remoting/host/client_session.cc b/remoting/host/client_session.cc |
index 72cd5ba518fe202209ae9a22d4e33dc5eb8fc141..003631f0a8f2671e9c8d4656041351931545705a 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" |
Alpha Left Google
2011/03/28 16:22:26
do you mean base/callback.h?
simonmorris
2011/03/29 17:07:51
I wanted media/base/callback.h for AutoTaskRunner.
|
#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<UserAuthenticator*(void)>& 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; |
+ } |
} |
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,37 @@ void ClientSession::BeginSessionRequest( |
delete done; |
} |
+void ClientSession::InjectKeyEvent(const protocol::KeyEvent* event, |
+ Task* done) { |
+ if (authenticated_) { |
+ input_stub_->InjectKeyEvent(event, done); |
+ return; |
+ } |
+ done->Run(); |
+ delete done; |
+} |
+ |
+void ClientSession::InjectMouseEvent(const protocol::MouseEvent* event, |
+ Task* done) { |
+ if (authenticated_) { |
+ input_stub_->InjectMouseEvent(event, done); |
+ return; |
+ } |
+ done->Run(); |
+ delete done; |
+} |
+ |
void ClientSession::Disconnect() { |
connection_->Disconnect(); |
+ authenticated_ = false; |
} |
protocol::ConnectionToClient* ClientSession::connection() const { |
return connection_.get(); |
} |
+bool ClientSession::authenticated() const { |
+ return authenticated_; |
+} |
+ |
} // namespace remoting |