blob: 8a00fa5f6950c7d0b746d229abbe9ce98fd603d5 [file] [log] [blame]
// 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.sys.internal;
using fuchsia.logger;
/// An incoming connection for logging from a component, attributed by appmgr.
type LogConnection = resource struct {
/// The incoming request for the LogSink.
log_request server_end:fuchsia.logger.LogSink;
/// What we know about the identity of the requester.
source_identity SourceIdentity;
};
/// `LogConnector` is implemented once per-realm by appmgr. Clients of this protocol call `TakeLogConnectionListener` to
/// receive logs within the client's realm.
///
/// When a component starts with this protocol in its sandbox, appmgr creates a matching
/// `LogConnectionListener` for that component's realm, and will forward any `LogConnection`s in the realm to the
/// LogConnectionListener.
///
/// As a result, if a `LogConnectionListener` wishes to consume logs for another component in its realm, the
/// consumer must be started before other components in the realm. The consumer does not need to
/// begin executing, just have its namespace constructed.
@discoverable
protocol LogConnector {
/// Removes the `LogConnectionListener` from this realm, returning the request-side if it had not already been taken.
/// Clients should bind an implementation to the `LogConnectionListener` protocol in order to receive LogSinks.
///
/// This method returns a `request<LogConnectionListener>` instead of accepting a `LogConnectionListener` directly
/// in order to allow appmgr to construct and buffer `LogConnectionListener` with `LogConnection`s.
TakeLogConnectionListener() -> (resource struct {
consumer server_end:<LogConnectionListener, optional>;
});
};
/// `LogConnectorListener` receives attributed log connections from a consumer such as the Archivist.
/// This protocol is meant to be used with a `LogConnector`.
protocol LogConnectionListener {
/// Adds a new connection.
OnNewConnection(resource struct {
connection LogConnection;
});
};