Better trie implementations
This commit is contained in:
@@ -302,14 +302,15 @@ func (p *Proxy) Serve(l net.Listener) error {
|
||||
func (p *Proxy) handle(nc net.Conn) {
|
||||
var (
|
||||
start = time.Now()
|
||||
ctx = NewContext(nc).(*proxyContext)
|
||||
ctx = NewContext(nc, p.Storage).(*proxyContext)
|
||||
log = ctx.Logger()
|
||||
err error
|
||||
)
|
||||
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
if err, ok := r.(error); ok {
|
||||
ctx.LogEntry().Err(err).Warn("Bug in code, recovered from panic!")
|
||||
log.Err(err).Warn("Bug in code, recovered from panic!")
|
||||
}
|
||||
_ = nc.Close()
|
||||
}
|
||||
@@ -360,16 +361,6 @@ func (p *Proxy) handle(nc net.Conn) {
|
||||
}
|
||||
}
|
||||
|
||||
log := ctx.LogEntry()
|
||||
if p.Storage != nil {
|
||||
if client, err := p.Storage.ClientByIP(nc.RemoteAddr().(*net.TCPAddr).IP); err == nil {
|
||||
log = log.Values(logger.Values{
|
||||
"client_id": client.ID,
|
||||
"client_network": client.String(),
|
||||
"client_description": client.Description,
|
||||
})
|
||||
}
|
||||
}
|
||||
for {
|
||||
if ctx.transparentTLS {
|
||||
ctx.req = &http.Request{
|
||||
@@ -448,7 +439,9 @@ func (p *Proxy) handleError(ctx *proxyContext, err error, sendResponse bool) {
|
||||
if res == nil && sendResponse {
|
||||
res = NewErrorResponse(err, ctx.Request())
|
||||
}
|
||||
ctx.LogEntry().Value("count", len(p.OnError)).Trace("Running error handlers")
|
||||
|
||||
log := ctx.Logger()
|
||||
log.Value("count", len(p.OnError)).Trace("Running error handlers")
|
||||
for _, f := range p.OnError {
|
||||
if newRes := f.HandleError(ctx, err); newRes != nil {
|
||||
res = newRes
|
||||
@@ -464,7 +457,7 @@ func (p *Proxy) handleError(ctx *proxyContext, err error, sendResponse bool) {
|
||||
func (p *Proxy) handleRequest(ctx *proxyContext) (err error) {
|
||||
switch {
|
||||
case ctx.req == nil:
|
||||
ctx.LogEntry().Warn("Request is nil in handleRequest!?")
|
||||
ctx.Logger().Warn("Request is nil in handleRequest!?")
|
||||
return errors.New("proxy: request is nil?")
|
||||
|
||||
case headerContains(ctx.req.Header, HeaderConnection, "upgrade"):
|
||||
@@ -527,7 +520,7 @@ func (p *Proxy) serve(ctx *proxyContext) (err error) {
|
||||
}
|
||||
|
||||
func (p *Proxy) serveConnect(ctx *proxyContext) (err error) {
|
||||
log := ctx.LogEntry()
|
||||
log := ctx.Logger()
|
||||
|
||||
// Most browsers expect to get a 200 OK after firing a HTTP CONNECT request; if the upstream
|
||||
// encounters any errors, we'll inform the client after reading the HTTP request that follows.
|
||||
@@ -571,13 +564,13 @@ func (p *Proxy) serveConnect(ctx *proxyContext) (err error) {
|
||||
}
|
||||
|
||||
ctx.res = NewResponse(http.StatusOK, nil, ctx.req)
|
||||
srv := NewContext(c).(*proxyContext)
|
||||
srv := NewContext(c, p.Storage).(*proxyContext)
|
||||
srv.SetIdleTimeout(p.IdleTimeout)
|
||||
return p.multiplex(ctx, srv)
|
||||
}
|
||||
|
||||
func (p *Proxy) serveForward(ctx *proxyContext) (err error) {
|
||||
log := ctx.LogEntry()
|
||||
log := ctx.Logger()
|
||||
log.Value("target", ctx.req.URL.String()).Debugf("%s forward request", ctx.req.Proto)
|
||||
|
||||
var res *http.Response
|
||||
@@ -609,7 +602,8 @@ func (p *Proxy) serveForward(ctx *proxyContext) (err error) {
|
||||
}
|
||||
|
||||
func (p *Proxy) serveWebSocket(ctx *proxyContext) (err error) {
|
||||
log := ctx.LogEntry().Value("target", ctx.req.URL.String())
|
||||
log := ctx.Logger()
|
||||
log.Value("target", ctx.req.URL.String())
|
||||
|
||||
switch ctx.req.URL.Scheme {
|
||||
case "http":
|
||||
@@ -632,7 +626,7 @@ func (p *Proxy) serveWebSocket(ctx *proxyContext) (err error) {
|
||||
}
|
||||
cancel()
|
||||
|
||||
srv := NewContext(c).(*proxyContext)
|
||||
srv := NewContext(c, p.Storage).(*proxyContext)
|
||||
srv.SetIdleTimeout(p.IdleTimeout)
|
||||
if err = ctx.req.Write(srv); err != nil {
|
||||
ctx.res = NewErrorResponse(err, ctx.req)
|
||||
@@ -662,7 +656,7 @@ func (p *Proxy) serveWebSocket(ctx *proxyContext) (err error) {
|
||||
|
||||
func (p *Proxy) multiplex(ctx, srv *proxyContext) (err error) {
|
||||
var (
|
||||
log = ctx.LogEntry().Value("server", srv.RemoteAddr().String())
|
||||
log = ctx.Logger().Value("server", srv.RemoteAddr().String())
|
||||
errs = make(chan error, 1)
|
||||
done = make(chan struct{}, 1)
|
||||
)
|
||||
|
Reference in New Issue
Block a user