blob: 8b1b0457f358b6cded713a0f13eec43925723211 [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.testing.proxy;
/// A protocol that enables creating TCP proxies so that host tests may
/// access debug services that normally accept only local connections.
///
/// For example, if web browser exposes a debug HTTP service listening on
/// [::1]:9999, TcpProxyControl may listen on [::]:10000 and forward requests
/// to port 9999. The host test then calls port 10000 to access the web browser's
/// debug service.
@discoverable
closed protocol TcpProxyControl {
/// Opens a proxy to the given |target_port|. If a proxy is already open
/// for the specified |target_port|, the existing |open_port| is returned.
/// The proxy remains open as long as at least a single client keeps their
/// |proxy_token| handle for the specified |target_port|. Once all the
/// |proxy_token| handles are closed, the proxy is closed. |proxy_port| is
/// the source port where the proxy is opened. Except when the test running
/// on remote host needs to reach a local device, its value is 0. This is
/// only useful when the user has tunneled these ports to the local device
/// and specified that port number as |proxy_port|.
strict OpenProxy(resource struct {
target_port uint16;
proxy_port uint16;
tcp_proxy server_end:TcpProxy;
}) -> (struct {
open_port uint16;
});
};
/// An empty protocol which serves as a token for a proxy started with
/// |TcpProxyControl.OpenProxy|. The proxy stays open as long as at least one
/// |TcpProxy| channel corresponding to the proxy remains open. Note that the
/// server may close the channel in the case an error is encountered.
closed protocol TcpProxy {};