Marten Seemann
9608e8563f
only accept 3 retries
...
While the server is allowed to perform multiple Retries, the client
should impose a limit in order to avoid being caught in an endless loop.
2018-08-14 18:35:25 +07:00
Marten Seemann
872e1747f4
always use connection IDs longer than 8 bytes when sending a Retry
...
A server is allowed to perform multiple Retries. There's little to gain
from doing so, but it's something our API allows. If a server performs
multiple Retries, it must use a connection ID that's at least 8 bytes
long. Only if it doesn't perform any further Retries it is allowed to
use shorter IDs. Therefore, we're on the safe side by always using a
long connection ID.
This shouldn't have a performance impact, since the server changes the
connection ID to a short value with the first Handshake packet it sends.
2018-08-14 17:34:21 +07:00
Marten Seemann
ad5a3e2fa0
also use the multiplexer for the server
2018-08-08 10:03:22 +07:00
Marten Seemann
f02dc92a32
make the connection ID length configurable
2018-07-03 18:34:31 +07:00
Marten Seemann
73f7636537
use a random length destination connection ID on the Initial packet
...
The destination connection ID on the Initial packet must be at least 8
bytes long. By using all valid values, we make sure that the everything
works correctly. The server chooses a new connection ID with the Retry
or Handshake packet it sends, so the overhead of this is negligible.
2018-07-03 18:01:41 +07:00
Marten Seemann
0bd7e744ff
implement parsing of headers with different connection ID lengths
2018-07-03 18:01:41 +07:00
Marten Seemann
f7e05c3158
drop Initial packets that have a too short Destination Connection ID
2018-06-16 21:15:46 +07:00
Marten Seemann
3e03055a7d
use varint packet numbers in IETF QUIC headers
2018-06-06 16:07:47 +02:00
Marten Seemann
530170430a
add support for QUIC 43
2018-06-05 12:41:56 +02:00
Marten Seemann
3370f9fa58
add support for QUIC 42
...
QUIC 42 accepts overlapping stream data. We've been doing this for some
time already, so we don't need any additional changes.
2018-06-02 19:49:28 +08:00
Marten Seemann
2b97fb41c9
switch to a byte-based congestion controller
...
Chrome removed the packet-based congestion controller and switched to
byte-based as well.
2018-05-02 23:45:23 +09:00
Marten Seemann
0e58a679d6
Merge pull request #1319 from lucas-clemente/fix-1307
...
use different source and destination connection IDs
2018-04-23 17:29:45 +09:00
Marten Seemann
f353658547
limit the size of an ACK frame to 1000 bytes
2018-04-23 16:44:39 +09:00
Marten Seemann
fae32101a0
use different source and destination connection IDs
2018-04-23 15:23:01 +09:00
Marten Seemann
d47124d14d
add more methods to the protocol.ConnectionID
...
This will make it easier to change the underlying type of the connection
ID (potentially an array is faster than a byte slice).
2018-04-19 16:08:06 +09:00
Marten Seemann
1a035a265c
change the type of Connection ID to byte slice
2018-04-18 22:41:24 +09:00
Marten Seemann
af8971d8c9
move connection ID generation from the utils to the protocol package
2018-04-17 20:21:06 +09:00
Marten Seemann
b5977236ff
implement packet send modes to determine what kind of packets are sent
2018-03-13 14:49:48 +01:00
Marten Seemann
6ccc76a130
send packets with maximum IPv4 and IPv6 packet size
2018-03-09 22:36:44 +07:00
Marten Seemann
8fc0f53a8d
move constants used by the received packet handler to ackhandler package
2018-03-05 19:39:59 +07:00
Marten Seemann
b6ca910a52
implement the IETF draft 10 header changes
2018-03-05 19:13:37 +07:00
Marten Seemann
656dff6163
introduce a UsesStopWaitingFrames() method for version numbers
2018-03-02 16:00:11 +07:00
Marten Seemann
624ac61412
reject unknown versions in the quic.Config
2018-02-26 11:07:06 +08:00
Marten Seemann
11af98e338
run misspell in gometalinter
2018-02-23 22:39:08 +08:00
Marten Seemann
245af2c596
make the number of incoming streams configurable, for gQUIC
2018-02-23 22:15:31 +08:00
Marten Seemann
58b20c6009
make the number of incoming streams configurable, for IETF QUIC
2018-02-23 22:15:31 +08:00
Marten Seemann
8c594e1084
Merge pull request #1186 from lucas-clemente/log-vnps
...
log version negotiation packets
2018-02-21 18:03:57 +08:00
Marten Seemann
ce01e99ba1
log version negotiation packets
2018-02-21 14:55:33 +08:00
Marten Seemann
3371d6bcf9
make the version number a uint32
...
This will allow us to set it to the IETF draft version numbers as listed
in https://github.com/quicwg/base-drafts/wiki/QUIC-Versions . Those
numbers would overflow a int32.
2018-02-21 13:24:18 +08:00
Marten Seemann
8e332c2e13
implement sending of MAX_STREAM_ID frames
...
We can now impose a limit on the number of stream for IETF QUIC, and
advertise that in the transport parameters during the handshake.
2018-02-06 08:32:16 +08:00
Marten Seemann
29307c5067
Merge pull request #1132 from lucas-clemente/perspective-stringer
...
add a string representation for the perspective
2018-02-01 23:51:29 +08:00
Marten Seemann
fbeba1f73a
make sure that at least every 20th ACK is retransmittable
...
This is important because we need to make sure that we can remove old
ACK ranges from the received packet history. The logic we implemented
before was not correct, since we only made sure that every 20th packet
would be retransmittable, but we didn't have any guarantee that this
packet would also contain an ACK frame.
2018-02-01 17:11:05 +08:00
Marten Seemann
2ec147ccfa
add a string representation for the perspective
2018-02-01 12:59:24 +08:00
Marten Seemann
fc5f54824a
only send one ACK for every 10 retransmittable packets
2018-01-28 17:59:37 +07:00
Marten Seemann
9ef3a47da5
send multiple packets at once, if the pacing delay is very small
...
This is an optimization to avoid waking of the run loop every couple of
microseconds.
2018-01-23 09:13:44 +11:00
Marten Seemann
40650d93f0
add an application-defined error type, for RST_STREAM and STOP_SENDING
2017-12-15 16:21:09 +07:00
Marten Seemann
7fd0157e1f
Merge pull request #1006 from lucas-clemente/more-window-updates
...
decrease the threshold to send MAX_{STREAM}_DATA frames
2017-12-12 18:30:55 +07:00
Marten Seemann
eb3e253be2
send MAX_{STREAM}_DATA frames more frequently
...
WINDOW_UPDATEs are relatively small, and it doesn't cost much to grant
the peer more flow control credit earlier.
2017-12-12 18:06:49 +07:00
Marten Seemann
4aca4d64b7
don't add more STREAM frames to a packet if remaining size is too small
2017-12-12 18:00:05 +07:00
Marten Seemann
23ce5a8554
drop packets for new gQUIC connections that are too small
2017-12-08 12:34:59 +07:00
Marten Seemann
6019634286
pad Initial packets to the required minimum size (1200 bytes)
2017-12-08 11:50:43 +07:00
Marten Seemann
11f746a183
implement parsing and writing of the new STREAM frames
2017-12-08 09:20:47 +07:00
Marten Seemann
759b0d87b1
refactor packet unpacking
...
This replaces version.UsesMaxDataFrame by versoin.UsesIETFFrameFormat.
That way, we can have two separate code paths in the unpacker to unpack
either gQUIC frames or IETF frames.
2017-12-08 09:18:54 +07:00
Marten Seemann
1f5cd31569
implement a function to get version slices containing reserved versions
2017-12-06 10:20:16 +07:00
Marten Seemann
45e43ada40
implement the recent changes to the version negotiation packet
2017-12-06 08:40:43 +07:00
Marten Seemann
184f81d8c4
remove old code to send an ACK every 20 packets
...
This was needed before QUIC 39, and should have been removed when we
dropped support for QUIC 38.
2017-12-01 12:14:54 +07:00
Marten Seemann
4076ab587e
add a string representation for the Long Header packet types
2017-11-22 15:57:22 -08:00
Marten Seemann
683f244054
rename the Cleartext Long Header type to Handshake
...
This was recently changed in the draft.
2017-11-13 10:55:33 +08:00
Marten Seemann
095c29dc2c
drop support for QUIC 37 and 38
2017-11-07 00:23:53 +07:00
Marten Seemann
0f1f1c8d41
implement the MAX_DATA and MAX_STREAM_DATA frames
...
For gQUIC WINDOW_UPDATEs are converted to MAX_DATA and MAX_STREAM_DATA,
respectively.
2017-11-04 15:22:14 +07:00