micro/tunnel/tunnel.go

58 lines
1.4 KiB
Go
Raw Normal View History

2019-08-07 20:44:33 +03:00
// Package tunnel provides gre network tunnelling
package tunnel
import (
"errors"
"time"
"github.com/micro/go-micro/transport"
)
2019-08-31 19:32:20 +03:00
// Tunnel creates a gre tunnel on top of the go-micro/transport.
// It establishes multiple streams using the Micro-Tunnel-Channel header
2019-08-07 20:44:33 +03:00
// and Micro-Tunnel-Session header. The tunnel id is a hash of
// the address being requested.
type Tunnel interface {
2019-08-07 23:58:25 +03:00
Init(opts ...Option) error
2019-08-21 14:55:10 +03:00
// Address the tunnel is listening on
Address() string
// Connect connects the tunnel
Connect() error
// Close closes the tunnel
Close() error
2019-08-30 22:05:00 +03:00
// Connect to a channel
Dial(channel string, opts ...DialOption) (Session, error)
2019-08-30 22:05:00 +03:00
// Accept connections on a channel
Listen(channel string) (Listener, error)
2019-08-20 19:21:35 +03:00
// Name of the tunnel implementation
String() string
2019-08-07 20:44:33 +03:00
}
// The listener provides similar constructs to the transport.Listener
type Listener interface {
2019-08-31 19:32:20 +03:00
Accept() (Session, error)
2019-08-30 22:05:00 +03:00
Channel() string
2019-08-07 20:44:33 +03:00
Close() error
}
2019-08-30 22:05:00 +03:00
// Session is a unique session created when dialling or accepting connections on the tunnel
type Session interface {
2019-08-31 19:32:20 +03:00
// The unique session id
2019-08-07 20:44:33 +03:00
Id() string
2019-08-31 19:32:20 +03:00
// The channel name
2019-08-30 22:05:00 +03:00
Channel() string
2019-08-07 20:44:33 +03:00
// a transport socket
transport.Socket
2019-08-05 21:41:48 +03:00
}
var (
ErrDialTimeout = errors.New("dial timeout")
DefaultDialTimeout = time.Second * 5
)
2019-08-07 20:44:33 +03:00
// NewTunnel creates a new tunnel
2019-08-05 21:41:48 +03:00
func NewTunnel(opts ...Option) Tunnel {
return newTunnel(opts...)
}