brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 341a9fa Raw
118 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_ADBCLIENT_H10#define LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_ADBCLIENT_H11 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 25namespace platform_android {26 27class AdbClient {28public:29  enum UnixSocketNamespace {30    UnixSocketNamespaceAbstract,31    UnixSocketNamespaceFileSystem,32  };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 on41  ///          success, or an Error if the device ID cannot be resolved or42  ///          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 68  Status Connect();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 83class AdbSyncService {84public:85  explicit AdbSyncService(const std::string device_id);86  virtual ~AdbSyncService();87  Status SetupSyncConnection();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_android115} // namespace lldb_private116 117#endif // LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_ADBCLIENT_H118