fix: don't let a slow browser link time out the relayed speed test

This commit is contained in:
redtea committed 2026-10-13 22:49:19 +03:00
1 parent 189050b2b6
commit 6441b4329d
1 file changed
+11 -1
+11 -1
View File
@@ -27,6 +27,9 @@ const (
speedDownCap = 256 << 20
speedDownFor = 6 * time.Second
speedUpCap = 64 << 20
// speedRelayUpFor is how long the agent's upload is passed on to the
// browser: the agent's own window with slack.
speedRelayUpFor = 4 * time.Second
)
// statCache holds the last sample per agent and serializes its refresh.
@@ -364,7 +367,14 @@ func (s *Server) handleSpeedRelayUp(w http.ResponseWriter, r *http.Request) {
http.NotFound(w, r)
return
}
_, _ = io.Copy(rl.upW, http.MaxBytesReader(w, r.Body, speedUpCap))
body := http.MaxBytesReader(w, r.Body, speedUpCap)
// A proxy in front may hand over the whole upload at once: pass on only
// what the browser takes in the window, or the agent would wait for the
// rest to trickle through a slower link.
t := time.AfterFunc(speedRelayUpFor, func() { rl.upW.Close() })
_, _ = io.Copy(rl.upW, body)
t.Stop()
rl.upW.Close()
_, _ = io.Copy(io.Discard, body)
w.WriteHeader(http.StatusNoContent)
}