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 "llvm/Support/Error.h"
14#include <chrono>
15#include <functional>
16#include <list>
17#include <memory>
18#include <string>
19#include <vector>
20
21namespace lldb_private {
22
23class FileSpec;
24
26
27class AdbClient {
28public:
33
34 using DeviceIDList = std::list<std::string>;
35
36 /// Resolves a device identifier to its canonical form.
37 ///
38 /// \param device_id the device identifier to resolve (may be empty).
39 ///
40 /// \returns Expected<std::string> containing the resolved device ID on
41 /// success, or an Error if the device ID cannot be resolved or
42 /// is ambiguous.
43 static llvm::Expected<std::string> ResolveDeviceID(llvm::StringRef device_id);
44
45 AdbClient();
46 explicit AdbClient(llvm::StringRef device_id);
47
48 virtual ~AdbClient();
49
50 llvm::StringRef GetDeviceID() const;
51
52 Status SetPortForwarding(const uint16_t local_port,
53 const uint16_t remote_port);
54
55 Status SetPortForwarding(const uint16_t local_port,
56 llvm::StringRef remote_socket_name,
57 const UnixSocketNamespace socket_namespace);
58
59 Status DeletePortForwarding(const uint16_t local_port);
60
61 Status Shell(const char *command, std::chrono::milliseconds timeout,
62 std::string *output);
63
64 virtual Status ShellToFile(const char *command,
65 std::chrono::milliseconds timeout,
66 const FileSpec &output_file_spec);
67
69
70private:
71 Status SendDeviceMessage(llvm::StringRef packet);
72
73 Status ReadMessageStream(std::vector<char> &message,
74 std::chrono::milliseconds timeout);
75
76 Status internalShell(const char *command, std::chrono::milliseconds timeout,
77 std::vector<char> &output_buf);
78
79 std::string m_device_id;
80 std::unique_ptr<Connection> m_conn;
81};
82
84public:
85 explicit AdbSyncService(const std::string device_id);
86 virtual ~AdbSyncService();
88
89 virtual Status PullFile(const FileSpec &remote_file,
90 const FileSpec &local_file);
91 virtual Status PushFile(const FileSpec &local_file,
92 const FileSpec &remote_file);
93 virtual Status Stat(const FileSpec &remote_file, uint32_t &mode,
94 uint32_t &size, uint32_t &mtime);
95 virtual bool IsConnected() const;
96
97 llvm::StringRef GetDeviceId() const { return m_device_id; }
98
99private:
100 Status SendSyncRequest(const char *request_id, const uint32_t data_len,
101 const void *data);
102 Status ReadSyncHeader(std::string &response_id, uint32_t &data_len);
103 Status PullFileChunk(std::vector<char> &buffer, bool &eof);
104 Status PullFileImpl(const FileSpec &remote_file, const FileSpec &local_file);
105 Status PushFileImpl(const FileSpec &local_file, const FileSpec &remote_file);
106 Status StatImpl(const FileSpec &remote_file, uint32_t &mode, uint32_t &size,
107 uint32_t &mtime);
108 Status ExecuteCommand(const std::function<Status()> &cmd);
109
110 std::unique_ptr<Connection> m_conn;
111 std::string m_device_id;
112};
113
114} // namespace platform_android
115} // namespace lldb_private
116
117#endif // LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_ADBCLIENT_H
A file utility class.
Definition FileSpec.h:57
An error handling class.
Definition Status.h:118
std::list< std::string > DeviceIDList
Definition AdbClient.h:34
Status internalShell(const char *command, std::chrono::milliseconds timeout, std::vector< char > &output_buf)
Status DeletePortForwarding(const uint16_t local_port)
static llvm::Expected< std::string > ResolveDeviceID(llvm::StringRef device_id)
Resolves a device identifier to its canonical form.
Status SendDeviceMessage(llvm::StringRef packet)
Status Shell(const char *command, std::chrono::milliseconds timeout, std::string *output)
Status SetPortForwarding(const uint16_t local_port, const uint16_t remote_port)
virtual Status ShellToFile(const char *command, std::chrono::milliseconds timeout, const FileSpec &output_file_spec)
std::unique_ptr< Connection > m_conn
Definition AdbClient.h:80
Status ReadMessageStream(std::vector< char > &message, std::chrono::milliseconds timeout)
Status ExecuteCommand(const std::function< Status()> &cmd)
Status PushFileImpl(const FileSpec &local_file, const FileSpec &remote_file)
Status SendSyncRequest(const char *request_id, const uint32_t data_len, const void *data)
Status PullFileChunk(std::vector< char > &buffer, bool &eof)
virtual Status Stat(const FileSpec &remote_file, uint32_t &mode, uint32_t &size, uint32_t &mtime)
virtual Status PushFile(const FileSpec &local_file, const FileSpec &remote_file)
Status StatImpl(const FileSpec &remote_file, uint32_t &mode, uint32_t &size, uint32_t &mtime)
AdbSyncService(const std::string device_id)
virtual Status PullFile(const FileSpec &remote_file, const FileSpec &local_file)
std::unique_ptr< Connection > m_conn
Definition AdbClient.h:110
Status ReadSyncHeader(std::string &response_id, uint32_t &data_len)
Status PullFileImpl(const FileSpec &remote_file, const FileSpec &local_file)
A class that represents a running process on the host machine.