package quic
import (
"fmt"
"github.com/quic-go/quic-go/internal/protocol"
"github.com/quic-go/quic-go/internal/wire"
)
type cryptoStreamManager struct {
initialStream *initialCryptoStream
handshakeStream *cryptoStream
oneRTTStream *cryptoStream
}
func newCryptoStreamManager(
initialStream *initialCryptoStream ,
handshakeStream *cryptoStream ,
oneRTTStream *cryptoStream ,
) *cryptoStreamManager {
return &cryptoStreamManager {
initialStream : initialStream ,
handshakeStream : handshakeStream ,
oneRTTStream : oneRTTStream ,
}
}
func (m *cryptoStreamManager ) HandleCryptoFrame (frame *wire .CryptoFrame , encLevel protocol .EncryptionLevel ) error {
switch encLevel {
case protocol .EncryptionInitial :
return m .initialStream .HandleCryptoFrame (frame )
case protocol .EncryptionHandshake :
return m .handshakeStream .HandleCryptoFrame (frame )
case protocol .Encryption1RTT :
return m .oneRTTStream .HandleCryptoFrame (frame )
default :
return fmt .Errorf ("received CRYPTO frame with unexpected encryption level: %s" , encLevel )
}
}
func (m *cryptoStreamManager ) GetCryptoData (encLevel protocol .EncryptionLevel ) []byte {
switch encLevel {
case protocol .EncryptionInitial :
return m .initialStream .GetCryptoData ()
case protocol .EncryptionHandshake :
return m .handshakeStream .GetCryptoData ()
case protocol .Encryption1RTT :
return m .oneRTTStream .GetCryptoData ()
default :
panic (fmt .Sprintf ("received CRYPTO frame with unexpected encryption level: %s" , encLevel ))
}
}
func (m *cryptoStreamManager ) GetPostHandshakeData (maxSize protocol .ByteCount ) *wire .CryptoFrame {
if !m .oneRTTStream .HasData () {
return nil
}
return m .oneRTTStream .PopCryptoFrame (maxSize )
}
func (m *cryptoStreamManager ) Drop (encLevel protocol .EncryptionLevel ) error {
switch encLevel {
case protocol .EncryptionInitial :
return m .initialStream .Finish ()
case protocol .EncryptionHandshake :
return m .handshakeStream .Finish ()
default :
panic (fmt .Sprintf ("dropped unexpected encryption level: %s" , encLevel ))
}
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .