46 lines
1.4 KiB
Go
46 lines
1.4 KiB
Go
package config
|
|
|
|
import (
|
|
"log"
|
|
"time"
|
|
)
|
|
|
|
// HTTPConfig controls built-in HTTP servers. Positive values override the
|
|
// selected transport's defaults; zero keeps its existing behavior. Timeouts
|
|
// follow that transport's semantics, not a handler execution deadline.
|
|
type HTTPConfig struct {
|
|
ReadHeaderTimeout time.Duration `json:"readHeaderTimeout"`
|
|
ReadTimeout time.Duration `json:"readTimeout"`
|
|
WriteTimeout time.Duration `json:"writeTimeout"`
|
|
IdleTimeout time.Duration `json:"idleTimeout"`
|
|
MaxHeaderBytes int `json:"maxHeaderBytes"`
|
|
// ErrorLog is a Go-only hook for the nethttp server's internal diagnostics.
|
|
ErrorLog *log.Logger `json:"-"`
|
|
}
|
|
|
|
func (c HTTPConfig) Validate() error {
|
|
for _, field := range []struct {
|
|
name string
|
|
value time.Duration
|
|
}{
|
|
{"readHeaderTimeout", c.ReadHeaderTimeout},
|
|
{"readTimeout", c.ReadTimeout},
|
|
{"writeTimeout", c.WriteTimeout},
|
|
{"idleTimeout", c.IdleTimeout},
|
|
} {
|
|
if field.value < 0 {
|
|
return &ConfigError{Field: "http." + field.name, Message: "must be nonnegative"}
|
|
}
|
|
}
|
|
if c.MaxHeaderBytes < 0 {
|
|
return &ConfigError{Field: "http.maxHeaderBytes", Message: "must be nonnegative"}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// WithHTTPConfig sets the built-in server's HTTP options. RunWith uses a
|
|
// caller-owned Runner and does not apply these options to that runner.
|
|
func WithHTTPConfig(settings HTTPConfig) Option {
|
|
return func(cfg *Config) { cfg.HTTP = settings }
|
|
}
|