| // 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. |
| library fuchsia.io; |
| |
| using fuchsia.mem; |
| using zx; |
| |
| /// Returns run-time information about a node that is specific to the |
| /// current connection. |
| type ConnectionInfo = resource table { |
| /// The active variant corresponds to one of the supported protocols |
| /// of the node, and represents the result of the connection-time |
| /// negotiation. Provides auxiliary handles if applicable. |
| /// |
| /// Describes how the connection should be handled, and provides auxiliary |
| /// handles and information for the connection where applicable. |
| /// Refer to [`Node.Describe`] and [`Node.OnConnectionInfo`]. |
| /// |
| /// If handles are returned which offer alternative ways of access to the node, |
| /// the rights on the handles should correspond to the rights on the connection. |
| /// |
| /// If the client specified more than one protocol in `protocols` during |
| /// [`Directory.Open`] or [`Node.Reopen`], the [`Representation`] carries |
| /// additionally the result of the connection-time negotiation via its tag. |
| /// |
| /// The elements have one-to-one correspondence with the members of |
| /// [`NodeProtocols`]. |
| 1: representation @generated_name("Representation") flexible resource union { |
| /// Auxiliary data for the connector representation of a node, used for |
| /// protocol discovery and connection. |
| /// |
| /// It supports connecting to arbitrary protocols exported by the filesystem |
| /// server at a path, including ones that do not compose [`Node2`]. |
| /// |
| /// See [`NodeProtocols.CONNECTOR`]. |
| 1: connector @generated_name("ConnectorInfo") table {}; |
| |
| /// Auxiliary data for the directory representation of a node. |
| /// The selection of this variant in [`Representation`] implies that the |
| /// connection speaks the [`Directory`] protocol. |
| /// |
| /// See [`NodeProtocols.DIRECTORY`]. |
| 2: directory @generated_name("DirectoryInfo") table {}; |
| |
| /// Auxiliary data for the file representation of a node. |
| /// The selection of this variant in [`Representation`] implies that the |
| /// connection speaks the [`File`] protocol. |
| /// |
| /// See [`NodeProtocols.FILE`]. |
| 3: file @generated_name("FileInfo") resource table { |
| /// An optional event which transmits information about an object's |
| /// readability or writability. This event relays information about the |
| /// underlying object, not the capability granted to client: this event |
| /// may be signalled "readable" on a connection that does not have |
| /// the capability to read. |
| /// |
| /// This event will be present if the following conditions are met: |
| /// |
| /// - The `available_operations` on the file connection is not empty. |
| /// - The filesystem supports signalling readability/writability events. |
| /// |
| /// The [`FileSignal`] values may be observed on this event. |
| 1: observer zx.handle:EVENT; |
| |
| /// Returns if the file is opened in append mode. |
| /// In append mode, the seek offset is moved to the end before every |
| /// write, the two steps performed in an atomic manner. |
| 2: is_append bool; |
| |
| /// An optional stream object, which can be used to read to and write from |
| /// the file. |
| /// |
| /// Reading and writing the file using the stream object can be up to 20x |
| /// faster than reading and writing the file using the Read and Write |
| /// operations in the [`File`] protocol. |
| 3: stream zx.handle:STREAM; |
| }; |
| |
| /// Auxiliary data for the memory object representation of a node. |
| /// The node is a file which is represented as a VMO. |
| /// The selection of this variant in [`Representation`] implies that the |
| /// connection speaks the [`Memory`] protocol. |
| /// |
| /// See [`NodeProtocols.MEMORY`]. |
| 4: memory @generated_name("MemoryInfo") resource table { |
| /// Although a VMO is returned as a part of this structure, that VMO may |
| /// back multiple files. To identify the logical portion of the VMO that |
| /// represents the single file, offset and size are also supplied. |
| /// |
| /// If the range covers the entire VMO (i.e. the offset is zero and the |
| /// length matches the size of the VMO), then all clients must receive a |
| /// VMO with the same koid. This can be a duplicate of the same underlying |
| /// page-aligned VMO. |
| /// |
| /// The rights on this VMO should correspond to the rights on the |
| /// node connection. |
| 1: buffer fuchsia.mem.Range; |
| }; |
| |
| /// The pipe representation of a node. |
| /// A pipe is a data streaming interface, commonly used for standard in/out. |
| /// There is no universal requirement as to if it is uni- or bi-directional. |
| /// The selection of this variant in [`Representation`] implies that the |
| /// connection speaks the [`Pipe`] protocol. |
| /// |
| /// See [`NodeProtocols.PIPE`]. |
| 5: pipe @generated_name("PipeInfo") resource table { |
| /// The backing socket transport for the pipe. |
| /// The rights on this socket should correspond to the rights on the |
| /// node connection. |
| 1: socket zx.handle:SOCKET; |
| }; |
| |
| /// The object may be cast to the shared interface of devices. |
| @deprecated("devices will be services in the future") |
| 6: device @generated_name("DeviceInfo") resource table { |
| /// An optional event which transmits information about a device's state. |
| /// |
| /// The [`DeviceSignal`] values may be observed on this event. |
| 1: unused zx.handle:EVENTPAIR; |
| }; |
| |
| /// The object may be cast to a Tty interface. |
| @deprecated("tty functionalities may be covered by a tty service") |
| 7: tty @generated_name("TtyInfo") resource table { |
| /// An optional event which transmits information about a device's state. |
| /// |
| /// The [`DeviceSignal`] values may be observed on this event. |
| 1: event zx.handle:EVENTPAIR; |
| }; |
| |
| /// The connection composes [`fuchsia.posix.socket/SynchronousDatagramSocket`]. |
| /// |
| /// See [`NodeProtocols.SYNCHRONOUS_DATAGRAM_SOCKET`]. |
| 8: synchronous_datagram_socket |
| @generated_name("SynchronousDatagramSocketInfo") |
| resource table { |
| 1: event zx.handle:EVENTPAIR; |
| }; |
| |
| /// The connection composes [`fuchsia.posix.socket/DatagramSocket`]. |
| /// |
| /// See [`NodeProtocols.DATAGRAM_SOCKET`]. |
| 9: datagram_socket @generated_name("DatagramSocketInfo") resource table { |
| /// See [`fuchsia.posix.socket.DatagramSocket`] for details. |
| 1: socket zx.handle:SOCKET; |
| /// Size of the buffer used to receive Tx metadata. |
| 2: tx_meta_buf_size uint64; |
| /// Size of the buffer used to receive Rx metadata. |
| 3: rx_meta_buf_size uint64; |
| }; |
| |
| /// The connection composes [`fuchsia.posix.socket/StreamSocket`]. |
| /// |
| /// See [`NodeProtocols.STREAM_SOCKET`]. |
| 10: stream_socket @generated_name("StreamSocketInfo") resource table { |
| 1: socket zx.handle:SOCKET; |
| }; |
| |
| /// The connection composes [`fuchsia.posix.socket.raw/Socket`]. |
| /// |
| /// See [`NodeProtocols.RAW_SOCKET`]. |
| 11: raw_socket @generated_name("RawSocketInfo") resource table { |
| 1: event zx.handle:EVENTPAIR; |
| }; |
| |
| /// The connection composes [`fuchsia.posix.socket.packet/Socket`]. |
| /// |
| /// See [`NodeProtocols.PACKET_SOCKET`]. |
| 12: packet_socket @generated_name("PacketSocketInfo") resource table { |
| /// See [`fuchsia.posix.socket.packet.Socket`] for details. |
| 1: event zx.handle:EVENTPAIR; |
| }; |
| }; |
| |
| /// Information about the rights possessed by the current connection. |
| /// Note: `rights` limits the set of operations allowed on the connection, |
| /// but does not guarantee their availability. For example, one may have |
| /// the [`Rights.EXECUTE`] right on a file connection, but the file itself |
| /// does not have the `EXECUTE` ability, and hence cannot be executed. |
| /// See [`ConnectionOptions.rights`]. |
| 2: rights Rights; |
| |
| /// The set of available operations on this channel. It is always the |
| /// intersection between the rights possessed by this connection, and the |
| /// abilities of the node. The value may be zero in the case of an empty |
| /// intersection. |
| /// See [`ConnectionOptions.rights`]. |
| 3: available_operations Operations; |
| }; |