| // Copyright 2016 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. |
| |
| library fuchsia.sys; |
| |
| using zx; |
| |
| /// An FDIO file descriptor. |
| // TODO(abarth): Use the real FDIO declaration once FDIO converts to FIDL2. |
| resource struct FileDescriptor { |
| /// The FDIO types of the handle (e.g., `FA_FDIO_REMOTE`). |
| int32 type0; |
| int32 type1; |
| int32 type2; |
| |
| /// The handles for the file descriptor (e.g., a channel). |
| handle? handle0; |
| handle? handle1; |
| handle? handle2; |
| }; |
| |
| /// Information used to create an instance of a component and obtain |
| /// services from it. |
| resource struct LaunchInfo { |
| /// The location from which to retrieve this component. |
| /// |
| /// This field will probably be replaced with a stronger notion of identity, |
| /// such as an unforgeable token. This field is included in this iteration to |
| /// ease the transition from the previous component interfaces. |
| component_url url; |
| |
| /// The arguments to be provided to the component. |
| vector<string:MAX>:MAX? arguments; |
| |
| /// The file descriptor to use for stdout. |
| /// |
| /// If null, the component will use the default stdout for the environment. |
| FileDescriptor? out; |
| |
| /// The file descriptor to use for stderr. |
| /// |
| /// If null, the component will use the default stderr for the environment. |
| FileDescriptor? err; |
| |
| /// The interface request for a Directory that points at the "svc/" subdirectory |
| /// of the component's outgoing directory channel. The channel CANNOT be used |
| /// to connect to other directories (such as "debug/" or "diagnostics/") the component |
| /// publishes in their outgoing directory. |
| zx.handle:CHANNEL? directory_request; |
| |
| /// A custom namespace that can be appended to the namespace generated by |
| /// appmgr and provided to this component. |
| /// Adding a mount point at standard paths like 'pkg' or 'svc' will be ignored. |
| /// HACK(alhaad): Adding mount points for deprecated default directories like |
| /// '/data' will override the default. |
| FlatNamespace? flat_namespace; |
| |
| /// A list of services to be added to this component's svc namespace. These |
| /// services are in addition to those coming from Environment. |
| ServiceList? additional_services; |
| }; |
| |
| resource struct ServiceList { |
| /// A list of services that can be requested from `provider`. |
| vector<string> names; |
| |
| /// A service provider to get the services listed in `names` from. |
| ServiceProvider? provider; |
| |
| /// A channel to the directory hosting the services in `names`. |
| // TODO(fxbug.dev/31262): Support `host_directory` for CreateComponent and deprecate |
| // `provider`. |
| zx.handle:CHANNEL? host_directory; |
| }; |
| |
| /// An interface for creating component instances. |
| /// |
| /// Typically obtained via `Environment.GetLauncher`. |
| [Discoverable] |
| protocol Launcher { |
| /// Creates a new instance of the component described by `launch_info`. |
| /// |
| /// The component instance is created in the `Environment` |
| /// associated with this `Launcher`. When creating the component, |
| /// the environment requests the environment services for this component from |
| /// its `EnvironmentHost`. |
| /// |
| /// The `controller` can be used to control the lifecycle of the created |
| /// component instance. If an `ComponentController`'s interface is |
| /// requested, the component instance is killed when the interface is closed. |
| CreateComponent(LaunchInfo launch_info, |
| request<ComponentController>? controller); |
| }; |