From 1b273ed0e344e5f82e48c3d7158b4eb683b67288 Mon Sep 17 00:00:00 2001 From: Joshua Duong Date: Tue, 24 Mar 2020 09:50:59 -0700 Subject: [PATCH] Pass the os handle to the tls connection. This fixes the tls connection failure on Windows. Bug: 150719467 Test: 'adb pair', 'adb connect' on Windows host machine. Test: atest adb_tls_connection_test Change-Id: I54b8945543ad8b430510fa51dd7bea64a119454f --- adb/client/pairing/pairing_client.cpp | 7 ++++++- adb/pairing_connection/pairing_connection.cpp | 2 +- adb/transport.cpp | 8 +++++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/adb/client/pairing/pairing_client.cpp b/adb/client/pairing/pairing_client.cpp index 2f878bf04..04bbcebd4 100644 --- a/adb/client/pairing/pairing_client.cpp +++ b/adb/client/pairing/pairing_client.cpp @@ -141,7 +141,12 @@ bool PairingClientImpl::StartConnection() { cert_.size(), priv_key_.data(), priv_key_.size())); CHECK(connection_); - if (!pairing_connection_start(connection_.get(), fd.release(), OnPairingResult, this)) { +#ifdef _WIN32 + int osh = cast_handle_to_int(adb_get_os_handle(fd.release())); +#else + int osh = adb_get_os_handle(fd.release()); +#endif + if (!pairing_connection_start(connection_.get(), osh, OnPairingResult, this)) { LOG(ERROR) << "PairingClient failed to start the PairingConnection"; state_ = State::Stopped; return false; diff --git a/adb/pairing_connection/pairing_connection.cpp b/adb/pairing_connection/pairing_connection.cpp index a26a6b4d2..ffe49a91e 100644 --- a/adb/pairing_connection/pairing_connection.cpp +++ b/adb/pairing_connection/pairing_connection.cpp @@ -278,13 +278,13 @@ bool PairingConnectionCtx::Start(int fd, ResultCallback cb, void* opaque) { if (fd < 0) { return false; } + fd_.reset(fd); State expected = State::Ready; if (!state_.compare_exchange_strong(expected, State::ExchangingMsgs)) { return false; } - fd_.reset(fd); cb_ = cb; opaque_ = opaque; diff --git a/adb/transport.cpp b/adb/transport.cpp index 447a8fedf..be440e2e6 100644 --- a/adb/transport.cpp +++ b/adb/transport.cpp @@ -498,12 +498,18 @@ bool FdConnection::DoTlsHandshake(RSA* key, std::string* auth_key) { auto x509 = GenerateX509Certificate(evp_pkey.get()); auto x509_str = X509ToPEMString(x509.get()); auto evp_str = Key::ToPEMString(evp_pkey.get()); +#ifdef _WIN32 + int osh = cast_handle_to_int(adb_get_os_handle(fd_)); +#else + int osh = adb_get_os_handle(fd_); +#endif + #if ADB_HOST tls_ = TlsConnection::Create(TlsConnection::Role::Client, #else tls_ = TlsConnection::Create(TlsConnection::Role::Server, #endif - x509_str, evp_str, fd_); + x509_str, evp_str, osh); CHECK(tls_); #if ADB_HOST // TLS 1.3 gives the client no message if the server rejected the