]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - source/Plugins/Platform/Android/AdbClient.h
Vendor import of lldb trunk r256945:
[FreeBSD/FreeBSD.git] / source / Plugins / Platform / Android / AdbClient.h
1 //===-- AdbClient.h ---------------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef liblldb_AdbClient_h_
11 #define liblldb_AdbClient_h_
12
13 // C Includes
14
15 // C++ Includes
16
17 #include <list>
18 #include <string>
19 #include <vector>
20
21 // Other libraries and framework includes
22 // Project includes
23
24 #include "lldb/Core/Error.h"
25 #include "lldb/Host/ConnectionFileDescriptor.h"
26
27 namespace lldb_private {
28
29 class FileSpec;
30
31 namespace platform_android {
32
33 class AdbClient
34 {
35 public:
36     enum UnixSocketNamespace
37     {
38         UnixSocketNamespaceAbstract,
39         UnixSocketNamespaceFileSystem,
40     };
41
42     using DeviceIDList = std::list<std::string>;
43
44     static Error
45     CreateByDeviceID(const std::string &device_id, AdbClient &adb);
46
47     AdbClient () = default;
48     explicit AdbClient (const std::string &device_id);
49
50     const std::string&
51     GetDeviceID() const;
52
53     Error
54     GetDevices (DeviceIDList &device_list);
55
56     Error
57     SetPortForwarding (const uint16_t local_port, const uint16_t remote_port);
58
59     Error
60     SetPortForwarding (const uint16_t local_port,
61                        const char* remote_socket_name,
62                        const UnixSocketNamespace socket_namespace);
63
64     Error
65     DeletePortForwarding (const uint16_t local_port);
66
67     Error
68     PullFile (const FileSpec &remote_file, const FileSpec &local_file);
69
70     Error
71     PushFile (const FileSpec &local_file, const FileSpec &remote_file);
72
73     Error
74     Stat (const FileSpec &remote_file, uint32_t &mode, uint32_t &size, uint32_t &mtime);
75
76     Error
77     Shell (const char* command, uint32_t timeout_ms, std::string* output);
78
79 private:
80     Error
81     Connect ();
82
83     void
84     SetDeviceID (const std::string &device_id);
85
86     Error
87     SendMessage (const std::string &packet, const bool reconnect = true);
88
89     Error
90     SendDeviceMessage (const std::string &packet);
91
92     Error
93     SendSyncRequest (const char *request_id, const uint32_t data_len, const void *data);
94
95     Error
96     ReadSyncHeader (std::string &response_id, uint32_t &data_len);
97
98     Error
99     ReadMessage (std::vector<char> &message);
100
101     Error
102     ReadMessageStream (std::vector<char> &message, uint32_t timeout_ms);
103
104     Error
105     GetResponseError (const char *response_id);
106
107     Error
108     ReadResponseStatus ();
109
110     Error
111     SwitchDeviceTransport ();
112
113     Error
114     Sync ();
115
116     Error
117     StartSync ();
118
119     Error
120     PullFileChunk (std::vector<char> &buffer, bool &eof);
121
122     Error
123     ReadAllBytes (void *buffer, size_t size);
124
125     std::string m_device_id;
126     ConnectionFileDescriptor m_conn;
127 };
128
129 } // namespace platform_android
130 } // namespace lldb_private
131
132 #endif  // liblldb_AdbClient_h_