// Copyright 2023 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.connector;

using zx;

@discoverable
closed protocol Connector {
    // Connect an overnet circuit to this RCS instance. The node at the other
    // end of the connection will host only the RemoteControl service. This
    // method also adds an ID to this RCS instance, which can be retrieved via
    // `fuchsia.developer.remotecontrol.RemoteControl.IdentifyHost` to uniquely
    // identify this RCS instance.
    strict EstablishCircuit(resource struct {
        id uint64;
        socket zx.Handle:SOCKET;
    }) -> ();
};
