Commit Graph

62 Commits

Author SHA1 Message Date
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
Marten Seemann
1f644debd4 set if a stream contributes to connection flow control
This depends on the version. In gQUIC, stream 1 and 3 don't contribute,
in IETF QUIC only stream 0 doesn't contribute.
2017-11-04 15:22:14 +07:00
Marten Seemann
f662822486 use stream 0 for the crypto stream when using TLS 2017-11-04 15:22:07 +07:00
Marten Seemann
96f65f922f Merge pull request #927 from lucas-clemente/fix-925
fix client handshake failure when the server supports unknown versions
2017-11-02 21:34:04 +07:00
Marten Seemann
3e6f66da79 rename the packet types according to recent draft changes 2017-11-02 18:31:04 +07:00
Marten Seemann
43c23ff5fa fix client handshake failure when the server supports unknown versions 2017-11-02 17:41:06 +07:00
Marten Seemann
f6e44e3e8e fix gQUIC version numbers 2017-10-30 11:51:26 +07:00
Marten Seemann
3f62ea8673 set the Long Header packet type based on the state of the handshake 2017-10-29 14:08:08 +07:00
Marten Seemann
d98a11bb35 save version numbers such that can be written in big endian
This makes the version number representation consistent with the IETF
draft.
2017-10-27 17:24:24 +07:00
Marten Seemann
6c394acde7 never use a 6 byte packet number
According to the IETF draft, the only packet number lengths are 1, 2 and
4 bytes. With the given formula for the packet number derivation, we
would have only sent a 6 byte packet number if the difference between
the largest unacked and the current packet number exceeded 2^31, so this
would never have happened anyway.
2017-10-27 16:51:59 +07:00
Marten Seemann
f3e9bf4332 remove the params negotiator 2017-10-20 18:08:21 +07:00
Marten Seemann
925a52f032 don't apply a limit to the number of outgoing streams 2017-10-20 17:35:30 +07:00
Marten Seemann
f5acb690d3 simplify the maximum stream limit 2017-10-20 17:35:30 +07:00
Marten Seemann
5504c47ca5 reduce the maximum packet size of sent packets to 1200 bytes
This is the value the IETF draft mandates for implementations that don't
do PMTUD.
2017-10-18 14:14:49 +07:00
Marten Seemann
4eec7433d9 enforce a minimum value of the remote idle timeout
This prevents a DoS where a peer could send us a really small remote
idle timeout, and we would continuously send it PING frames.
2017-10-03 11:06:31 -07:00