tcp

package
v3.0.0 Latest Latest
Warning

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

Go to latest
Published: Apr 29, 2024 License: MIT Imports: 20 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Chain

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

Chain is a chain for TCP handlers. Chain acts as a list of tcp.Handler constructors. Chain is effectively immutable: once created, it will always hold the same set of constructors in the same order.

func NewChain

func NewChain(constructors ...Constructor) Chain

NewChain creates a new TCP chain, memorizing the given list of TCP middleware constructors. New serves no other function, constructors are only called upon a call to Then().

func (Chain) Append

func (c Chain) Append(constructors ...Constructor) Chain

Append extends a chain, adding the specified constructors as the last ones in the request flow.

Append returns a new chain, leaving the original one untouched.

	 stdChain := tcp.NewChain(m1, m2)
	 extChain := stdChain.Append(m3, m4)
  // requests in stdChain go m1 -> m2
  // requests in extChain go m1 -> m2 -> m3 -> m4

func (Chain) Extend

func (c Chain) Extend(chain Chain) Chain

Extend extends a chain by adding the specified chain as the last one in the request flow.

Extend returns a new chain, leaving the original one untouched.

stdChain := tcp.NewChain(m1, m2)
ext1Chain := tcp.NewChain(m3, m4)
ext2Chain := stdChain.Extend(ext1Chain)
// requests in stdChain go  m1 -> m2
// requests in ext1Chain go m3 -> m4
// requests in ext2Chain go m1 -> m2 -> m3 -> m4

Another example:

 	aHtmlAfterNosurf := tcp.NewChain(m2)
	aHtml := tcp.NewChain(m1, func(h tcp.Handler) tcp.Handler {
		csrf := nosurf.New(h)
		csrf.SetFailureHandler(aHtmlAfterNosurf.ThenFunc(csrfFail))
		return csrf
	}).Extend(aHtmlAfterNosurf)
		// requests to aHtml hitting nosurfs success handler go m1 -> nosurf -> m2 -> target-handler
		// requests to aHtml hitting nosurfs failure handler go m1 -> nosurf -> m2 -> csrfFail

func (Chain) Then

func (c Chain) Then(h Handler) (Handler, error)

Then adds an handler at the end of the chain.

type Constructor

type Constructor func(Handler) (Handler, error)

Constructor A constructor for a piece of TCP middleware. Some TCP middleware use this constructor out of the box, so in most cases you can just pass somepackage.New.

type Dialer

type Dialer interface {
	proxy.Dialer

	TerminationDelay() time.Duration
}

type DialerManager

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

DialerManager handles dialer for the reverse proxy.

func NewDialerManager

func NewDialerManager(spiffeX509Source SpiffeX509Source) *DialerManager

NewDialerManager creates a new DialerManager.

func (*DialerManager) Get

func (d *DialerManager) Get(name string, tls bool) (Dialer, error)

Get gets a dialer by name.

func (*DialerManager) Update

func (d *DialerManager) Update(configs map[string]*dynamic.TCPServersTransport)

Update updates the dialers configurations.

type Handler

type Handler interface {
	ServeTCP(conn WriteCloser)
}

Handler is the TCP Handlers interface.

type HandlerFunc

type HandlerFunc func(conn WriteCloser)

The HandlerFunc type is an adapter to allow the use of ordinary functions as handlers.

func (HandlerFunc) ServeTCP

func (f HandlerFunc) ServeTCP(conn WriteCloser)

ServeTCP serves tcp.

type HandlerSwitcher

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

HandlerSwitcher is a TCP handler switcher.

func (*HandlerSwitcher) ServeTCP

func (s *HandlerSwitcher) ServeTCP(conn WriteCloser)

ServeTCP forwards the TCP connection to the current active handler.

func (*HandlerSwitcher) Switch

func (s *HandlerSwitcher) Switch(handler Handler)

Switch sets the new TCP handler to use for new connections.

type Proxy

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

Proxy forwards a TCP request to a TCP service.

func NewProxy

func NewProxy(address string, proxyProtocol *dynamic.ProxyProtocol, dialer Dialer) (*Proxy, error)

NewProxy creates a new Proxy.

func (*Proxy) ServeTCP

func (p *Proxy) ServeTCP(conn WriteCloser)

ServeTCP forwards the connection to a service.

type SpiffeX509Source

type SpiffeX509Source interface {
	x509svid.Source
	x509bundle.Source
}

SpiffeX509Source allows to retrieve a x509 SVID and bundle.

type TLSHandler

type TLSHandler struct {
	Next   Handler
	Config *tls.Config
}

TLSHandler handles TLS connections.

func (*TLSHandler) ServeTCP

func (t *TLSHandler) ServeTCP(conn WriteCloser)

ServeTCP terminates the TLS connection.

type WRRLoadBalancer

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

WRRLoadBalancer is a naive RoundRobin load balancer for TCP services.

func NewWRRLoadBalancer

func NewWRRLoadBalancer() *WRRLoadBalancer

NewWRRLoadBalancer creates a new WRRLoadBalancer.

func (*WRRLoadBalancer) AddServer

func (b *WRRLoadBalancer) AddServer(serverHandler Handler)

AddServer appends a server to the existing list.

func (*WRRLoadBalancer) AddWeightServer

func (b *WRRLoadBalancer) AddWeightServer(serverHandler Handler, weight *int)

AddWeightServer appends a server to the existing list with a weight.

func (*WRRLoadBalancer) ServeTCP

func (b *WRRLoadBalancer) ServeTCP(conn WriteCloser)

ServeTCP forwards the connection to the right service.

type WriteCloser

type WriteCloser interface {
	net.Conn
	// CloseWrite on a network connection, indicates that the issuer of the call
	// has terminated sending on that connection.
	// It corresponds to sending a FIN packet.
	CloseWrite() error
}

WriteCloser describes a net.Conn with a CloseWrite method.

Jump to

Keyboard shortcuts

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