| // Copyright 2023 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_DEVELOPER_DEBUG_DEBUG_AGENT_LAUNCHER_H_ |
| #define SRC_DEVELOPER_DEBUG_DEBUG_AGENT_LAUNCHER_H_ |
| |
| #include <fidl/fuchsia.debugger/cpp/fidl.h> |
| #include <lib/syslog/cpp/macros.h> |
| |
| // This implements the |Launcher| fidl protocol, and manages instance(s) of DebugAgent. When a |
| // |Launch| request is received, a new DebugAgent process is spun up and passed the server_end of |
| // the DebugAgent protocol as a startup handle. That handle is bound to the MessageLoop and serves |
| // requests from the corresponding client. |
| class DebugAgentLauncher : public fidl::Server<fuchsia_debugger::Launcher> { |
| public: |
| void Launch(LaunchRequest& request, LaunchCompleter::Sync& completer) override; |
| |
| void GetAgents(GetAgentsRequest& request, GetAgentsCompleter::Sync& completer) override; |
| |
| void handle_unknown_method(fidl::UnknownMethodMetadata<fuchsia_debugger::Launcher> metadata, |
| fidl::UnknownMethodCompleter::Sync& completer) override { |
| FX_LOGS(WARNING) << "Unknown method: " << metadata.method_ordinal; |
| } |
| |
| private: |
| void LaunchDebugAgent(fidl::ServerEnd<fuchsia_debugger::DebugAgent> server_end, |
| const std::string& name, fit::callback<void(zx_status_t)> cb); |
| }; |
| |
| #endif // SRC_DEVELOPER_DEBUG_DEBUG_AGENT_LAUNCHER_H_ |