Documentation ¶
Index ¶
- type Chain
- type Conn
- type Constructor
- type Handler
- type HandlerFunc
- type HandlerSwitcher
- type Proxy
- type Router
- func (r *Router) AddCatchAllNoTLS(handler Handler)
- func (r *Router) AddRoute(sniHost string, target Handler)
- func (r *Router) AddRouteHTTPTLS(sniHost string, config *tls.Config)
- func (r *Router) AddRouteTLS(sniHost string, target Handler, config *tls.Config)
- func (r *Router) GetConn(conn WriteCloser, peeked string) WriteCloser
- func (r *Router) GetHTTPHandler() http.Handler
- func (r *Router) GetHTTPSHandler() http.Handler
- func (r *Router) GetTLSGetClientInfo() func(info *tls.ClientHelloInfo) (*tls.Config, error)
- func (r *Router) HTTPForwarder(handler Handler)
- func (r *Router) HTTPHandler(handler http.Handler)
- func (r *Router) HTTPSForwarder(handler Handler)
- func (r *Router) HTTPSHandler(handler http.Handler, config *tls.Config)
- func (r *Router) ServeTCP(conn WriteCloser)
- type TLSHandler
- type WRRLoadBalancer
- type WriteCloser
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
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
type Conn ¶
type Conn struct { // Peeked are the bytes that have been read from Conn for the // purposes of route matching, but have not yet been consumed // by Read calls. It set to nil by Read when fully consumed. Peeked []byte // Conn is the underlying connection. // It can be type asserted against *net.TCPConn or other types // as needed. It should not be read from directly unless // Peeked is nil. WriteCloser }
Conn is a connection proxy that handles Peeked bytes.
type Constructor ¶ added in v2.5.0
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.
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 Router ¶
type Router struct {
// contains filtered or unexported fields
}
Router is a TCP router.
func (*Router) AddCatchAllNoTLS ¶
AddCatchAllNoTLS defines the fallback tcp handler.
func (*Router) AddRoute ¶
AddRoute defines a handler for a given sniHost (* is the only valid option).
func (*Router) AddRouteHTTPTLS ¶
AddRouteHTTPTLS defines a handler for a given sniHost and sets the matching tlsConfig.
func (*Router) AddRouteTLS ¶
AddRouteTLS defines a handler for a given sniHost and sets the matching tlsConfig.
func (*Router) GetConn ¶
func (r *Router) GetConn(conn WriteCloser, peeked string) WriteCloser
GetConn creates a connection proxy with a peeked string.
func (*Router) GetHTTPHandler ¶
GetHTTPHandler gets the attached http handler.
func (*Router) GetHTTPSHandler ¶
GetHTTPSHandler gets the attached https handler.
func (*Router) GetTLSGetClientInfo ¶ added in v2.5.0
GetTLSGetClientInfo is called after a ClientHello is received from a client.
func (*Router) HTTPForwarder ¶
HTTPForwarder sets the tcp handler that will forward the connections to an http handler.
func (*Router) HTTPHandler ¶
HTTPHandler attaches http handlers on the router.
func (*Router) HTTPSForwarder ¶
HTTPSForwarder sets the tcp handler that will forward the TLS connections to an http handler.
func (*Router) HTTPSHandler ¶
HTTPSHandler attaches https handlers on the router.
func (*Router) ServeTCP ¶
func (r *Router) ServeTCP(conn WriteCloser)
ServeTCP forwards the connection to the right TCP/HTTP handler.
type TLSHandler ¶
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.