MCPcopy
hub / github.com/keploy/keploy / contentLengthResponse

Method contentLengthResponse

pkg/agent/proxy/integrations/http/chunk.go:387–426  ·  view source on GitHub ↗

Handled chunked responses when content-length is given.

(ctx context.Context, finalResp *[]byte, clientConn, destConn net.Conn, contentLength int)

Source from the content-addressed store, hash-verified

385
386// Handled chunked responses when content-length is given.
387func (h *HTTP) contentLengthResponse(ctx context.Context, finalResp *[]byte, clientConn, destConn net.Conn, contentLength int) error {
388 isEOF := false
389 for contentLength > 0 {
390 resp, err := pUtil.ReadBytes(ctx, h.Logger, destConn)
391 if err != nil {
392 if err == io.EOF {
393 isEOF = true
394 h.Logger.Debug("received EOF, conn closed by the destination server")
395 if len(resp) == 0 {
396 break
397 }
398 } else if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
399 h.Logger.Info("Stopped getting data from the conn", zap.Error(err))
400 break
401 } else {
402 utils.LogError(h.Logger, nil, "failed to read the response message from the destination server")
403 return err
404 }
405 }
406
407 h.Logger.Debug("This is a chunk of response[content-length]: " + string(resp))
408 *finalResp = append(*finalResp, resp...)
409 contentLength -= len(resp)
410
411 // write the response message to the user client
412 _, err = clientConn.Write(resp)
413 if err != nil {
414 if ctx.Err() != nil {
415 return ctx.Err()
416 }
417 utils.LogError(h.Logger, nil, "failed to write response message to the user client")
418 return err
419 }
420
421 if isEOF {
422 break
423 }
424 }
425 return nil
426}

Callers 1

Calls 5

LogErrorFunction · 0.92
DebugMethod · 0.65
TimeoutMethod · 0.65
WriteMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected