| // Copyright 2018 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_SYS_APPMGR_HUB_COMPONENT_HUB_H_ |
| #define SRC_SYS_APPMGR_HUB_COMPONENT_HUB_H_ |
| |
| #include <zircon/types.h> |
| |
| #include <fbl/ref_ptr.h> |
| #include <fs/pseudo_dir.h> |
| |
| #include "src/lib/fxl/macros.h" |
| #include "src/sys/appmgr/hub/hub.h" |
| |
| namespace component { |
| |
| class ComponentHub : public Hub { |
| public: |
| ComponentHub(fbl::RefPtr<fs::PseudoDir> root); |
| |
| zx_status_t SetProcessId(fbl::String koid) { return AddEntry("process-id", std::move(koid)); } |
| |
| zx_status_t SetArgs(fbl::String args) { return AddEntry("args", std::move(args)); } |
| |
| zx_status_t PublishOut(fbl::RefPtr<fs::Vnode> vn) { return AddEntry("out", std::move(vn)); } |
| |
| // Add a list of incoming services that the component has access to. |
| zx_status_t AddIncomingServices(fbl::RefPtr<fs::Vnode> incoming_services); |
| |
| // Add a handle to the component's package |
| zx_status_t AddPackageHandle(fbl::RefPtr<fs::Vnode> package_handle); |
| |
| ~ComponentHub(); |
| |
| private: |
| ComponentHub(); |
| |
| // Initialize |in_dir_| if it hasn't already been initialized. |
| zx_status_t EnsureInDir(); |
| |
| // "in" directory |
| fbl::RefPtr<fs::PseudoDir> in_dir_; |
| |
| FXL_DISALLOW_COPY_AND_ASSIGN(ComponentHub); |
| }; |
| |
| } // namespace component |
| |
| #endif // SRC_SYS_APPMGR_HUB_COMPONENT_HUB_H_ |