@ -145,19 +145,8 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
}
}
}
// set up the context for the request
repl := caddy . NewReplacer ( )
repl := caddy . NewReplacer ( )
ctx := context . WithValue ( r . Context ( ) , caddy . ReplacerCtxKey , repl )
r = PrepareRequest ( r , repl , w , s )
ctx = context . WithValue ( ctx , ServerCtxKey , s )
ctx = context . WithValue ( ctx , VarsCtxKey , make ( map [ string ] interface { } ) )
ctx = context . WithValue ( ctx , routeGroupCtxKey , make ( map [ string ] struct { } ) )
var url2 url . URL // avoid letting this escape to the heap
ctx = context . WithValue ( ctx , OriginalRequestCtxKey , originalRequest ( r , & url2 ) )
r = r . WithContext ( ctx )
// once the pointer to the request won't change
// anymore, finish setting up the replacer
addHTTPVarsToReplacer ( repl , r , w )
// encode the request for logging purposes before
// encode the request for logging purposes before
// it enters any handler chain; this is necessary
// it enters any handler chain; this is necessary
@ -470,6 +459,25 @@ func (slc ServerLogConfig) getLoggerName(host string) string {
return slc . DefaultLoggerName
return slc . DefaultLoggerName
}
}
// PrepareRequest fills the request r for use in a Caddy HTTP handler chain. w and s can
// be nil, but the handlers will lose response placeholders and access to the server.
func PrepareRequest ( r * http . Request , repl * caddy . Replacer , w http . ResponseWriter , s * Server ) * http . Request {
// set up the context for the request
ctx := context . WithValue ( r . Context ( ) , caddy . ReplacerCtxKey , repl )
ctx = context . WithValue ( ctx , ServerCtxKey , s )
ctx = context . WithValue ( ctx , VarsCtxKey , make ( map [ string ] interface { } ) )
ctx = context . WithValue ( ctx , routeGroupCtxKey , make ( map [ string ] struct { } ) )
var url2 url . URL // avoid letting this escape to the heap
ctx = context . WithValue ( ctx , OriginalRequestCtxKey , originalRequest ( r , & url2 ) )
r = r . WithContext ( ctx )
// once the pointer to the request won't change
// anymore, finish setting up the replacer
addHTTPVarsToReplacer ( repl , r , w )
return r
}
// errLogValues inspects err and returns the status code
// errLogValues inspects err and returns the status code
// to use, the error log message, and any extra fields.
// to use, the error log message, and any extra fields.
// If err is a HandlerError, the returned values will
// If err is a HandlerError, the returned values will