Commit Graph

5339 Commits

Author SHA1 Message Date
Marten Seemann
3a41dd00d3 use Go 1.16 in the linting workflow, run go mod tidy using Go 1.16 2021-03-05 13:28:37 +08:00
Kévin Dunglas
3b916f2e80 allow sending 1xx responses (#3047)
Currently, it's not possible to send informational responses such as 103 Early Hints or 102 Processing.

This patch allows calling WriteHeader() multiple times in order to send informational responses before the final one.
It follows the patch for HTTP/1 (golang/go#42597) and HTTP/2 (golang/net#96).

In conformance with RFC 8297, if the status code is 103 the current content of the header map is also sent. Its content is not removed after the call to WriteHeader() because the headers must also be included in the final response.

The Chrome and Fastly teams are starting a large-scale experiment to measure the real-life impact of the 103 status code.
Using Early Hints is proposed as a (partial) alternative to Server Push, which are going to be removed from Chrome: https://groups.google.com/a/chromium.org/g/blink-dev/c/K3rYLvmQUBY/m/21anpFhxAQAJ

Being able to send this status code from servers implemented using Go would help to see if implementing it in browsers is worth it.
2021-03-05 10:03:31 +08:00
Marten Seemann
f513437854 Merge pull request #3062 from lucas-clemente/fix-retry-draft-34
fix retry key and nonce for draft-34
2021-03-04 11:13:34 +08:00
Marten Seemann
048543bd50 set the TIMESCALE_FACTOR for integration tests on CircleCI and GitHub Actions 2021-03-04 10:45:27 +08:00
Marten Seemann
543d144690 Merge pull request #3028 from lucas-clemente/dplpmtud
implement DPLPMTUD
2021-03-03 23:04:22 +08:00
Marten Seemann
bd172b2a5a fix retry key and nonce for draft-34 2021-03-03 23:01:42 +08:00
Marten Seemann
765d26f132 don't reduce the congestion window when a path MTU probe packet is lost 2021-03-03 12:00:52 +08:00
Marten Seemann
ac87292e87 start path MTU discovery when the handshake completes 2021-03-03 12:00:51 +08:00
Marten Seemann
cb1eab22de add a quic.Config option to disable Path MTU discovery 2021-03-03 12:00:14 +08:00
Marten Seemann
142071253d add a method to update the packer's max packet size 2021-03-03 12:00:14 +08:00
Marten Seemann
c6ae91a8cf introduce a mtuDiscoverer interface 2021-03-03 12:00:14 +08:00
Marten Seemann
04642c9e4d add a MTU discoverer that performs a binary search to determine the MTU 2021-03-03 12:00:14 +08:00
Marten Seemann
82ac6dcf6d rename MaxReceivePacketSize to MaxPacketBufferSize
We use the same buffer size for sending and receiving packets.
2021-03-03 12:00:14 +08:00
Marten Seemann
fb5a45ac53 implement a function to pack MTU probe packets 2021-03-03 12:00:14 +08:00
Marten Seemann
91a314258d use the actual maximum packet size in the pacer 2021-03-03 12:00:14 +08:00
Marten Seemann
dd8b21f264 use the actual maximum packet size in the Reno congestion controller 2021-03-03 12:00:14 +08:00
Marten Seemann
8895a79e30 initialize the slow start threshold to infinity 2021-03-03 12:00:14 +08:00
Marten Seemann
eea0b1eacd rename MaxPacketSizeIPv{4,6} to InitialPacketSizeIPv{4,6} 2021-03-03 12:00:14 +08:00
Marten Seemann
2c45f2b11d Merge pull request #3041 from lucas-clemente/send-immediately-before-handshake-completion
only read multiple packets at a time after handshake completion
2021-03-03 11:55:54 +08:00
Marten Seemann
aa012eca9a Merge pull request #3056 from lucas-clemente/fix-0rtt-key-export
update qtls to a version that doesn't exports 0-RTT when it's rejected
2021-03-03 11:42:34 +08:00
Marten Seemann
53270dde9e only read multiple packets at a time after handshake completion
It's more important that acknowledge packets in a timely manner before
handshake completion. On the server side, we should send out the HANDSHAKE_DONE
frame as soon as possible.
2021-03-03 11:33:00 +08:00
Marten Seemann
575cd3ceb6 update qtls to a version that doesn't export 0-RTT when it's rejected 2021-03-03 11:27:34 +08:00
Marten Seemann
74569a514b Merge pull request #3040 from lucas-clemente/improve-handshake-tests
make the certificate verificiation integration tests more explicit
2021-03-03 00:27:46 +08:00
Marten Seemann
ac16ee565b Merge pull request #3049 from lucas-clemente/mockgen-source-mode
update gomock to v1.5.0, use mockgen source mode
2021-03-02 21:27:48 +08:00
Marten Seemann
1c9977d8d6 Merge pull request #3054 from lucas-clemente/trace-dropped-0rtt-keys
trace dropping of 0-RTT keys
2021-03-02 21:27:32 +08:00
Marten Seemann
40bc7362ef Merge pull request #3042 from lucas-clemente/improve-timeout-test
improve timeout measurement in the timeout test
2021-03-02 21:27:02 +08:00
Marten Seemann
ca18ba6f81 Merge pull request #3052 from lucas-clemente/randomized-packet-receive-test
add a randomized test for the received_packet_history
2021-03-02 21:26:41 +08:00
Marten Seemann
cb7aa88c76 Merge pull request #3055 from lucas-clemente/fix-max-receive-window-doc
fix documentation of default values for MaxReceive{Stream, Connection}FlowControlWindow
2021-03-02 21:26:24 +08:00
Marten Seemann
3e8e6b2e36 fix documentation of the default MaxReceiveConnectionFlowControlWindow 2021-03-01 11:33:42 +08:00
Marten Seemann
be4dc49114 fix documentation of the default MaxReceiveStreamFlowControlWindow 2021-03-01 11:33:15 +08:00
Marten Seemann
110f949441 trace dropping of 0-RTT keys 2021-03-01 10:37:31 +08:00
Marten Seemann
ab46df5071 fix logging of dropped 0-RTT keys
Client and server only possess write or read 0-RTT keys, respectively.
We should therefore only emit a single event when those are dropped.
2021-03-01 10:30:59 +08:00
Marten Seemann
75f49662c0 add a randomized test for the received_packet_history 2021-02-24 13:37:50 +08:00
Marten Seemann
9b627ac93d Merge pull request #3051 from q191201771/merge-packet-number-ranges
refactor merge packet number ranges
2021-02-24 13:37:11 +08:00
q191201771
de0a6d4bbe refactor merge packet number ranges 2021-02-24 11:54:33 +08:00
Marten Seemann
e3c1a67708 add draft-34 to support versions in README 2021-02-20 11:19:29 +08:00
Marten Seemann
efe6d02bef use mockgen source mode 2021-02-20 09:59:44 +08:00
Marten Seemann
383f1a6e89 update gomock to v1.5.0 2021-02-20 09:33:43 +08:00
Marten Seemann
ff2e7ba635 update README to reflect dropped Go 1.14 support 2021-02-20 09:26:49 +08:00
Marten Seemann
972a08c40d Merge pull request #3048 from q191201771/redundant-nil-check
remove redundant nil-check in the packet packer
2021-02-19 15:42:44 +08:00
q191201771
d16f36a1e3 the pointer is always not nil, no need to check it 2021-02-18 20:05:16 +08:00
Marten Seemann
bfad41165c Merge pull request #3046 from lucas-clemente/avoid-rand-source
avoid using rand.Source
2021-02-18 11:13:47 +08:00
Marten Seemann
11c5c548b6 improve timeout measurement in the timeout test
When not sending any packets, the idle timeout starts when receiving the
HANDSHAKE_DONE frame (on the client side), not when the handshake completes.
2021-02-18 09:59:04 +08:00
Marten Seemann
7ee88def4a make it possible to use a custom tracer and the default tracer in tests 2021-02-18 09:59:04 +08:00
Marten Seemann
b94a4440cc simplify connection tracer creation in integration tests 2021-02-18 09:59:04 +08:00
Marten Seemann
03fe636711 reduce memory footprint of the connIDManager 2021-02-18 09:58:34 +08:00
Marten Seemann
115fc28bbe avoid initializing a math/rand.Rand in the connIDManager
math/rand.Source uses a lot of memory, as it keeps an array of 607
int64s as internal state.
2021-02-18 09:58:34 +08:00
Marten Seemann
3c0726e132 move the random number generator to the utils package 2021-02-18 09:58:34 +08:00
Marten Seemann
c72f05aa41 Merge pull request #3045 from lucas-clemente/go116
update Go to 1.16, drop support for 1.14
2021-02-18 09:58:06 +08:00
Marten Seemann
62a906de3c update Go to 1.16, drop support for 1.14 2021-02-17 12:17:46 +08:00