Index: remoting/ios/bridge/client_instance.cc |
diff --git a/remoting/ios/bridge/client_instance.cc b/remoting/ios/bridge/client_instance.cc |
index 45f0b3fc97b47c671a158591d83dd693e43816f7..5a499228d305376becf92c8a0cf507eab6f5d2da 100644 |
--- a/remoting/ios/bridge/client_instance.cc |
+++ b/remoting/ios/bridge/client_instance.cc |
@@ -15,6 +15,7 @@ |
#include "remoting/jingle_glue/chromium_port_allocator.h" |
#include "remoting/protocol/host_stub.h" |
#include "remoting/protocol/libjingle_transport_factory.h" |
+#include "remoting/protocol/negotiating_client_authenticator.h" |
namespace { |
const char* const kXmppServer = "talk.google.com"; |
@@ -34,8 +35,10 @@ ClientInstance::ClientInstance(const base::WeakPtr<ClientProxy>& proxy, |
const std::string& host_pubkey, |
const std::string& pairing_id, |
const std::string& pairing_secret) |
- : proxyToClient_(proxy), host_id_(host_id), create_pairing_(false) { |
- |
+ : proxyToClient_(proxy), |
+ host_id_(host_id), |
+ host_jid_(host_jid), |
+ create_pairing_(false) { |
if (!base::MessageLoop::current()) { |
VLOG(1) << "Starting main message loop"; |
ui_loop_ = new base::MessageLoopForUI(); |
@@ -71,18 +74,24 @@ ClientInstance::ClientInstance(const base::WeakPtr<ClientProxy>& proxy, |
xmpp_config_.auth_token = auth_token; |
xmpp_config_.auth_service = "oauth2"; |
- // Initialize ClientConfig. |
- client_config_.host_jid = host_jid; |
- client_config_.host_public_key = host_pubkey; |
- client_config_.authentication_tag = host_id_; |
- client_config_.client_pairing_id = pairing_id; |
- client_config_.client_paired_secret = pairing_secret; |
- client_config_.authentication_methods.push_back( |
- protocol::AuthenticationMethod::FromString("spake2_pair")); |
- client_config_.authentication_methods.push_back( |
- protocol::AuthenticationMethod::FromString("spake2_hmac")); |
- client_config_.authentication_methods.push_back( |
- protocol::AuthenticationMethod::FromString("spake2_plain")); |
+ // Initialize |authenticator_|. |
+ scoped_ptr<protocol::ThirdPartyClientAuthenticator::TokenFetcher> |
+ token_fetcher(new TokenFetcherProxy( |
+ base::Bind(&ChromotingJniInstance::FetchThirdPartyToken, |
+ weak_factory_.GetWeakPtr()), |
+ host_pubkey)); |
+ |
+ std::vector<protocol::AuthenticationMethod> auth_methods; |
+ auth_methods.push_back(protocol::AuthenticationMethod::Spake2Pair()); |
+ auth_methods.push_back(protocol::AuthenticationMethod::Spake2( |
+ protocol::AuthenticationMethod::HMAC_SHA256)); |
+ auth_methods.push_back(protocol::AuthenticationMethod::Spake2( |
+ protocol::AuthenticationMethod::NONE)); |
+ |
+ authenticator_.reset(new protocol::NegotiatingClientAuthenticator( |
+ pairing_id, pairing_secret, host_id_, |
+ base::Bind(&ClientInstance::FetchSecret, this), |
+ token_fetcher.Pass(), auth_methods)); |
} |
ClientInstance::~ClientInstance() {} |
@@ -90,10 +99,6 @@ ClientInstance::~ClientInstance() {} |
void ClientInstance::Start() { |
DCHECK(ui_task_runner_->BelongsToCurrentThread()); |
- // Creates a reference to |this|, so don't want to bind during constructor |
- client_config_.fetch_secret_callback = |
- base::Bind(&ClientInstance::FetchSecret, this); |
- |
view_.reset(new FrameConsumerBridge( |
base::Bind(&ClientProxy::RedrawCanvas, proxyToClient_))); |
@@ -119,7 +124,6 @@ void ClientInstance::Start() { |
void ClientInstance::Cleanup() { |
DCHECK(ui_task_runner_->BelongsToCurrentThread()); |
- client_config_.fetch_secret_callback.Reset(); // Release ref to this |
// |view_| must be destroyed on the UI thread before the producer is gone. |
view_.reset(); |
@@ -149,14 +153,9 @@ void ClientInstance::FetchSecret( |
pin_callback_ = callback; |
if (proxyToClient_) { |
- if (!client_config_.client_pairing_id.empty()) { |
- // We attempted to connect using an existing pairing that was rejected. |
- // Unless we forget about the stale credentials, we'll continue trying |
- // them. |
- VLOG(1) << "Deleting rejected pairing credentials"; |
- |
- proxyToClient_->CommitPairingCredentials(host_id_, "", ""); |
- } |
+ // Delete pairing credentials if they exist. |
+ proxyToClient_->CommitPairingCredentials(host_id_, "", ""); |
+ |
proxyToClient_->DisplayAuthenticationPrompt(pairable); |
} |
} |
@@ -229,7 +228,7 @@ void ClientInstance::PerformMouseAction( |
if (mButton != protocol::MouseEvent::BUTTON_UNDEFINED) |
action.set_button_down(button_down); |
- connection_->input_stub()->InjectMouseEvent(action); |
+ client_->input_stub()->InjectMouseEvent(action); |
} |
void ClientInstance::PerformKeyboardAction(int key_code, bool key_down) { |
@@ -244,7 +243,7 @@ void ClientInstance::PerformKeyboardAction(int key_code, bool key_down) { |
protocol::KeyEvent action; |
action.set_usb_keycode(key_code); |
action.set_pressed(key_down); |
- connection_->input_stub()->InjectKeyEvent(action); |
+ client_->input_stub()->InjectKeyEvent(action); |
} |
void ClientInstance::OnConnectionState(protocol::ConnectionToHost::State state, |
@@ -261,7 +260,7 @@ void ClientInstance::OnConnectionState(protocol::ConnectionToHost::State state, |
// VLOG(1) << "Attempting to pair with host"; |
// protocol::PairingRequest request; |
// request.set_client_name("iOS"); |
- // connection_->host_stub()->RequestPairing(request); |
+ // client_->host_stub()->RequestPairing(request); |
// } |
if (proxyToClient_) |
@@ -279,10 +278,6 @@ void ClientInstance::OnRouteChanged(const std::string& channel_name, |
} |
void ClientInstance::SetCapabilities(const std::string& capabilities) { |
- DCHECK(video_renderer_); |
- DCHECK(connection_); |
- DCHECK(connection_->state() == protocol::ConnectionToHost::CONNECTED); |
- video_renderer_->Initialize(connection_->config()); |
} |
void ClientInstance::SetPairingResponse( |
@@ -312,12 +307,6 @@ protocol::ClipboardStub* ClientInstance::GetClipboardStub() { return this; } |
// Returning interface of protocol::CursorShapeStub |
protocol::CursorShapeStub* ClientInstance::GetCursorShapeStub() { return this; } |
-scoped_ptr<protocol::ThirdPartyClientAuthenticator::TokenFetcher> |
-ClientInstance::GetTokenFetcher(const std::string& host_public_key) { |
- // Returns null when third-party authentication is unsupported. |
- return scoped_ptr<protocol::ThirdPartyClientAuthenticator::TokenFetcher>(); |
-} |
- |
void ClientInstance::InjectClipboardEvent( |
const protocol::ClipboardEvent& event) { |
NOTIMPLEMENTED(); |
@@ -347,11 +336,7 @@ void ClientInstance::ConnectToHostOnNetworkThread( |
view_->Initialize(video_renderer_.get()); |
- connection_.reset(new protocol::ConnectionToHost(true)); |
- |
- client_.reset(new ChromotingClient(client_config_, |
- client_context_.get(), |
- connection_.get(), |
+ client_.reset(new ChromotingClient(client_context_.get(), |
this, |
video_renderer_.get(), |
scoped_ptr<AudioPlayer>())); |
@@ -372,7 +357,8 @@ void ClientInstance::ConnectToHostOnNetworkThread( |
port_allocator.PassAs<cricket::HttpPortAllocatorBase>(), |
network_settings)); |
- client_->Start(signaling_.get(), transport_factory.Pass()); |
+ client_->Start(signaling_.get(), authenticator_.Pass(), |
+ transport_factory.Pass(), host_jid_, std::string()); |
if (!done.is_null()) |
done.Run(); |
@@ -385,7 +371,6 @@ void ClientInstance::DisconnectFromHostOnNetworkThread( |
host_id_.clear(); |
// |client_| must be torn down before |signaling_|. |
- connection_.reset(); |
client_.reset(); |
signaling_.reset(); |
video_renderer_.reset(); |