100e305d2STamas Berghammer //===-- PlatformAndroidRemoteGDBServer.h ------------------------*- C++ -*-===//
200e305d2STamas Berghammer //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
600e305d2STamas Berghammer //
700e305d2STamas Berghammer //===----------------------------------------------------------------------===//
800e305d2STamas Berghammer 
9cdc514e4SJonas Devlieghere #ifndef LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_PLATFORMANDROIDREMOTEGDBSERVER_H
10cdc514e4SJonas Devlieghere #define LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_PLATFORMANDROIDREMOTEGDBSERVER_H
1100e305d2STamas Berghammer 
1200e305d2STamas Berghammer #include <map>
1300e305d2STamas Berghammer #include <utility>
1400e305d2STamas Berghammer 
1500e305d2STamas Berghammer #include "Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h"
1600e305d2STamas Berghammer 
17e7df5f5dSOleksiy Vyalov #include "llvm/ADT/Optional.h"
18e7df5f5dSOleksiy Vyalov 
19e7df5f5dSOleksiy Vyalov #include "AdbClient.h"
20e7df5f5dSOleksiy Vyalov 
21db264a6dSTamas Berghammer namespace lldb_private {
22db264a6dSTamas Berghammer namespace platform_android {
23db264a6dSTamas Berghammer 
24b9c1b51eSKate Stone class PlatformAndroidRemoteGDBServer
25b9c1b51eSKate Stone     : public platform_gdb_server::PlatformRemoteGDBServer {
2600e305d2STamas Berghammer public:
27*4977da2cSPavel Labath   PlatformAndroidRemoteGDBServer() = default;
2800e305d2STamas Berghammer 
29222b937cSEugene Zelenko   ~PlatformAndroidRemoteGDBServer() override;
3000e305d2STamas Berghammer 
3197206d57SZachary Turner   Status ConnectRemote(Args &args) override;
3200e305d2STamas Berghammer 
3397206d57SZachary Turner   Status DisconnectRemote() override;
3400e305d2STamas Berghammer 
353165945aSZachary Turner   lldb::ProcessSP ConnectProcess(llvm::StringRef connect_url,
363165945aSZachary Turner                                  llvm::StringRef plugin_name,
37ccd6cffbSTamas Berghammer                                  lldb_private::Debugger &debugger,
38ccd6cffbSTamas Berghammer                                  lldb_private::Target *target,
3997206d57SZachary Turner                                  lldb_private::Status &error) override;
40ccd6cffbSTamas Berghammer 
4100e305d2STamas Berghammer protected:
423ea689b3SChaoren Lin   std::string m_device_id;
433ea689b3SChaoren Lin   std::map<lldb::pid_t, uint16_t> m_port_forwards;
44e7df5f5dSOleksiy Vyalov   llvm::Optional<AdbClient::UnixSocketNamespace> m_socket_namespace;
4500e305d2STamas Berghammer 
46b9c1b51eSKate Stone   bool LaunchGDBServer(lldb::pid_t &pid, std::string &connect_url) override;
4700e305d2STamas Berghammer 
48b9c1b51eSKate Stone   bool KillSpawnedProcess(lldb::pid_t pid) override;
4900e305d2STamas Berghammer 
50b9c1b51eSKate Stone   void DeleteForwardPort(lldb::pid_t pid);
511c1d76b3SOleksiy Vyalov 
5297206d57SZachary Turner   Status MakeConnectURL(const lldb::pid_t pid, const uint16_t remote_port,
53245f7fdcSZachary Turner                         llvm::StringRef remote_socket_name,
549fe526c2SOleksiy Vyalov                         std::string &connect_url);
5554971856SOleksiy Vyalov 
5600e305d2STamas Berghammer private:
57eaebcbc6SKonrad Kleine   PlatformAndroidRemoteGDBServer(const PlatformAndroidRemoteGDBServer &) =
58eaebcbc6SKonrad Kleine       delete;
59eaebcbc6SKonrad Kleine   const PlatformAndroidRemoteGDBServer &
60eaebcbc6SKonrad Kleine   operator=(const PlatformAndroidRemoteGDBServer &) = delete;
6100e305d2STamas Berghammer };
6200e305d2STamas Berghammer 
63db264a6dSTamas Berghammer } // namespace platform_android
64db264a6dSTamas Berghammer } // namespace lldb_private
65db264a6dSTamas Berghammer 
66cdc514e4SJonas Devlieghere #endif // LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_PLATFORMANDROIDREMOTEGDBSERVER_H
67