Documentation
¶
Index ¶
- Constants
- Variables
- type Client
- type ClusterHook
- type ConnectionInfo
- type Handler
- type InmemLayer
- func (l *InmemLayer) Addrs() []net.Addr
- func (l *InmemLayer) Close() error
- func (l *InmemLayer) Connect(remote *InmemLayer)
- func (l *InmemLayer) Dial(addr string, timeout time.Duration, tlsConfig *tls.Config) (*tls.Conn, error)
- func (l *InmemLayer) Disconnect(peer string)
- func (l *InmemLayer) DisconnectAll()
- func (l *InmemLayer) Listeners() []NetworkListener
- func (l *InmemLayer) SetConnectionCh(ch chan *ConnectionInfo)
- type InmemLayerCluster
- type Listener
- func (cl *Listener) AddClient(alpn string, client Client)
- func (cl *Listener) AddHandler(alpn string, handler Handler)
- func (cl *Listener) Addr() net.Addr
- func (cl *Listener) Addrs() []net.Addr
- func (cl *Listener) GetDialerFunc(ctx context.Context, alpn string) func(string, time.Duration) (net.Conn, error)
- func (cl *Listener) Handler(alpn string) (Handler, bool)
- func (cl *Listener) RemoveClient(alpn string)
- func (cl *Listener) Run(ctx context.Context) error
- func (cl *Listener) Server() *http2.Server
- func (cl *Listener) Stop()
- func (cl *Listener) StopHandler(alpn string)
- func (cl *Listener) TLSConfig(ctx context.Context) (*tls.Config, error)
- type NetworkLayer
- type NetworkLayerSet
- type NetworkListener
- type TCPLayer
Constants ¶
const (
ListenerAcceptDeadline = 500 * time.Millisecond
)
Variables ¶
var ( // Making this a package var allows tests to modify HeartbeatInterval = 5 * time.Second )
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client interface { ClientLookup(context.Context, *tls.CertificateRequestInfo) (*tls.Certificate, error) ServerName() string CACert(ctx context.Context) *x509.Certificate }
Client is used to lookup a client certificate.
type ClusterHook ¶
type ClusterHook interface { AddClient(alpn string, client Client) RemoveClient(alpn string) AddHandler(alpn string, handler Handler) StopHandler(alpn string) TLSConfig(ctx context.Context) (*tls.Config, error) Addr() net.Addr GetDialerFunc(ctx context.Context, alpnProto string) func(string, time.Duration) (net.Conn, error) }
type ConnectionInfo ¶ added in v1.4.0
type Handler ¶
type Handler interface { ServerLookup(context.Context, *tls.ClientHelloInfo) (*tls.Certificate, error) CALookup(context.Context) ([]*x509.Certificate, error) // Handoff is used to pass the connection lifetime off to // the handler Handoff(context.Context, *sync.WaitGroup, chan struct{}, *tls.Conn) error Stop() error }
Handler exposes functions for looking up TLS configuration and handing off a connection for a cluster listener application.
type InmemLayer ¶ added in v1.4.0
type InmemLayer struct {
// contains filtered or unexported fields
}
InmemLayer is an in-memory implementation of NetworkLayer. This is primarially useful for tests.
func NewInmemLayer ¶ added in v1.4.0
func NewInmemLayer(addr string, logger log.Logger) *InmemLayer
NewInmemLayer returns a new in-memory layer configured to listen on the provided address.
func (*InmemLayer) Addrs ¶ added in v1.4.0
func (l *InmemLayer) Addrs() []net.Addr
Addrs implements NetworkLayer.
func (*InmemLayer) Close ¶ added in v1.4.0
func (l *InmemLayer) Close() error
Close is used to permanently disable the transport
func (*InmemLayer) Connect ¶ added in v1.4.0
func (l *InmemLayer) Connect(remote *InmemLayer)
Connect is used to connect this transport to another transport for a given peer name. This allows for local routing.
func (*InmemLayer) Dial ¶ added in v1.4.0
func (l *InmemLayer) Dial(addr string, timeout time.Duration, tlsConfig *tls.Config) (*tls.Conn, error)
Dial implements NetworkLayer.
func (*InmemLayer) Disconnect ¶ added in v1.4.0
func (l *InmemLayer) Disconnect(peer string)
Disconnect is used to remove the ability to route to a given peer.
func (*InmemLayer) DisconnectAll ¶ added in v1.4.0
func (l *InmemLayer) DisconnectAll()
DisconnectAll is used to remove all routes to peers.
func (*InmemLayer) Listeners ¶ added in v1.4.0
func (l *InmemLayer) Listeners() []NetworkListener
Listeners implements NetworkLayer.
func (*InmemLayer) SetConnectionCh ¶ added in v1.4.0
func (l *InmemLayer) SetConnectionCh(ch chan *ConnectionInfo)
type InmemLayerCluster ¶ added in v1.4.0
type InmemLayerCluster struct {
// contains filtered or unexported fields
}
InmemLayerCluster composes a set of layers and handles connecting them all together. It also satisfies the NetworkLayerSet interface.
func NewInmemLayerCluster ¶ added in v1.4.0
func NewInmemLayerCluster(clusterName string, nodes int, logger log.Logger) (*InmemLayerCluster, error)
NewInmemLayerCluster returns a new in-memory layer set that builds n nodes and connects them all together.
func (*InmemLayerCluster) ConnectCluster ¶ added in v1.4.0
func (ic *InmemLayerCluster) ConnectCluster(remote *InmemLayerCluster)
ConnectCluster connects this cluster with the provided remote cluster, connecting all nodes to each other.
func (*InmemLayerCluster) Layers ¶ added in v1.4.0
func (ic *InmemLayerCluster) Layers() []NetworkLayer
Layers implements the NetworkLayerSet interface.
func (*InmemLayerCluster) SetConnectionCh ¶ added in v1.4.0
func (ic *InmemLayerCluster) SetConnectionCh(ch chan *ConnectionInfo)
type Listener ¶
type Listener struct {
// contains filtered or unexported fields
}
Listener is the source of truth for cluster handlers and connection clients. It dynamically builds the cluster TLS information. It's also responsible for starting tcp listeners and accepting new cluster connections.
func NewListener ¶
func NewListener(networkLayer NetworkLayer, cipherSuites []uint16, logger log.Logger) *Listener
func (*Listener) AddHandler ¶
AddHandler registers a new cluster handler for the provided ALPN name.
func (*Listener) GetDialerFunc ¶ added in v1.4.0
func (cl *Listener) GetDialerFunc(ctx context.Context, alpn string) func(string, time.Duration) (net.Conn, error)
GetDialerFunc returns a function that looks up the TLS information for the provided alpn name and calls the network layer's dial function.
func (*Listener) RemoveClient ¶
RemoveClient removes the client for the specified ALPN name
func (*Listener) Run ¶
Run starts the tcp listeners and will accept connections until stop is called. This function blocks so should be called in a goroutine.
func (*Listener) StopHandler ¶
StopHandler stops the cluster handler for the provided ALPN name, it also calls stop on the handler.
type NetworkLayer ¶ added in v1.4.0
type NetworkLayer interface { Addrs() []net.Addr Listeners() []NetworkListener Dial(address string, timeout time.Duration, tlsConfig *tls.Config) (*tls.Conn, error) Close() error }
NetworkLayer is the network abstraction used in the cluster listener. Abstracting the network layer out allows us to swap the underlying implementations for tests.
type NetworkLayerSet ¶ added in v1.4.0
type NetworkLayerSet interface {
Layers() []NetworkLayer
}
NetworkLayerSet is used for returning a slice of layers to a caller.
type NetworkListener ¶ added in v1.4.0
NetworkListener is used by the network layer to define a net.Listener for use in the cluster listener.
type TCPLayer ¶ added in v1.4.0
type TCPLayer struct {
// contains filtered or unexported fields
}
TCPLayer implements the NetworkLayer interface and uses TCP as the underlying network.
func NewTCPLayer ¶ added in v1.4.0
NewTCPLayer returns a TCPLayer.
func (*TCPLayer) Dial ¶ added in v1.4.0
func (l *TCPLayer) Dial(address string, timeout time.Duration, tlsConfig *tls.Config) (*tls.Conn, error)
Dial implements the NetworkLayer interface.
func (*TCPLayer) Listeners ¶ added in v1.4.0
func (l *TCPLayer) Listeners() []NetworkListener
Listeners implements NetworkLayer. It starts a new TCP listener for each configured address.