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_ 133