chain

package
v0.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 22, 2024 License: MIT Imports: 19 Imported by: 32

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrEmptyRoute = errors.New("empty route")
)

Functions

func Resolve

func Resolve(ctx context.Context, network, addr string, r resolver.Resolver, hosts hosts.HostMapper, log logger.Logger) (string, error)

Types

type BindOption

type BindOption func(opts *BindOptions)

func BacklogBindOption

func BacklogBindOption(backlog int) BindOption

func LoggerBindOption

func LoggerBindOption(logger logger.Logger) BindOption

func MuxBindOption

func MuxBindOption(mux bool) BindOption

func UDPConnTTLBindOption

func UDPConnTTLBindOption(ttl time.Duration) BindOption

func UDPDataBufferSizeBindOption

func UDPDataBufferSizeBindOption(size int) BindOption

func UDPDataQueueSizeBindOption

func UDPDataQueueSizeBindOption(size int) BindOption

type BindOptions

type BindOptions struct {
	Mux               bool
	Backlog           int
	UDPDataQueueSize  int
	UDPDataBufferSize int
	UDPConnTTL        time.Duration
	Logger            logger.Logger
}

type Chainer

type Chainer interface {
	Route(ctx context.Context, network, address string, opts ...RouteOption) Route
}

type DialOption

type DialOption func(opts *DialOptions)

func InterfaceDialOption

func InterfaceDialOption(ifName string) DialOption

func LoggerDialOption

func LoggerDialOption(logger logger.Logger) DialOption

func SockOptsDialOption

func SockOptsDialOption(so *SockOpts) DialOption

func TimeoutDialOption

func TimeoutDialOption(d time.Duration) DialOption

type DialOptions

type DialOptions struct {
	Timeout   time.Duration
	Interface string
	SockOpts  *SockOpts
	Logger    logger.Logger
}

type HTTPNodeSettings

type HTTPNodeSettings struct {
	Host    string
	Header  map[string]string
	Auther  auth.Authenticator
	Rewrite []HTTPURLRewriteSetting
}

type HTTPURLRewriteSetting

type HTTPURLRewriteSetting struct {
	Pattern     *regexp.Regexp
	Replacement string
}

type Node

type Node struct {
	Name string
	Addr string
	// contains filtered or unexported fields
}

func NewNode

func NewNode(name string, addr string, opts ...NodeOption) *Node

func (*Node) Copy

func (node *Node) Copy() *Node

func (*Node) Marker

func (node *Node) Marker() selector.Marker

Marker implements selector.Markable interface.

func (*Node) Metadata

func (node *Node) Metadata() metadata.Metadata

Metadata implements metadadta.Metadatable interface.

func (*Node) Options

func (node *Node) Options() *NodeOptions

type NodeOption

type NodeOption func(*NodeOptions)

func BypassNodeOption

func BypassNodeOption(bp bypass.Bypass) NodeOption

func HTTPNodeOption

func HTTPNodeOption(httpSettings *HTTPNodeSettings) NodeOption

func HostMapperNodeOption

func HostMapperNodeOption(m hosts.HostMapper) NodeOption

func HostNodeOption

func HostNodeOption(host string) NodeOption

func MetadataNodeOption

func MetadataNodeOption(md metadata.Metadata) NodeOption

func NetworkNodeOption

func NetworkNodeOption(network string) NodeOption

func PathNodeOption

func PathNodeOption(path string) NodeOption

func ProtocolNodeOption

func ProtocolNodeOption(protocol string) NodeOption

func ResoloverNodeOption

func ResoloverNodeOption(resolver resolver.Resolver) NodeOption

func TLSNodeOption

func TLSNodeOption(tlsSettings *TLSNodeSettings) NodeOption

func TransportNodeOption

func TransportNodeOption(tr *Transport) NodeOption

type NodeOptions

type NodeOptions struct {
	Transport  *Transport
	Bypass     bypass.Bypass
	Resolver   resolver.Resolver
	HostMapper hosts.HostMapper
	Metadata   metadata.Metadata
	Host       string
	Network    string
	Protocol   string
	Path       string
	HTTP       *HTTPNodeSettings
	TLS        *TLSNodeSettings
}

