Files
upstream-mirror b352a9a30d
Some checks failed
test / Lint (push) Failing after 3s
test / Test with Go 1.26.8 (push) Failing after 2s
snapshot of https://github.com/centrifugal/centrifugo.git (master, 2026-09-16; blobs > 131072B omitted)
2026-09-16 01:17:21 +05:00

71 lines
1.3 KiB
Go

package websocket
import (
"io"
"net"
"net/http"
"time"
)
var (
_ net.Conn = (*http2Stream)(nil)
)
// http2Stream is a wrapper for HTTP/2 extended CONNECT tunnel.
type http2Stream struct {
io.ReadCloser
io.Writer
rc *http.ResponseController
}
func (s *http2Stream) Read(p []byte) (int, error) {
return s.ReadCloser.Read(p)
}
func (s *http2Stream) Write(p []byte) (int, error) {
n, err := s.Writer.Write(p)
if err != nil {
return n, err
}
err = s.rc.Flush()
return n, err
}
func (s *http2Stream) Flush() error {
return s.rc.Flush()
}
func (s *http2Stream) Close() error {
return s.ReadCloser.Close()
}
// LocalAddr is not implemented for HTTP/2 streams.
// May be taken from request if needed.
func (s *http2Stream) LocalAddr() net.Addr {
return &net.TCPAddr{}
}
// RemoteAddr is not implemented for HTTP/2 streams.
// May be taken from request if needed.
func (s *http2Stream) RemoteAddr() net.Addr {
return &net.TCPAddr{}
}
// SetDeadline ...
func (s *http2Stream) SetDeadline(t time.Time) error {
if err := s.rc.SetWriteDeadline(t); err != nil {
return err
}
return s.rc.SetReadDeadline(t)
}
// SetReadDeadline ...
func (s *http2Stream) SetReadDeadline(t time.Time) error {
return s.rc.SetReadDeadline(t)
}
// SetWriteDeadline ...
func (s *http2Stream) SetWriteDeadline(t time.Time) error {
return s.rc.SetWriteDeadline(t)
}