HTTPD, WebDAV: use http.ResponseController

backport from Enterprise edition

Signed-off-by: Nicola Murino <nicola.murino@gmail.com>
This commit is contained in:
Nicola Murino
2025-08-02 18:00:45 +02:00
parent 9a0137befb
commit ddbe40cefa
11 changed files with 105 additions and 169 deletions

View File

@@ -55,8 +55,6 @@ func (s *webDavServer) listenAndServe(compressor *middleware.Compressor) error {
handler := compressor.Handler(s)
httpServer := &http.Server{
ReadHeaderTimeout: 30 * time.Second,
ReadTimeout: 60 * time.Second,
WriteTimeout: 60 * time.Second,
IdleTimeout: 60 * time.Second,
MaxHeaderBytes: 1 << 16, // 64KB
ErrorLog: log.New(&logger.StdLoggerWrapper{Sender: logSender}, "", 0),
@@ -170,6 +168,11 @@ func (s *webDavServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
}()
responseControllerDeadlines(
http.NewResponseController(w),
time.Now().Add(60*time.Second),
time.Now().Add(60*time.Second),
)
w.Header().Set("Server", version.GetServerVersion("/", false))
ipAddr := s.checkRemoteAddress(r)
@@ -228,11 +231,9 @@ func (s *webDavServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
return
}
connection := &Connection{
BaseConnection: common.NewBaseConnection(connectionID, common.ProtocolWebDAV, util.GetHTTPLocalAddress(r),
r.RemoteAddr, user),
request: r,
}
baseConn := common.NewBaseConnection(connectionID, common.ProtocolWebDAV, util.GetHTTPLocalAddress(r),
r.RemoteAddr, user)
connection := newConnection(baseConn, w, r)
if err = common.Connections.Add(connection); err != nil {
errClose := user.CloseFs()
logger.Warn(logSender, connectionID, "unable add connection: %v close fs error: %v", err, errClose)
@@ -389,6 +390,15 @@ func (s *webDavServer) checkRemoteAddress(r *http.Request) string {
return ipAddr
}
func responseControllerDeadlines(rc *http.ResponseController, read, write time.Time) {
if err := rc.SetReadDeadline(read); err != nil {
logger.Error(logSender, "", "unable to set read timeout to %s: %v", read, err)
}
if err := rc.SetWriteDeadline(write); err != nil {
logger.Error(logSender, "", "unable to set write timeout to %s: %v", write, err)
}
}
func writeLog(r *http.Request, status int, err error) {
scheme := "http"
cipherSuite := ""