1package wire 2 3import ( 4 "bytes" 5 6 "github.com/ooni/psiphon/oopsi/github.com/Psiphon-Labs/quic-go/internal/protocol" 7 "github.com/ooni/psiphon/oopsi/github.com/Psiphon-Labs/quic-go/internal/utils" 8) 9 10// A DataBlockedFrame is a DATA_BLOCKED frame 11type DataBlockedFrame struct { 12 DataLimit protocol.ByteCount 13} 14 15func parseDataBlockedFrame(r *bytes.Reader, _ protocol.VersionNumber) (*DataBlockedFrame, error) { 16 if _, err := r.ReadByte(); err != nil { 17 return nil, err 18 } 19 offset, err := utils.ReadVarInt(r) 20 if err != nil { 21 return nil, err 22 } 23 return &DataBlockedFrame{ 24 DataLimit: protocol.ByteCount(offset), 25 }, nil 26} 27 28func (f *DataBlockedFrame) Write(b *bytes.Buffer, version protocol.VersionNumber) error { 29 typeByte := uint8(0x14) 30 b.WriteByte(typeByte) 31 utils.WriteVarInt(b, uint64(f.DataLimit)) 32 return nil 33} 34 35// Length of a written frame 36func (f *DataBlockedFrame) Length(version protocol.VersionNumber) protocol.ByteCount { 37 return 1 + utils.VarIntLen(uint64(f.DataLimit)) 38} 39