LLDB mainline
AdbClient.h
Go to the documentation of this file.
1//===-- AdbClient.h ---------------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_ADBCLIENT_H
10#define LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_ADBCLIENT_H
11
12#include "lldb/Utility/Status.h"
13#include <chrono>
14#include <functional>
15#include <list>
16#include <memory>
17#include <string>
18#include <vector>
19
20namespace lldb_private {
21
22class FileSpec;
23
24namespace platform_android {
25
26class AdbClient {
27public:
31 };
32
33 using DeviceIDList = std::list<std::string>;
34
36 friend class AdbClient;
37
38 public:
40
41 Status PullFile(const FileSpec &remote_file, const FileSpec &local_file);
42
43 Status PushFile(const FileSpec &local_file, const FileSpec &remote_file);
44
45 Status Stat(const FileSpec &remote_file, uint32_t &mode, uint32_t &size,
46 uint32_t &mtime);
47
48 bool IsConnected() const;
49
50 private:
51 explicit SyncService(std::unique_ptr<Connection> &&conn);
52
53 Status SendSyncRequest(const char *request_id, const uint32_t data_len,
54 const void *data);
55
56 Status ReadSyncHeader(std::string &response_id, uint32_t &data_len);
57
58 Status PullFileChunk(std::vector<char> &buffer, bool &eof);
59
60 Status ReadAllBytes(void *buffer, size_t size);
61
62 Status internalPullFile(const FileSpec &remote_file,
63 const FileSpec &local_file);
64
65 Status internalPushFile(const FileSpec &local_file,
66 const FileSpec &remote_file);
67
68 Status internalStat(const FileSpec &remote_file, uint32_t &mode,
69 uint32_t &size, uint32_t &mtime);
70
71 Status executeCommand(const std::function<Status()> &cmd);
72
73 std::unique_ptr<Connection> m_conn;
74 };
75
76 static Status CreateByDeviceID(const std::string &device_id, AdbClient &adb);
77
79 explicit AdbClient(const std::string &device_id);
80
82
83 const std::string &GetDeviceID() const;
84
85 Status GetDevices(DeviceIDList &device_list);
86
87 Status SetPortForwarding(const uint16_t local_port,
88 const uint16_t remote_port);
89
90 Status SetPortForwarding(const uint16_t local_port,
91 llvm::StringRef remote_socket_name,
92 const UnixSocketNamespace socket_namespace);
93
94 Status DeletePortForwarding(const uint16_t local_port);
95
96 Status Shell(const char *command, std::chrono::milliseconds timeout,
97 std::string *output);
98
99 Status ShellToFile(const char *command, std::chrono::milliseconds timeout,
100 const FileSpec &output_file_spec);
101
102 std::unique_ptr<SyncService> GetSyncService(Status &error);
103
105
106private:
107 Status Connect();
108
109 void SetDeviceID(const std::string &device_id);
110
111 Status SendMessage(const std::string &packet, const bool reconnect = true);
112
113 Status SendDeviceMessage(const std::string &packet);
114
115 Status ReadMessage(std::vector<char> &message);
116
117 Status ReadMessageStream(std::vector<char> &message,
118 std::chrono::milliseconds timeout);
119
120 Status GetResponseError(const char *response_id);
121
123
124 Status Sync();
125
127
128 Status internalShell(const char *command, std::chrono::milliseconds timeout,
129 std::vector<char> &output_buf);
130
131 Status ReadAllBytes(void *buffer, size_t size);
132
133 std::string m_device_id;
134 std::unique_ptr<Connection> m_conn;
135};
136
137} // namespace platform_android
138} // namespace lldb_private
139
140#endif // LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_ADBCLIENT_H
static llvm::raw_ostream & error(Stream &strm)
A file utility class.
Definition: FileSpec.h:56
An error handling class.
Definition: Status.h:44
Status internalPushFile(const FileSpec &local_file, const FileSpec &remote_file)
Definition: AdbClient.cpp:459
Status ReadAllBytes(void *buffer, size_t size)
Definition: AdbClient.cpp:646
Status SendSyncRequest(const char *request_id, const uint32_t data_len, const void *data)
Definition: AdbClient.cpp:584
Status executeCommand(const std::function< Status()> &cmd)
Definition: AdbClient.cpp:571
Status PushFile(const FileSpec &local_file, const FileSpec &remote_file)
Definition: AdbClient.cpp:549
Status PullFileChunk(std::vector< char > &buffer, bool &eof)
Definition: AdbClient.cpp:617
Status ReadSyncHeader(std::string &response_id, uint32_t &data_len)
Definition: AdbClient.cpp:602
Status PullFile(const FileSpec &remote_file, const FileSpec &local_file)
Definition: AdbClient.cpp:542
Status internalPullFile(const FileSpec &remote_file, const FileSpec &local_file)
Definition: AdbClient.cpp:426
Status Stat(const FileSpec &remote_file, uint32_t &mode, uint32_t &size, uint32_t &mtime)
Definition: AdbClient.cpp:556
Status internalStat(const FileSpec &remote_file, uint32_t &mode, uint32_t &size, uint32_t &mtime)
Definition: AdbClient.cpp:508
const std::string & GetDeviceID() const
Definition: AdbClient.cpp:127
void SetDeviceID(const std::string &device_id)
Definition: AdbClient.cpp:123
std::list< std::string > DeviceIDList
Definition: AdbClient.h:33
Status internalShell(const char *command, std::chrono::milliseconds timeout, std::vector< char > &output_buf)
Definition: AdbClient.cpp:349
std::unique_ptr< SyncService > GetSyncService(Status &error)
Definition: AdbClient.cpp:417
Status DeletePortForwarding(const uint16_t local_port)
Definition: AdbClient.cpp:201
static Status CreateByDeviceID(const std::string &device_id, AdbClient &adb)
Definition: AdbClient.cpp:91
Status Shell(const char *command, std::chrono::milliseconds timeout, std::string *output)
Definition: AdbClient.cpp:384
Status ReadAllBytes(void *buffer, size_t size)
Definition: AdbClient.cpp:345
Status SetPortForwarding(const uint16_t local_port, const uint16_t remote_port)
Definition: AdbClient.cpp:169
Status SendDeviceMessage(const std::string &packet)
Definition: AdbClient.cpp:234
Status ShellToFile(const char *command, std::chrono::milliseconds timeout, const FileSpec &output_file_spec)
Definition: AdbClient.cpp:396
Status GetResponseError(const char *response_id)
Definition: AdbClient.cpp:300
Status SendMessage(const std::string &packet, const bool reconnect=true)
Definition: AdbClient.cpp:212
Status ReadMessage(std::vector< char > &message)
Definition: AdbClient.cpp:240
Status GetDevices(DeviceIDList &device_list)
Definition: AdbClient.cpp:142
std::unique_ptr< Connection > m_conn
Definition: AdbClient.h:134
Status ReadMessageStream(std::vector< char > &message, std::chrono::milliseconds timeout)
Definition: AdbClient.cpp:261
A class that represents a running process on the host machine.
Definition: SBAttachInfo.h:14