forked from quic-go/quic-go
http3: simplify connection closing in the frame parser (#5196)
No functional change expected.
This commit is contained in:
@@ -156,7 +156,7 @@ func (c *ClientConn) handleBidirectionalStreams(streamHijacker func(FrameType, q
|
|||||||
}
|
}
|
||||||
fp := &frameParser{
|
fp := &frameParser{
|
||||||
r: str,
|
r: str,
|
||||||
conn: &c.connection,
|
closeConn: c.CloseWithError,
|
||||||
unknownFrameHandler: func(ft FrameType, e error) (processed bool, err error) {
|
unknownFrameHandler: func(ft FrameType, e error) (processed bool, err error) {
|
||||||
id := c.Context().Value(quic.ConnectionTracingKey).(quic.ConnectionTracingID)
|
id := c.Context().Value(quic.ConnectionTracingKey).(quic.ConnectionTracingID)
|
||||||
return streamHijacker(ft, id, str, e)
|
return streamHijacker(ft, id, str, e)
|
||||||
|
|||||||
@@ -287,7 +287,7 @@ func (c *connection) handleUnidirectionalStreams(hijack func(StreamType, quic.Co
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *connection) handleControlStream(str *quic.ReceiveStream) {
|
func (c *connection) handleControlStream(str *quic.ReceiveStream) {
|
||||||
fp := &frameParser{conn: c.Connection, r: str}
|
fp := &frameParser{closeConn: c.Connection.CloseWithError, r: str}
|
||||||
f, err := fp.ParseNext()
|
f, err := fp.ParseNext()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var serr *quic.StreamError
|
var serr *quic.StreamError
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ var errHijacked = errors.New("hijacked")
|
|||||||
|
|
||||||
type frameParser struct {
|
type frameParser struct {
|
||||||
r io.Reader
|
r io.Reader
|
||||||
conn quic.Connection
|
closeConn func(quic.ApplicationErrorCode, string) error
|
||||||
unknownFrameHandler unknownFrameHandlerFunc
|
unknownFrameHandler unknownFrameHandlerFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,7 +70,7 @@ func (p *frameParser) ParseNext() (frame, error) {
|
|||||||
return parseGoAwayFrame(qr, l)
|
return parseGoAwayFrame(qr, l)
|
||||||
case 0xd: // MAX_PUSH_ID
|
case 0xd: // MAX_PUSH_ID
|
||||||
case 0x2, 0x6, 0x8, 0x9:
|
case 0x2, 0x6, 0x8, 0x9:
|
||||||
p.conn.CloseWithError(quic.ApplicationErrorCode(ErrCodeFrameUnexpected), "")
|
p.closeConn(quic.ApplicationErrorCode(ErrCodeFrameUnexpected), "")
|
||||||
return nil, fmt.Errorf("http3: reserved frame type: %d", t)
|
return nil, fmt.Errorf("http3: reserved frame type: %d", t)
|
||||||
}
|
}
|
||||||
// skip over unknown frames
|
// skip over unknown frames
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ func TestParserReservedFrameType(t *testing.T) {
|
|||||||
|
|
||||||
fp := frameParser{
|
fp := frameParser{
|
||||||
r: bytes.NewReader(data),
|
r: bytes.NewReader(data),
|
||||||
conn: client,
|
closeConn: client.CloseWithError,
|
||||||
}
|
}
|
||||||
_, err := fp.ParseNext()
|
_, err := fp.ParseNext()
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
|
|||||||
@@ -562,7 +562,7 @@ func (s *Server) handleRequest(conn *connection, str datagramStream, decoder *qp
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fp := &frameParser{conn: conn, r: str, unknownFrameHandler: ufh}
|
fp := &frameParser{closeConn: conn.CloseWithError, r: str, unknownFrameHandler: ufh}
|
||||||
frame, err := fp.ParseNext()
|
frame, err := fp.ParseNext()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !errors.Is(err, errHijacked) {
|
if !errors.Is(err, errHijacked) {
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ func newStream(str datagramStream, conn *connection, parseTrailer func(io.Reader
|
|||||||
func (s *Stream) Read(b []byte) (int, error) {
|
func (s *Stream) Read(b []byte) (int, error) {
|
||||||
fp := &frameParser{
|
fp := &frameParser{
|
||||||
r: s.datagramStream,
|
r: s.datagramStream,
|
||||||
conn: s.conn,
|
closeConn: s.conn.CloseWithError,
|
||||||
}
|
}
|
||||||
if s.bytesRemainingInFrame == 0 {
|
if s.bytesRemainingInFrame == 0 {
|
||||||
parseLoop:
|
parseLoop:
|
||||||
@@ -196,7 +196,7 @@ func (s *RequestStream) SendRequestHeader(req *http.Request) error {
|
|||||||
func (s *RequestStream) ReadResponse() (*http.Response, error) {
|
func (s *RequestStream) ReadResponse() (*http.Response, error) {
|
||||||
qstr := s.datagramStream
|
qstr := s.datagramStream
|
||||||
fp := &frameParser{
|
fp := &frameParser{
|
||||||
conn: s.conn,
|
closeConn: s.conn.CloseWithError,
|
||||||
r: &tracingReader{
|
r: &tracingReader{
|
||||||
Reader: qstr,
|
Reader: qstr,
|
||||||
first: &s.firstByte,
|
first: &s.firstByte,
|
||||||
|
|||||||
Reference in New Issue
Block a user