tcp

package
v2.11.0 Latest Latest
Warning

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

Go to latest
Published: Feb 12, 2024 License: MIT Imports: 12 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Chain added in v2.5.0

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 added in v2.5.0

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 added in v2.5.0

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 added in v2.5.0

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 added in v2.5.0

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

Then adds an handler at the end of the chain.

type Constructor added in v2.5.0

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 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, terminationDelay time.Duration, proxyProtocol *dynamic.ProxyProtocol) (*Proxy, error)

NewProxy creates a new Proxy.

func (*Proxy) ServeTCP

func (p *Proxy) ServeTCP(conn WriteCloser)

ServeTCP forwards the connection to a service.

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