MCPcopy
hub / github.com/caddyserver/caddy / copyResponse

Method copyResponse

modules/caddyhttp/reverseproxy/streaming.go:283–321  ·  view source on GitHub ↗
(dst http.ResponseWriter, src io.Reader, flushInterval time.Duration, logger *zap.Logger)

Source from the content-addressed store, hash-verified

281}
282
283func (h Handler) copyResponse(dst http.ResponseWriter, src io.Reader, flushInterval time.Duration, logger *zap.Logger) error {
284 var w io.Writer = dst
285
286 if flushInterval != 0 {
287 var mlwLogger *zap.Logger
288 if h.VerboseLogs {
289 mlwLogger = logger.Named("max_latency_writer")
290 } else {
291 mlwLogger = zap.NewNop()
292 }
293 mlw := &maxLatencyWriter{
294 dst: dst,
295 //nolint:bodyclose
296 flush: http.NewResponseController(dst).Flush,
297 latency: flushInterval,
298 logger: mlwLogger,
299 }
300 defer mlw.stop()
301
302 // set up initial timer so headers get flushed even if body writes are delayed
303 mlw.flushPending = true
304 mlw.t = time.AfterFunc(flushInterval, mlw.delayedFlush)
305
306 w = mlw
307 }
308
309 buf := streamingBufPool.Get().(*[]byte)
310 defer streamingBufPool.Put(buf)
311
312 var copyLogger *zap.Logger
313 if h.VerboseLogs {
314 copyLogger = logger
315 } else {
316 copyLogger = zap.NewNop()
317 }
318
319 _, err := h.copyBuffer(w, src, *buf, copyLogger)
320 return err
321}
322
323// copyBuffer returns any write errors or non-EOF read errors, and the amount
324// of bytes written.

Callers 2

TestHandlerCopyResponseFunction · 0.95
finalizeResponseMethod · 0.95

Calls 3

stopMethod · 0.95
copyBufferMethod · 0.95
GetMethod · 0.65

Tested by 1

TestHandlerCopyResponseFunction · 0.76