Index: remoting/client/jni/chromoting_jni_instance.cc |
diff --git a/remoting/client/jni/chromoting_jni_instance.cc b/remoting/client/jni/chromoting_jni_instance.cc |
index 54b85888dfc6c692b3280d399075bb53bc4010b8..8b63f3d240c3def8bf14ad89b99dbfc52dc0a03d 100644 |
--- a/remoting/client/jni/chromoting_jni_instance.cc |
+++ b/remoting/client/jni/chromoting_jni_instance.cc |
@@ -23,6 +23,7 @@ |
#include "remoting/jingle_glue/server_log_entry.h" |
#include "remoting/protocol/host_stub.h" |
#include "remoting/protocol/libjingle_transport_factory.h" |
+#include "remoting/protocol/negotiating_client_authenticator.h" |
namespace remoting { |
@@ -48,6 +49,7 @@ ChromotingJniInstance::ChromotingJniInstance(ChromotingJniRuntime* jni_runtime, |
const char* pairing_secret) |
: jni_runtime_(jni_runtime), |
host_id_(host_id), |
+ host_jid_(host_jid), |
create_pairing_(false), |
stats_logging_enabled_(false), |
weak_factory_(this) { |
@@ -61,23 +63,24 @@ ChromotingJniInstance::ChromotingJniInstance(ChromotingJniRuntime* jni_runtime, |
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_.fetch_secret_callback = |
- base::Bind(&ChromotingJniInstance::FetchSecret, this); |
- client_config_.authentication_tag = host_id_; |
+ // Initialize |authenticator_|. |
+ scoped_ptr<protocol::ThirdPartyClientAuthenticator::TokenFetcher> |
+ token_fetcher(new TokenFetcherProxy( |
+ base::Bind(&ChromotingJniInstance::FetchThirdPartyToken, |
+ weak_factory_.GetWeakPtr()), |
+ host_pubkey)); |
- client_config_.client_pairing_id = pairing_id; |
- client_config_.client_paired_secret = pairing_secret; |
+ 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)); |
- 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")); |
+ authenticator_.reset(new protocol::NegotiatingClientAuthenticator( |
+ pairing_id, pairing_secret, host_id_, |
+ base::Bind(&ChromotingJniInstance::FetchSecret, this), |
+ token_fetcher.Pass(), auth_methods)); |
// Post a task to start connection |
jni_runtime_->display_task_runner()->PostTask( |
@@ -193,7 +196,7 @@ void ChromotingJniInstance::SendMouseEvent( |
if (button != protocol::MouseEvent::BUTTON_UNDEFINED) |
event.set_button_down(button_down); |
- connection_->input_stub()->InjectMouseEvent(event); |
+ client_->input_stub()->InjectMouseEvent(event); |
} |
void ChromotingJniInstance::SendMouseWheelEvent(int delta_x, int delta_y) { |
@@ -208,7 +211,7 @@ void ChromotingJniInstance::SendMouseWheelEvent(int delta_x, int delta_y) { |
protocol::MouseEvent event; |
event.set_wheel_delta_x(delta_x); |
event.set_wheel_delta_y(delta_y); |
- connection_->input_stub()->InjectMouseEvent(event); |
+ client_->input_stub()->InjectMouseEvent(event); |
} |
bool ChromotingJniInstance::SendKeyEvent(int key_code, bool key_down) { |
@@ -232,7 +235,7 @@ void ChromotingJniInstance::SendTextEvent(const std::string& text) { |
protocol::TextEvent event; |
event.set_text(text); |
- connection_->input_stub()->InjectTextEvent(event); |
+ client_->input_stub()->InjectTextEvent(event); |
} |
void ChromotingJniInstance::RecordPaintTime(int64 paint_time_ms) { |
@@ -260,7 +263,7 @@ void ChromotingJniInstance::OnConnectionState( |
protocol::PairingRequest request; |
DCHECK(!device_name_.empty()); |
request.set_client_name(device_name_); |
- connection_->host_stub()->RequestPairing(request); |
+ client_->host_stub()->RequestPairing(request); |
} |
jni_runtime_->ui_task_runner()->PostTask( |
@@ -310,15 +313,6 @@ protocol::CursorShapeStub* ChromotingJniInstance::GetCursorShapeStub() { |
return this; |
} |
-scoped_ptr<protocol::ThirdPartyClientAuthenticator::TokenFetcher> |
- ChromotingJniInstance::GetTokenFetcher(const std::string& host_public_key) { |
- return scoped_ptr<protocol::ThirdPartyClientAuthenticator::TokenFetcher>( |
- new TokenFetcherProxy( |
- base::Bind(&ChromotingJniInstance::FetchThirdPartyToken, |
- weak_factory_.GetWeakPtr()), |
- host_public_key)); |
-} |
- |
void ChromotingJniInstance::InjectClipboardEvent( |
const protocol::ClipboardEvent& event) { |
NOTIMPLEMENTED(); |
@@ -360,8 +354,6 @@ void ChromotingJniInstance::ConnectToHostOnNetworkThread() { |
jni_runtime_->network_task_runner().get())); |
client_context_->Start(); |
- connection_.reset(new protocol::ConnectionToHost(true)); |
- |
SoftwareVideoRenderer* renderer = |
new SoftwareVideoRenderer(client_context_->main_task_runner(), |
client_context_->decode_task_runner(), |
@@ -369,10 +361,10 @@ void ChromotingJniInstance::ConnectToHostOnNetworkThread() { |
view_->set_frame_producer(renderer); |
video_renderer_.reset(renderer); |
- client_.reset(new ChromotingClient( |
- client_config_, client_context_.get(), connection_.get(), |
- this, video_renderer_.get(), scoped_ptr<AudioPlayer>())); |
- |
+ client_.reset(new ChromotingClient(client_context_.get(), |
+ this, |
+ video_renderer_.get(), |
+ scoped_ptr<AudioPlayer>())); |
signaling_.reset(new XmppSignalStrategy( |
net::ClientSocketFactory::GetDefaultFactory(), |
@@ -396,7 +388,8 @@ void ChromotingJniInstance::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()); |
} |
void ChromotingJniInstance::DisconnectFromHostOnNetworkThread() { |
@@ -407,7 +400,7 @@ void ChromotingJniInstance::DisconnectFromHostOnNetworkThread() { |
stats_logging_enabled_ = false; |
// |client_| must be torn down before |signaling_|. |
- connection_.reset(); |
+ client_.reset(); |
client_.reset(); |
client_status_logger_.reset(); |
} |
@@ -422,11 +415,8 @@ void ChromotingJniInstance::FetchSecret( |
return; |
} |
- 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. |
- jni_runtime_->CommitPairingCredentials(host_id_, "", ""); |
- } |
+ // Delete pairing credentials if they exist. |
+ jni_runtime_->CommitPairingCredentials(host_id_, "", ""); |
pin_callback_ = callback; |
jni_runtime_->DisplayAuthenticationPrompt(pairable); |
@@ -456,7 +446,7 @@ void ChromotingJniInstance::SendKeyEventInternal(int usb_key_code, |
protocol::KeyEvent event; |
event.set_usb_keycode(usb_key_code); |
event.set_pressed(key_down); |
- connection_->input_stub()->InjectKeyEvent(event); |
+ client_->input_stub()->InjectKeyEvent(event); |
} |
void ChromotingJniInstance::EnableStatsLogging(bool enabled) { |