1
2
3
4
5 package quic
6
7 import (
8 "sync"
9 "time"
10
11 "golang.org/x/net/internal/quic/quicwire"
12 )
13
14
15
16 type sentPacket struct {
17 num packetNumber
18 size int
19 time time.Time
20 ptype packetType
21
22 state sentPacketState
23 ackEliciting bool
24 inFlight bool
25
26
27
28
29
30
31
32
33
34 b []byte
35 n int
36 }
37
38 type sentPacketState uint8
39
40 const (
41 sentPacketSent = sentPacketState(iota)
42 sentPacketAcked
43 sentPacketLost
44 sentPacketUnsent
45 )
46
47 var sentPool = sync.Pool{
48 New: func() any {
49 return &sentPacket{}
50 },
51 }
52
53 func newSentPacket() *sentPacket {
54 sent := sentPool.Get().(*sentPacket)
55 sent.reset()
56 return sent
57 }
58
59
60 func (sent *sentPacket) recycle() {
61 sentPool.Put(sent)
62 }
63
64 func (sent *sentPacket) reset() {
65 *sent = sentPacket{
66 b: sent.b[:0],
67 }
68 }
69
70
71 func (sent *sentPacket) markAckEliciting() {
72 sent.ackEliciting = true
73 sent.inFlight = true
74 }
75
76
77
78 func (sent *sentPacket) appendNonAckElicitingFrame(frameType byte) {
79 sent.b = append(sent.b, frameType)
80 }
81
82 func (sent *sentPacket) appendAckElicitingFrame(frameType byte) {
83 sent.ackEliciting = true
84 sent.inFlight = true
85 sent.b = append(sent.b, frameType)
86 }
87
88 func (sent *sentPacket) appendInt(v uint64) {
89 sent.b = quicwire.AppendVarint(sent.b, v)
90 }
91
92 func (sent *sentPacket) appendOffAndSize(start int64, size int) {
93 sent.b = quicwire.AppendVarint(sent.b, uint64(start))
94 sent.b = quicwire.AppendVarint(sent.b, uint64(size))
95 }
96
97
98
99 func (sent *sentPacket) next() (frameType byte) {
100 f := sent.b[sent.n]
101 sent.n++
102 return f
103 }
104
105 func (sent *sentPacket) nextInt() uint64 {
106 v, n := quicwire.ConsumeVarint(sent.b[sent.n:])
107 sent.n += n
108 return v
109 }
110
111 func (sent *sentPacket) nextRange() (start, end int64) {
112 start = int64(sent.nextInt())
113 end = start + int64(sent.nextInt())
114 return start, end
115 }
116
117 func (sent *sentPacket) done() bool {
118 return sent.n == len(sent.b)
119 }
120
View as plain text