1package wire 2 3import ( 4 "bytes" 5 6 "github.com/lucas-clemente/quic-go/internal/protocol" 7 "github.com/lucas-clemente/quic-go/internal/utils" 8) 9 10// A MaxDataFrame carries flow control information for the connection 11type MaxDataFrame struct { 12 MaximumData protocol.ByteCount 13} 14 15// parseMaxDataFrame parses a MAX_DATA frame 16func parseMaxDataFrame(r *bytes.Reader, _ protocol.VersionNumber) (*MaxDataFrame, error) { 17 if _, err := r.ReadByte(); err != nil { 18 return nil, err 19 } 20 21 frame := &MaxDataFrame{} 22 byteOffset, err := utils.ReadVarInt(r) 23 if err != nil { 24 return nil, err 25 } 26 frame.MaximumData = protocol.ByteCount(byteOffset) 27 return frame, nil 28} 29 30// Write writes a MAX_STREAM_DATA frame 31func (f *MaxDataFrame) Write(b *bytes.Buffer, version protocol.VersionNumber) error { 32 b.WriteByte(0x10) 33 utils.WriteVarInt(b, uint64(f.MaximumData)) 34 return nil 35} 36 37// Length of a written frame 38func (f *MaxDataFrame) Length(version protocol.VersionNumber) protocol.ByteCount { 39 return 1 + utils.VarIntLen(uint64(f.MaximumData)) 40} 41