// Package tunnel provides a network tunnel ontop of a link package tunnel import ( "github.com/micro/go-micro/network/link" "github.com/micro/go-micro/transport" ) // Tunnel creates a network tunnel on top of a link. // It establishes multiple streams using the Micro-Tunnel header // created as a hash of the address. type Tunnel interface { // Connect connects the tunnel Connect() error // Close closes the tunnel Close() error // Dial an endpoint Dial(addr string) (Conn, error) // Accept connections Listen(addr string) (Listener, error) } // The listener provides similar constructs to the transport.Listener type Listener interface { Addr() string Close() error Accept() (Conn, error) } // Conn is a connection dialed or accepted which includes the tunnel id and session type Conn interface { // Specifies the tunnel id Id() string // The session Session() string // a transport socket transport.Socket } // NewTunnel creates a new tunnel on top of a link func NewTunnel(l link.Link) Tunnel { return newTunnel(l) }