Marten Seemann
adc13be540
implement a memory-optimized time.Time replacement ( #5334 )
...
* implement a memory-optimized time.Time replacement
* monotime: properly handle systems with bad timer resolution (Windows)
* monotime: simplify Since
2025-09-14 08:12:10 +02:00
Marten Seemann
78e77bcfdb
convert SendStream to a struct ( #5172 )
2025-06-01 05:53:53 +02:00
Marten Seemann
267cca773b
switch from math/rand to math/rand/v2 ( #5045 )
...
* switch from math/rand to math/rand/v2
* switch away from golang.org/x/exp/rand
2025-04-19 09:01:22 +02:00
Marten Seemann
c42f8456ab
optimize packetization of DATA_BLOCKED frames ( #4845 )
...
DATA_BLOCKED frames should be sent in the same as the STREAM frames that
resulted in the connection becoming blocked on connection flow control.
If there's not enough space left in that packet, the DATA_BLOCKED frame
is sent in the next packet.
2025-01-08 11:41:10 +08:00
Marten Seemann
3cb5f3e104
optimize packing of STREAM_DATA_BLOCKED frames ( #4801 )
...
* refactor the framer to pack both control and STREAM frames
* refactor framer STREAM frame packing logic
* pack STREAM_DATA_BLOCKED in the same packet as the STREAM frame
This makes debugging easier (and is slightly more efficient). In the
pathological case where there is not enough space remaning in the packet
to pack the STREAM_DATA_BLOCKED frame, it is queued for the next packet.
* add an integration test
2025-01-07 12:06:00 +08:00
Marten Seemann
0b9bd3c4de
remove redundant bool return value from sendStream.popStreamFrame ( #4828 )
2024-12-31 13:51:14 +08:00
Marten Seemann
1004266ac1
migrate framer tests away from Ginkgo ( #4775 )
2024-12-21 10:52:51 +08:00
Marten Seemann
40a768e77b
flowcontrol: avoid calling time.Now(), pass time as a function parameter ( #4731 )
2024-11-28 17:46:22 +08:00
Marten Seemann
af9fa7a555
queue stream-related control frames in the respective stream ( #4610 )
...
* use a separate method for queueing control frames from the streams map
* queue stream-related control frames in the respective stream
2024-08-04 15:42:56 -07:00
Marten Seemann
a147bee190
simplify frame queuing logic on 0-RTT rejection ( #4607 )
...
Even though we currently don't do so, sending MAX_DATA, MAX_STREAM_DATA
and MAX_STREAMS is allowed in 0-RTT.
2024-08-03 17:00:41 -07:00
Marten Seemann
42f04d4e02
refactor frame packing to logic to not access the streams map ( #4596 )
...
* avoid accessing the streams map when packing stream data
* avoid accessing the streams map when packing flow control frames
* remove streamGetter interface
2024-07-28 12:32:54 -07:00
Marten Seemann
fc79a77ffe
remove unused framer interface ( #4599 )
...
No functional change expected.
2024-07-24 16:55:09 -07:00
Marten Seemann
4a99b816ae
close connection when an abnormally large number of frames are queued ( #4369 )
...
Under normal circumstances, we should be able to send out control frames
right away, so we don't expect any queue to build up. To defend against
resource exhaustion attacks, we limit the control frame queue to 16384
elements.
2024-03-17 17:29:00 -07:00
Marten Seemann
fbaa941ea1
protocol: rename VersionNumber to Version ( #4295 )
2024-01-31 21:57:33 -08:00
Marten Seemann
574dc84c0c
limit the number of queued PATH_RESPONSE frames to 256 ( #4199 )
2023-12-12 20:17:09 -08:00
Marten Seemann
2797f85fc0
switch from unmaintained golang/mock to go.uber.org/mock ( #4050 )
2023-08-28 02:23:55 -07:00
Marten Seemann
0438eada95
use ackhandler.Frame directly, not as a pointer, remove its sync.Pool ( #3835 )
2023-06-02 04:56:18 -07:00
Marten Seemann
f8d24ef1e9
don't use closures for passing OnLost and OnAcked STREAM frame callbacks ( #3833 )
2023-06-02 04:14:04 -07:00
Marten Seemann
58cedf7a4f
rename module, adjust import paths to quic-go/quic-go ( #3680 )
2023-01-21 19:53:57 -08:00
Marten Seemann
00624f623d
refactor the framer to remove the version param from the constructor
2023-01-18 21:49:27 +13:00
Marten Seemann
1646fd545e
refactor send stream to remove version from constructor
2023-01-18 20:51:59 +13:00
Marten Seemann
2aa71ff76b
use a sync.Pool for ackhandler.Frames ( #3656 )
2023-01-17 23:15:02 -08:00
Marten Seemann
870fbe7ab0
migrate to Ginkgo v2
2022-10-11 16:38:44 +04:00
Marten Seemann
1aced95d41
use an array instead of a byte slice for Connection IDs
2022-08-29 11:30:31 +03:00
Marten Seemann
c741b6fc09
drop STREAM and *_BLOCKED frames from queue when 0-RTT is rejected
2021-03-09 17:59:11 +08:00
Marten Seemann
fa07078d81
rename DataBlockedFrame.DataLimit to MaximumData
2020-07-02 16:41:43 +07:00
Marten Seemann
f4519cfd32
rename MaxDataFrame.ByteOffset to MaximumData
2020-07-02 16:41:43 +07:00
Marten Seemann
fa381fffa0
add a function to tell if the framer has data
2020-06-01 09:31:11 +07:00
Marten Seemann
0edb3f2b93
return ackhandler.Frames from sendStream.popStreamFrame
2019-08-31 17:34:54 +07:00
Marten Seemann
e622207822
assemble ackhandler.Frames, not wire.Frames, when packing a packet
2019-08-31 17:34:54 +07:00
Marten Seemann
c0286b0c2e
fix calculation of the length of appended STREAM frames
...
For the last STREAM frame we omit the Length field. When packing STREAM
frames, we need to account for this byte saving when calculating the
length of the payload.
2019-08-10 14:55:27 +07:00
Marten Seemann
dba964f735
fix packing of maximum-size packets
2019-04-27 00:35:55 +09:00
Marten Seemann
109bb3fe62
pass the length of the packet being packet around in the packet packer
2019-04-22 10:26:11 +09:00
Marten Seemann
fbe8844006
remove some unneccessary type conversions
2019-02-27 19:30:55 +09:00
Marten Seemann
387613aa20
rename the BLOCKED from to DATA_BLOCKED
2018-11-10 09:05:06 +07:00
Marten Seemann
82508f1562
use tls-tris instead of mint
2018-10-26 16:18:49 +07:00
Marten Seemann
25847cfc30
handle the crypto stream separately in the packet packer
2018-10-01 11:25:57 -07:00
Marten Seemann
06db39836b
move queueing of control frames to the framer
2018-09-28 21:04:57 -06:00