24#include <condition_variable>
34#include <unordered_map>
39#include <openssl/rsa.h>
116 virtual bool Write(std::unique_ptr<apacket> packet) = 0;
125 virtual void Reset();
130 *
error =
"transport type doesn't support attach";
135 *
error =
"transport type doesn't support detach";
139 std::string
Serial()
const;
179 virtual bool Write(std::unique_ptr<apacket> packet)
override final;
181 virtual bool Start()
override final;
182 virtual void Stop()
override final;
183 virtual bool DoTlsHandshake(RSA* key, std::string* auth_key)
override final;
185 virtual void Reset()
override final;
198 std::condition_variable
cv_;
209 bool DoTlsHandshake(RSA* key, std::string* auth_key)
override final;
211 void Close()
override;
219 std::unique_ptr<adb::tls::TlsConnection>
tls_;
246 std::condition_variable
cv_;
275 connection_(nullptr),
278 connection_waitable_ = std::make_shared<ConnectionWaitable>();
301 std::lock_guard<std::mutex> lock(
mutex_);
309 void SetUsbHandle(
usb_handle* h) { usb_handle_ = h; }
310 usb_handle* GetUsbHandle() {
return usb_handle_; }
313 void UpdateReverseConfig(std::string_view service_addr);
314 bool IsReverseConfigured(
const std::string& local_addr);
345 std::shared_ptr<RSA> Key();
346 std::shared_ptr<RSA> NextKey();
361 bool has_feature(
const std::string& feature)
const;
368 void SetFeatures(
const std::string& features_string);
375 bool Attach(std::string*
error);
376 bool Detach(std::string*
error);
393 bool MatchesTarget(
const std::string& target)
const;
397 void SetConnectionEstablished(
bool success);
400 std::shared_ptr<ConnectionWaitable> connection_waitable() {
return connection_waitable_; }
420 std::deque<std::shared_ptr<RSA>> keys_;
426 std::shared_ptr<ConnectionWaitable> connection_waitable_;
448 std::unordered_map<std::string, std::string> reverse_forwards_;
475 bool* is_ambiguous, std::string* error_out,
476 bool accept_any_state =
false);
490void kick_all_tcp_devices();
506void register_libusb_transport(std::shared_ptr<Connection> connection,
const char*
serial,
507 const char* devpath,
unsigned writable);
509void register_usb_transport(
usb_handle* h,
const char*
serial,
const char* devpath,
513void unregister_usb_transport(
usb_handle* usb);
517void connect_device(
const std::string& address, std::string* response);
525 int*
error =
nullptr);
535enum TrackerOutputType { SHORT_TEXT, LONG_TEXT, PROTOBUF, TEXT_PROTOBUF };
536asocket* create_device_tracker(TrackerOutputType
type);
537std::string list_transports(TrackerOutputType
type);
538bool burst_mode_enabled();
constexpr size_t MAX_PAYLOAD
Definition: adb.h:34
#define A_STLS_VERSION
Definition: adb.h:62
#define A_VERSION_MIN
Definition: adb.h:56
#define TOKEN_SIZE
Definition: adb.h:103
TransportType
Definition: adb.h:96
@ kTransportLocal
Definition: adb.h:98
@ kTransportAny
Definition: adb.h:99
ConnectionState
Definition: adb.h:105
@ kCsOffline
Definition: adb.h:113
uint64_t TransportId
Definition: adb.h:73
const char *const kFeatureStat2
Definition: transport.cpp:83
bool transport_server_owns_device(std::string_view serial)
const char *const kFeatureCmd
Definition: transport.cpp:82
int init_socket_transport(atransport *t, unique_fd s, int port, bool is_emulator)
Definition: transport_emulator.cpp:285
void init_mdns_transport_discovery()
Definition: transport_mdns.cpp:230
const char *const kFeatureTrackApp
Definition: transport.cpp:93
void kick_transport(atransport *t, bool reset=false)
Definition: transport.cpp:590
const char *const kFeatureSendRecv2
Definition: transport.cpp:94
const char * transport_get_one_device()
const char *const kFeatureFixedPushMkdir
Definition: transport.cpp:88
void kick_all_tcp_tls_transports()
Definition: transport.cpp:815
const char *const kFeatureDevRaw
Definition: transport.cpp:103
void close_usb_devices(bool reset=false)
const char *const kFeatureRemountShell
Definition: transport.cpp:92
bool check_header(apacket *p, atransport *t)
Definition: transport.cpp:1705
std::string FeatureSetToString(const FeatureSet &features)
Definition: transport.cpp:1250
const char *const kFeatureApex
Definition: transport.cpp:87
std::vector< std::string > FeatureSet
Definition: transport.h:48
const char *const kFeatureFixedPushSymlinkTimestamp
Definition: transport.cpp:90
const FeatureSet & supported_features()
Definition: transport.cpp:1203
const char *const kFeatureSendRecv2LZ4
Definition: transport.cpp:96
bool iterate_transports(std::function< bool(const atransport *)> fn)
bool CanUseFeature(const FeatureSet &feature_set, const std::string &feature)
Definition: transport.cpp:1267
const char *const kFeatureShell2
Definition: transport.cpp:81
void kick_all_transports_by_auth_key(std::string_view auth_key)
Definition: transport.cpp:825
atransport * acquire_one_transport(TransportType type, const char *serial, TransportId transport_id, bool *is_ambiguous, std::string *error_out, bool accept_any_state=false)
const char *const kFeatureLs2
Definition: transport.cpp:84
const char *const kFeatureSendRecv2Zstd
Definition: transport.cpp:97
void kick_all_transports()
Definition: transport.cpp:804
FeatureSet StringToFeatureSet(const std::string &features_string)
Definition: transport.cpp:1254
void connect_device(const std::string &address, std::string *response)
Definition: transport_emulator.cpp:82
void transport_set_one_device(const char *adb_one_device)
ReconnectResult
Definition: transport.h:251
void init_reconnect_handler()
void register_transport(atransport *transport)
Definition: transport.cpp:835
const char *const kFeatureLibusb
Definition: transport.cpp:85
bool register_socket_transport(unique_fd s, std::string serial, int port, bool is_emulator, atransport::ReconnectCallback reconnect, bool use_tls, int *error=nullptr)
Definition: transport.cpp:1510
const char *const kFeatureAbbExec
Definition: transport.cpp:91
TransportId NextTransportId()
Definition: transport.cpp:285
const char *const kFeatureSendRecv2Brotli
Definition: transport.cpp:95
const char *const kFeatureSendRecv2DryRunSend
Definition: transport.cpp:98
const char *const kFeaturePushSync
Definition: transport.cpp:86
void send_packet(apacket *p, atransport *t)
Definition: transport.cpp:565
const char *const kFeatureDelayedAck
Definition: transport.cpp:99
const char *const kFeatureAbb
Definition: transport.cpp:89
void update_transports()
Definition: transport.cpp:733
Definition: transport.h:225
~ConnectionWaitable()=default
DISALLOW_COPY_AND_ASSIGN(ConnectionWaitable)
std::condition_variable cv_
Definition: transport.h:246
void SetConnectionEstablished(bool success)
bool connection_established_ GUARDED_BY(mutex_)
std::mutex mutex_
Definition: transport.h:245
ConnectionWaitable()=default
bool WaitForConnection(std::chrono::milliseconds timeout)
bool connection_established_ready_ GUARDED_BY(mutex_)
Definition: unique_fd.h:61
Definition: transport.h:261
void Kick()
Definition: transport.cpp:1070
std::string device
Definition: transport.h:326
~atransport()
Definition: transport.cpp:1052
std::shared_ptr< Connection > connection()
Definition: transport.h:300
atransport(TransportType t, ConnectionState state=kCsOffline)
Definition: transport.h:286
size_t get_max_payload() const
Definition: transport.cpp:1191
size_t failed_auth_attempts
Definition: transport.h:351
bool online
Definition: transport.h:319
int tls_version
Definition: transport.h:332
std::atomic< ConnectionState > connection_state_
Definition: transport.h:418
DISALLOW_COPY_AND_ASSIGN(atransport)
bool delayed_ack_
Definition: transport.h:442
void AddDisconnect(adisconnect *disconnect)
Definition: transport.cpp:1280
const TransportId id
Definition: transport.h:317
char token[TOKEN_SIZE]
Definition: transport.h:350
std::string product
Definition: transport.h:324
std::shared_ptr< Connection > connection_ GUARDED_BY(mutex_)
TransportType type
Definition: transport.h:320
void update_version(int version, size_t payload)
Definition: transport.cpp:1178
bool HandleRead(std::unique_ptr< apacket > p)
Definition: transport.cpp:1154
bool has_feature(const std::string &feature) const
Definition: transport.cpp:1271
std::mutex mutex_
Definition: transport.h:440
bool SupportsDelayedAck() const
Definition: transport.h:363
atransport(TransportType t, ReconnectCallback reconnect, ConnectionState state)
Definition: transport.h:270
std::string serial
Definition: transport.h:323
std::string serial_name() const
Definition: transport.h:353
std::string devpath
Definition: transport.h:327
void SetFeatures(const std::string &features_string)
Definition: transport.cpp:1275
std::list< adisconnect * > disconnects_
Definition: transport.h:416
const FeatureSet & features() const
Definition: transport.h:359
std::string model
Definition: transport.h:325
bool use_tls
Definition: transport.h:331
std::function< ReconnectResult(atransport *)> ReconnectCallback
Definition: transport.h:268
int get_tls_version() const
Definition: transport.cpp:1187
std::string auth_key
Definition: transport.h:337
void SetConnection(std::shared_ptr< Connection > connection)
Definition: transport.cpp:1149
bool kicked() const
Definition: transport.h:293
int protocol_version
Definition: transport.h:412
void SetConnectionState(ConnectionState state)
Definition: transport.cpp:1081
void HandleError(const std::string &error)
Definition: transport.cpp:1170
ConnectionState GetConnectionState() const
Definition: transport.cpp:1077
int get_protocol_version() const
Definition: transport.cpp:1183
FeatureSet features_
Definition: transport.h:411
void RemoveDisconnect(adisconnect *disconnect)
Definition: transport.cpp:1284
void RunDisconnects()
Definition: transport.cpp:1288
int Write(apacket *p)
Definition: transport.cpp:1059
size_t max_payload
Definition: transport.h:413
ReconnectCallback reconnect_
Definition: transport.h:438
void Reset()
Definition: transport.cpp:1063
std::optional< uint64_t > auth_id
Definition: transport.h:338
std::atomic< bool > kicked_
Definition: transport.h:407
bool IsTcpDevice() const
Definition: transport.h:341
static const char * serial
Definition: fastboot.cpp:96
#define error(format, args...)
Definition: fec_private.h:201
Definition: logging.h:464
uint32_t payload
Definition: pairing_connection.cpp:2
uint8_t version
Definition: pairing_connection.cpp:0
uint8_t type
Definition: pairing_connection.h:0
Definition: transport.h:174
virtual bool DoTlsHandshake(RSA *key, std::string *auth_key) override final
Definition: transport.cpp:372
void StartReadThread() REQUIRES(mutex_)
Definition: transport.cpp:343
std::mutex mutex_
Definition: transport.h:197
bool started_ GUARDED_BY(mutex_)
virtual void Reset() override final
Definition: transport.cpp:382
std::deque< std::unique_ptr< apacket > > write_queue_ GUARDED_BY(mutex_)
virtual ~BlockingConnectionAdapter()
Definition: transport.cpp:302
std::thread write_thread_ GUARDED_BY(mutex_)
bool stopped_ GUARDED_BY(mutex_)
virtual bool Start() override final
Definition: transport.cpp:307
virtual bool Write(std::unique_ptr< apacket > packet) override final
Definition: transport.cpp:439
std::unique_ptr< BlockingConnection > underlying_
Definition: transport.h:192
virtual void Stop() override final
Definition: transport.cpp:401
BlockingConnectionAdapter(std::unique_ptr< BlockingConnection > connection)
Definition: transport.cpp:299
std::thread read_thread_ GUARDED_BY(mutex_)
std::once_flag error_flag_
Definition: transport.h:200
std::condition_variable cv_
Definition: transport.h:198
Definition: transport.h:150
virtual ~BlockingConnection()=default
virtual bool DoTlsHandshake(RSA *key, std::string *auth_key=nullptr)=0
BlockingConnection(BlockingConnection &&move)=delete
virtual bool Read(apacket *packet)=0
virtual bool Write(apacket *packet)=0
BlockingConnection(const BlockingConnection ©)=delete
BlockingConnection()=default
Definition: transport.h:110
virtual bool Detach(std::string *error)
Definition: transport.h:134
atransport * transport_
Definition: transport.h:141
virtual uint64_t MaxSpeedMbps()
Definition: transport.h:146
virtual bool Write(std::unique_ptr< apacket > packet)=0
static std::unique_ptr< Connection > FromFd(unique_fd fd)
Definition: transport_fd.cpp:240
virtual bool DoTlsHandshake(RSA *key, std::string *auth_key=nullptr)=0
virtual uint64_t NegotiatedSpeedMbps()
Definition: transport.h:145
void SetTransport(atransport *transport)
Definition: transport.h:114
virtual bool SupportsDetach() const
Definition: transport.h:127
std::string Serial() const
Definition: transport.cpp:295
virtual bool Attach(std::string *error)
Definition: transport.h:129
virtual void Reset()
Definition: transport.cpp:290
virtual ~Connection()=default
Definition: transport.h:203
bool Write(apacket *packet) override final
Definition: transport.cpp:498
void Close() override
Definition: transport.cpp:560
unique_fd fd_
Definition: transport.h:218
virtual void Reset() override final
Definition: transport.h:212
bool DispatchWrite(void *buf, size_t len)
Definition: transport.cpp:465
bool Read(apacket *packet) override final
Definition: transport.cpp:477
FdConnection(unique_fd fd)
Definition: transport.cpp:449
bool DoTlsHandshake(RSA *key, std::string *auth_key) override final
Definition: transport.cpp:514
std::unique_ptr< adb::tls::TlsConnection > tls_
Definition: transport.h:219
bool DispatchRead(void *buf, size_t len)
Definition: transport.cpp:453
~FdConnection()
Definition: transport.cpp:451
Definition: usb_linux.cpp:60
#define REQUIRES(...)
Definition: thread_annotations.h:50
void init_usb_transport(atransport *t, usb_handle *h)
Definition: transport_usb.cpp:163