// 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.overnet.protocol;

/// Introduction packet sent on stream oriented links between Overnet nodes
table StreamSocketGreeting {
    /// Protocol identification string; different kinds of streams might choose a different value here
    1: string:32 magic_string;
    /// Overnet NodeId of the sender
    2: NodeId node_id;
    /// Optional label for debugging
    3: string:32 connection_label;
    /// Optional key (used on lossy connections to uniquely identify a handshake pair)
    4: uint64 key;
};

/// Extra arguments for attaching a socket link to an Overnet mesh.
table SocketLinkOptions {
    /// A label that might be used for debugging purposes.
    1: string:32 connection_label;
    /// How many bytes per second are transferable on this link (used to tune error recovery).
    /// If unset, error recovery will be disabled.
    /// If set, must not be 0, or else the receiving MeshController service will close the channel
    /// (as discussed in that protocol's documentation).
    2: uint32 bytes_per_second;
};
