89 lines
2.3 KiB
Go
89 lines
2.3 KiB
Go
package proxy
|
|
|
|
import (
|
|
"net"
|
|
"net/http"
|
|
"time"
|
|
|
|
"git.maze.io/maze/styx/proxy/policy"
|
|
"git.maze.io/maze/styx/proxy/resolver"
|
|
)
|
|
|
|
type ConnectHandler interface {
|
|
HandleConnect(session *Session, network, address string) net.Conn
|
|
}
|
|
|
|
// ConnectHandlerFunc is called when the proxy receives a new HTTP CONNECT request.
|
|
type ConnectHandlerFunc func(session *Session, network, address string) net.Conn
|
|
|
|
func (f ConnectHandlerFunc) HandleConnect(session *Session, network, address string) net.Conn {
|
|
return f(session, network, address)
|
|
}
|
|
|
|
type RequestHandler interface {
|
|
HandleRequest(session *Session) (*http.Request, *http.Response)
|
|
}
|
|
|
|
// RequestHandlerFunc is called when the proxy receives a new request.
|
|
type RequestHandlerFunc func(session *Session) (*http.Request, *http.Response)
|
|
|
|
func (f RequestHandlerFunc) HandleRequest(session *Session) (*http.Request, *http.Response) {
|
|
return f(session)
|
|
}
|
|
|
|
type ResponseHandler interface {
|
|
HandleResponse(session *Session) *http.Response
|
|
}
|
|
|
|
// ResponseHandler is called when the proxy receives a response.
|
|
type ResponseHandlerFunc func(session *Session) *http.Response
|
|
|
|
func (f ResponseHandlerFunc) HandleResponse(session *Session) *http.Response {
|
|
return f(session)
|
|
}
|
|
|
|
type ErrorHandler interface {
|
|
HandleError(session *Session, err error)
|
|
}
|
|
|
|
type ErrorHandlerFunc func(session *Session, err error)
|
|
|
|
func (f ErrorHandlerFunc) HandleError(session *Session, err error) {
|
|
f(session, err)
|
|
}
|
|
|
|
type Config struct {
|
|
// Listen address.
|
|
Listen string `hcl:"listen,optional"`
|
|
|
|
// Bind address for outgoing connections.
|
|
Bind string `hcl:"bind,optional"`
|
|
|
|
// Interface for outgoing connections.
|
|
Interface string `hcl:"interface,optional"`
|
|
|
|
// Upstream proxy servers.
|
|
Upstream []string `hcl:"upstream,optional"`
|
|
|
|
// DialTimeout for establishing new connections.
|
|
DialTimeout time.Duration `hcl:"dial_timeout,optional"`
|
|
|
|
// Policy for the proxy.
|
|
Policy *policy.Policy `hcl:"policy,block"`
|
|
|
|
// Resolver for the proxy.
|
|
Resolver resolver.Resolver
|
|
|
|
ConnectHandler ConnectHandler
|
|
RequestHandler RequestHandler
|
|
ResponseHandler ResponseHandler
|
|
ErrorHandler ErrorHandler
|
|
}
|
|
|
|
var (
|
|
_ ConnectHandler = (ConnectHandlerFunc)(nil)
|
|
_ RequestHandler = (RequestHandlerFunc)(nil)
|
|
_ ResponseHandler = (ResponseHandlerFunc)(nil)
|
|
_ ErrorHandler = (ErrorHandlerFunc)(nil)
|
|
)
|