package server import ( "time" ) type ReadWriteHandler interface { GetMaxMessageSize() int64 GetReadBufferSize() int GetWriteBufferSize() int GetReadTimeout() time.Duration GetWriteTimeout() time.Duration } type ReadWriteHandlers struct { MaxMessageSize int64 // Per-connection buffer size for requests' reading. // This also limits the maximum header size. // // Increase this buffer if your clients send multi-KB RequestURIs // and/or multi-KB headers (for example, BIG cookies). // // Default buffer size is used if not set. ReadBufferSize int // Per-connection buffer size for responses' writing. // // Default buffer size is used if not set. WriteBufferSize int // Maximum duration for reading the full request (including body). // // This also limits the maximum duration for idle keep-alive // connections. // // By default request read timeout is unlimited. ReadTimeout time.Duration // Maximum duration for writing the full response (including body). // // By default response write timeout is unlimited. WriteTimeout time.Duration } func (rwh *ReadWriteHandlers) GetMaxMessageSize() int64 { return rwh.MaxMessageSize } func (rwh *ReadWriteHandlers) GetReadBufferSize() int { return rwh.ReadBufferSize } func (rwh *ReadWriteHandlers) GetWriteBufferSize() int { return rwh.WriteBufferSize } func (rwh *ReadWriteHandlers) GetReadTimeout() time.Duration { return rwh.ReadTimeout } func (rwh *ReadWriteHandlers) GetWriteTimeout() time.Duration { return rwh.WriteTimeout } func (rwh *ReadWriteHandlers) Validate() error { if rwh.MaxMessageSize <= 0 { rwh.MaxMessageSize = DefaultMaxMessageSize } if rwh.ReadBufferSize <= 0 { rwh.ReadBufferSize = DefaultReadBufferSize } if rwh.WriteBufferSize <= 0 { rwh.WriteBufferSize = DefaultWriteBufferSize } if rwh.ReadTimeout <= 0 { rwh.ReadTimeout = DefaultReadTimeout } if rwh.WriteTimeout <= 0 { rwh.WriteTimeout = DefaultWriteTimeout } return nil }