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

Method Hijack

modules/caddyhttp/responsewriter.go:255–276  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

253}
254
255func (rr *responseRecorder) Hijack() (net.Conn, *bufio.ReadWriter, error) {
256 //nolint:bodyclose
257 conn, brw, err := http.NewResponseController(rr.ResponseWriterWrapper).Hijack()
258 if err != nil {
259 return nil, nil, err
260 }
261 // Per http documentation, returned bufio.Writer is empty, but bufio.Read maybe not
262 conn = &hijackedConn{conn, rr}
263 brw.Writer.Reset(conn)
264
265 buffered := brw.Reader.Buffered()
266 if buffered != 0 {
267 conn.(*hijackedConn).updateReadSize(buffered)
268 data, _ := brw.Peek(buffered)
269 brw.Reader.Reset(io.MultiReader(bytes.NewReader(data), conn))
270 // peek to make buffered data appear, as Reset will make it 0
271 _, _ = brw.Peek(buffered)
272 } else {
273 brw.Reader.Reset(conn)
274 }
275 return conn, brw, nil
276}
277
278// used to track the size of hijacked response writers
279type hijackedConn struct {

Callers 1

handleUpgradeResponseMethod · 0.80

Calls 3

updateReadSizeMethod · 0.80
ResetMethod · 0.65
BufferedMethod · 0.65

Tested by

no test coverage detected