type Route

type Route interface {
	Dial(ctx context.Context, network, address string, opts ...DialOption) (net.Conn, error)
	Bind(ctx context.Context, network, address string, opts ...BindOption) (net.Listener, error)
	Nodes() []*Node
}
var (
	DefaultRoute Route = &route{}
)

type RouteOption

type RouteOption func(opts *RouteOptions)

func WithHostRouteOption

func WithHostRouteOption(host string) RouteOption

type RouteOptions

type RouteOptions struct {
	Host string
}

type Router

type Router struct {
	// contains filtered or unexported fields
}

func NewRouter

func NewRouter(opts ...RouterOption) *Router

func (*Router) Bind

func (r *Router) Bind(ctx context.Context, network, address string, opts ...BindOption) (ln net.Listener, err error)

func (*Router) Dial

func (r *Router) Dial(ctx context.Context, network, address string) (conn net.Conn, err error)

func (*Router) Options

func (r *Router) Options() *RouterOptions

type RouterOption

type RouterOption func(*RouterOptions)

func ChainRouterOption

func ChainRouterOption(chain Chainer) RouterOption

func HostMapperRouterOption

func HostMapperRouterOption(m hosts.HostMapper) RouterOption

func InterfaceRouterOption

func InterfaceRouterOption(ifceName string) RouterOption

func LoggerRouterOption

func LoggerRouterOption(logger logger.Logger) RouterOption

func RecordersRouterOption

func RecordersRouterOption(recorders ...recorder.RecorderObject) RouterOption

func ResolverRouterOption

func ResolverRouterOption(resolver resolver.Resolver) RouterOption

func RetriesRouterOption

func RetriesRouterOption(retries int) RouterOption

func SockOptsRouterOption

func SockOptsRouterOption(so *SockOpts) RouterOption

func TimeoutRouterOption

func TimeoutRouterOption(timeout time.Duration) RouterOption

type RouterOptions

type RouterOptions struct {
	Retries    int
	Timeout    time.Duration
	IfceName   string
	SockOpts   *SockOpts
	Chain      Chainer
	Resolver   resolver.Resolver
	HostMapper hosts.HostMapper
	Recorders  []recorder.RecorderObject
	Logger     logger.Logger
}

type SockOpts

type SockOpts struct {
	Mark int
}

type TLSNodeSettings

type TLSNodeSettings struct {
	ServerName string
	Secure     bool
	Options    struct {
		MinVersion   string
		MaxVersion   string
		CipherSuites []string
	}
}

type Transport

type Transport struct {
	// contains filtered or unexported fields
}

func NewTransport

func NewTransport(d dialer.Dialer, c connector.Connector, opts ...TransportOption) *Transport

func (*Transport) Bind

func (tr *Transport) Bind(ctx context.Context, conn net.Conn, network, address string, opts ...connector.BindOption) (net.Listener, error)

func (*Transport) Connect

func (tr *Transport) Connect(ctx context.Context, conn net.Conn, network, address string) (net.Conn, error)

func (*Transport) Copy

func (tr *Transport) Copy() *Transport

func (*Transport) Dial

func (tr *Transport) Dial(ctx context.Context, addr string) (net.Conn, error)

func (*Transport) Handshake

func (tr *Transport) Handshake(ctx context.Context, conn net.Conn) (net.Conn, error)

func (*Transport) Multiplex

func (tr *Transport) Multiplex() bool

func (*Transport) Options

func (tr *Transport) Options() *TransportOptions

type TransportOption

type TransportOption func(*TransportOptions)

func AddrTransportOption

func AddrTransportOption(addr string) TransportOption

func InterfaceTransportOption

func InterfaceTransportOption(ifceName string) TransportOption

func RouteTransportOption

func RouteTransportOption(route Route) TransportOption

func SockOptsTransportOption

func SockOptsTransportOption(so *SockOpts) TransportOption

func TimeoutTransportOption

func TimeoutTransportOption(timeout time.Duration) TransportOption

type TransportOptions

type TransportOptions struct {
	Addr     string
	IfceName string
	SockOpts *SockOpts
	Route    Route
	Timeout  time.Duration
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL