| // Copyright 2019 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_COMPONENT_LAUNCHER_H_ |
| #define SRC_DEVELOPER_DEBUG_DEBUG_AGENT_COMPONENT_LAUNCHER_H_ |
| |
| #include <fuchsia/sys/cpp/fidl.h> |
| #include <zircon/types.h> |
| |
| #include <string> |
| |
| #include "lib/sys/cpp/service_directory.h" |
| #include "src/developer/debug/shared/component_utils.h" |
| |
| namespace debug_agent { |
| |
| // When preparing a component, this is information the debugger will use in |
| // order to be able to attach to the newly starting process. |
| struct ComponentDescription { |
| uint64_t component_id = 0; // 0 is invalid. |
| std::string url; |
| std::string process_name; |
| std::string filter; |
| }; |
| |
| struct ComponentHandles { |
| zx::socket out; |
| zx::socket err; |
| }; |
| |
| // Class designed to help setup a component and then launch it. These setups are |
| // necessary because the agent needs some information about how the component |
| // will be launch before it actually launches it. This is because the debugger |
| // will set itself to "catch" the component when it starts as a process. |
| class ComponentLauncher { |
| public: |
| explicit ComponentLauncher(std::shared_ptr<sys::ServiceDirectory> services); |
| |
| // Will fail if |argv| is invalid. The first element should be the component |
| // url needed to launch. |
| zx_status_t Prepare(std::vector<std::string> argv, ComponentDescription* description, |
| ComponentHandles* handles); |
| |
| // The launcher has to be already successfully prepared. |
| // The lifetime of the controller is bound to the lifetime of the component. |
| fuchsia::sys::ComponentControllerPtr Launch(); |
| |
| private: |
| std::shared_ptr<sys::ServiceDirectory> services_; |
| fuchsia::sys::LaunchInfo launch_info_; |
| }; |
| |
| } // namespace debug_agent |
| |
| #endif // SRC_DEVELOPER_DEBUG_DEBUG_AGENT_COMPONENT_LAUNCHER_H_ |