| // Copyright 2020 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.developer.remotecontrol; |
| |
| using fuchsia.logger as logger; |
| using fuchsia.diagnostics as diagnostics; |
| using zx; |
| |
| const MAX_ENTRIES int32 = 3; |
| |
| type StreamError = strict enum : uint32 { |
| // Indicates an error that doesn't fall into any of the below types. |
| GENERIC_ERROR = 1; |
| // Indicates a required parameter is missing |
| MISSING_PARAMETER = 2; |
| // Indicates a parameter has a value that is currently unsupported. |
| UNSUPPORTED_PARAMETER = 3; |
| // Indicates a failure when setting up the subscription to ArchiveAccessor |
| SETUP_SUBSCRIPTION_FAILED = 4; |
| }; |
| |
| type BridgeStreamParameters = table { |
| 1: stream_mode diagnostics.StreamMode; |
| 2: data_type diagnostics.DataType; |
| 3: client_selector_configuration diagnostics.ClientSelectorConfiguration; |
| 4: accessor diagnostics.Selector; |
| }; |
| |
| type ArchiveIteratorEntry = resource table { |
| @deprecated("The data is now sent using the diagnostics_data field") |
| 1: data string:logger.MAX_DATAGRAM_LEN_BYTES; |
| @deprecated("The data is now sent using the diagnostics_data field") |
| 2: truncated_chars uint32; |
| 3: diagnostics_data DiagnosticsData; |
| // Indicates EOF for a request to snapshot data. |
| // If this is set by the daemon, the connection will not be retried. |
| 4: end_of_stream bool; |
| }; |
| |
| type InlineData = struct { |
| data string:logger.MAX_DATAGRAM_LEN_BYTES; |
| @deprecated( |
| "Data is no longer truncated, instead large messages use the socket variant of the DiagnosticsData union") |
| truncated_chars uint32; |
| }; |
| |
| type DiagnosticsData = strict resource union { |
| 1: inline InlineData; |
| 2: socket zx.Handle:SOCKET; |
| }; |
| |
| type ArchiveIteratorError = strict enum : uint32 { |
| GENERIC_ERROR = 1; |
| DATA_READ_FAILED = 2; |
| TRUNCATION_FAILED = 3; |
| }; |
| |
| @discoverable |
| closed protocol ArchiveIterator { |
| strict GetNext() -> (resource struct { |
| entry vector<ArchiveIteratorEntry>:MAX_ENTRIES; |
| }) error ArchiveIteratorError; |
| }; |
| |
| /// This protocol is necessary as a bridge between `fuchsia.diagnsotics.*ArchiveAccessor` |
| /// and the host due to the limitation of Overnet not supporting sending VMOs at the |
| /// moment. |
| /// When there's support for sending VMOs over Overnet, ffx tooling will be able |
| /// to talk directly to `fuchsia.diagnostics.ArchiveAccessor` instead of this protocol. |
| @discoverable |
| closed protocol RemoteDiagnosticsBridge { |
| strict StreamDiagnostics(resource struct { |
| parameters BridgeStreamParameters; |
| iterator server_end:ArchiveIterator; |
| }) -> () error StreamError; |
| |
| // This is a workaround to ensure the bridge is started by the framework |
| // before the frontend attempts to connect to it. |
| // TODO: remove this once fxbug.dev/60910 has been fixed. |
| @deprecated("Hack method - will be removed shortly.") |
| strict Hello() -> (); |
| }; |