blob: 3fe395c4fdd65fa509eab750821ff4467a2fa100 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Package tunnel defines an interface for creating a network tunnel from client
// to server.
package tunnel
import "v.io/v23/security/access"
type Tunnel interface {
// The Forward method is used for network forwarding. All the data sent over
// the byte stream is forwarded to the requested network address and all the
// data received from that network connection is sent back on the reply
// stream.
Forward(network, address string) stream<[]byte, []byte> error {access.Admin}
// The ReverseForward method is used for network forwarding from the server
// back to the client. The server process listens on the requested network
// address, forwarding all connections by calling Forwarder.Forward on the
// caller.
ReverseForward(network, address string) error {access.Admin}
// The Shell method is used to either run shell commands remotely, or to open
// an interactive shell. The data received over the byte stream is sent to the
// shell's stdin, and the data received from the shell's stdout and stderr is
// sent back in the reply stream. It returns the exit status of the shell
// command as an integer exit code and a human readable string.
Shell(command string, shellOpts ShellOpts) stream<ClientShellPacket, ServerShellPacket> (exitCode int32, exitMsg string | error) {access.Admin}
}
type Forwarder interface {
// The Forward method is used for network forwarding. All the data sent over
// the byte stream is forwarded to a predetermined network address and all the
// data received from that network connection is sent back on the reply
// stream.
Forward() stream<[]byte, []byte> error {access.Admin}
}
type ShellOpts struct {
UsePty bool // Whether to open a pseudo-terminal.
Environment []string // Environment variables to pass to the remote shell.
WinSize WindowSize // The size of the window.
}
type WindowSize struct {
Rows, Cols uint16
}
type ClientShellPacket union {
// Bytes going to the shell's stdin.
Stdin []byte
// Indicates that stdin should be closed. The presence of this field indicates
// EOF. Its actual value is ignored.
EndOfFile Unused
// A dynamic update of the window size.
WinSize WindowSize
}
// TODO(toddw): Replace Unused with the unnamed empty struct{}.
type Unused struct {}
type ServerShellPacket union {
// Bytes coming from the shell's stdout.
Stdout []byte
// Bytes coming from the shell's stderr.
Stderr []byte
}