move the unencrypted STREAM frame check from the unpacker to the session

This commit is contained in:
Marten Seemann
2018-03-25 18:33:46 +02:00
parent 6f12844094
commit 2fbc994d29
6 changed files with 38 additions and 60 deletions

View File

@@ -572,7 +572,7 @@ func (s *session) handleFrames(fs []wire.Frame, encLevel protocol.EncryptionLeve
wire.LogFrame(ff, false)
switch frame := ff.(type) {
case *wire.StreamFrame:
err = s.handleStreamFrame(frame)
err = s.handleStreamFrame(frame, encLevel)
case *wire.AckFrame:
err = s.handleAckFrame(frame, encLevel)
case *wire.ConnectionCloseFrame:
@@ -615,12 +615,14 @@ func (s *session) handlePacket(p *receivedPacket) {
}
}
func (s *session) handleStreamFrame(frame *wire.StreamFrame) error {
func (s *session) handleStreamFrame(frame *wire.StreamFrame, encLevel protocol.EncryptionLevel) error {
if frame.StreamID == s.version.CryptoStreamID() {
if frame.FinBit {
return errors.New("Received STREAM frame with FIN bit for the crypto stream")
}
return s.cryptoStream.handleStreamFrame(frame)
} else if encLevel <= protocol.EncryptionUnencrypted {
return qerr.Error(qerr.UnencryptedStreamData, fmt.Sprintf("received unencrypted stream data on stream %d", frame.StreamID))
}
str, err := s.streamsMap.GetOrOpenReceiveStream(frame.StreamID)
if err != nil {