snapshot of https://github.com/centrifugal/centrifugo.git (master, 2026-09-16; blobs > 131072B omitted)
This commit is contained in:
70
internal/websocket/http2.go
Normal file
70
internal/websocket/http2.go
Normal file
@@ -0,0 +1,70 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user