forked from quic-go/quic-go
ignore data for closed streams
This commit is contained in:
@@ -23,7 +23,6 @@ type receivedPacket struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
errReopeningStreamsNotAllowed = errors.New("Reopening Streams not allowed")
|
|
||||||
errRstStreamOnInvalidStream = errors.New("RST_STREAM received for unknown stream")
|
errRstStreamOnInvalidStream = errors.New("RST_STREAM received for unknown stream")
|
||||||
errWindowUpdateOnInvalidStream = errors.New("WINDOW_UPDATE received for unknown stream")
|
errWindowUpdateOnInvalidStream = errors.New("WINDOW_UPDATE received for unknown stream")
|
||||||
errWindowUpdateOnClosedStream = errors.New("WINDOW_UPDATE received for an already closed stream")
|
errWindowUpdateOnClosedStream = errors.New("WINDOW_UPDATE received for an already closed stream")
|
||||||
@@ -249,7 +248,6 @@ func (s *Session) handlePacket(remoteAddr interface{}, hdr *publicHeader, data [
|
|||||||
s.receivedPackets <- receivedPacket{remoteAddr: remoteAddr, publicHeader: hdr, data: data}
|
s.receivedPackets <- receivedPacket{remoteAddr: remoteAddr, publicHeader: hdr, data: data}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Ignore data for closed streams
|
|
||||||
func (s *Session) handleStreamFrame(frame *frames.StreamFrame) error {
|
func (s *Session) handleStreamFrame(frame *frames.StreamFrame) error {
|
||||||
s.streamsMutex.RLock()
|
s.streamsMutex.RLock()
|
||||||
str, streamExists := s.streams[frame.StreamID]
|
str, streamExists := s.streams[frame.StreamID]
|
||||||
@@ -264,7 +262,8 @@ func (s *Session) handleStreamFrame(frame *frames.StreamFrame) error {
|
|||||||
str = ss.(*stream)
|
str = ss.(*stream)
|
||||||
}
|
}
|
||||||
if str == nil {
|
if str == nil {
|
||||||
return errReopeningStreamsNotAllowed
|
// Stream is closed, ignore
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
err := str.AddStreamFrame(frame)
|
err := str.AddStreamFrame(frame)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ var _ = Describe("Session", func() {
|
|||||||
Expect(session.streams[5]).To(BeNil())
|
Expect(session.streams[5]).To(BeNil())
|
||||||
})
|
})
|
||||||
|
|
||||||
It("rejects streams that existed previously", func() {
|
It("ignores streams that existed previously", func() {
|
||||||
session.handleStreamFrame(&frames.StreamFrame{
|
session.handleStreamFrame(&frames.StreamFrame{
|
||||||
StreamID: 5,
|
StreamID: 5,
|
||||||
Data: []byte{},
|
Data: []byte{},
|
||||||
@@ -251,7 +251,7 @@ var _ = Describe("Session", func() {
|
|||||||
StreamID: 5,
|
StreamID: 5,
|
||||||
Data: []byte{},
|
Data: []byte{},
|
||||||
})
|
})
|
||||||
Expect(err).To(MatchError(errReopeningStreamsNotAllowed))
|
Expect(err).To(BeNil())
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user