Marten Seemann
ad22ed9d16
disable connection migration
...
Connection migration is complicated: We need to verify the new path, and
reset the congestion controller. In the IETF draft, connection migration
is still work in progress.
2017-12-06 08:42:13 +07:00
Marten Seemann
dc8b547793
reject ACKs that ack packets with a higher encryption level
2017-11-12 15:05:14 +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
a1a4f35096
send initial version in the CHLO, not the current version
...
This commit fixes two bugs:
1. In the CHLO, we need to send the initial QUIC version. It will differ
from the current version if version negotiation was performed.
2. The session setup was using the wrong version (current version, and
not the initial version), such that we would have sent the wrong version
in the TLS handshake as well.
2017-11-02 21:51:51 +07:00
Marten Seemann
aba1dd13ba
only use little endian byte order for gQUIC 37 and 38
...
That way, when adding new non-gQUIC versions, they will use big endian.
2017-11-02 16:46:22 +07:00
Marten Seemann
4556ad01e5
use the new packet header for connections using TLS
2017-10-27 16:54:47 +07:00
Marten Seemann
5ee7b205c6
handle the crypto stream separately
2017-10-25 09:13:48 +07:00
Marten Seemann
282b423f7d
pass the crypto stream to the crypto setup constructor
...
The crypto stream is opened during the session setup. Passing it to the
crypto setup directly helps simplify the constructor.
2017-10-25 09:13:47 +07:00
Marten Seemann
268c3859fc
remove the flow control manager
2017-10-20 21:34:09 +07:00
Marten Seemann
e087ee7e9f
handle WINDOW_UPDATEs for streams and connection separately
...
In IETF QUIC, stream 0 is a valid stream ID, and is not used to encode
WINDOW_UPDATEs for the connection any more.
2017-10-20 21:12:19 +07:00
Marten Seemann
f3e9bf4332
remove the params negotiator
2017-10-20 18:08:21 +07:00
Marten Seemann
480db80da1
remove the receive flow control window from the params negotiator
...
The receive windows are not negotiated, they are just announced to the
peer.
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
daff6256b9
don't negotiate the maximum incoming streams value
...
The maximum number of incoming streams doesn't need to be negotiated. It
is a value that is only announced by the peer, and has to be respected.
Furthermore, Chrome doesn't seem to care about the MSPC value anymore
(since MIDS was introduced), so there's no need to send this in the
handshake any more.
2017-10-20 17:35:30 +07:00
Marten Seemann
91a8fc9456
open the crypto stream during session setup
2017-10-19 14:57:30 +07:00
Marten Seemann
0e1a8a5f8c
move the max flow control increments out of the params negotiator
...
The params negotiator was just keeping track of the value set in the
quic.Config. The max flow control increments are not subject to
negotiation, but an independent implementation decision of every peer.
2017-10-04 07:16:16 -07:00
Marten Seemann
daa8d08fba
implement loss detection for handshake packets
2017-10-03 13:56:47 -07:00
Marten Seemann
e20fdf43ef
Merge pull request #867 from lucas-clemente/fix-828
...
improve garbage collection of stream
2017-10-03 11:55:54 -07:00
Marten Seemann
6874ff7b41
Merge pull request #866 from lucas-clemente/fix-856
...
handle version negotiation in the TLS handshake
2017-10-03 11:26:53 -07:00
Marten Seemann
e5e632b7aa
Merge pull request #870 from lucas-clemente/no-idle-timeout-negotiation
...
don't negotiate the idle timeout
2017-10-03 11:25:48 -07:00
Marten Seemann
0ffb64b5d7
rename the IdleConnectionStateLifetime to RemoteIdleTimeout
2017-10-03 10:48:08 -07:00
Marten Seemann
caf0a0a25a
fix race conditions in the session tests for accepting streams
2017-10-03 03:43:05 -07:00
Marten Seemann
a8b603b7bf
don't negotiate the idle timeout
...
The idle timeout doesn't need to be negotiated, simply announcing it to
the peer is sufficient. We now close the session if there's no incoming
network activity for the duration of the local idle timeout, and we
send a PING frame after half the remote idle timeout (if keep alives are
enabled).
2017-10-02 18:16:27 -07:00
Marten Seemann
709eec55b5
improve garbage collection of stream
...
This removes the Iterate method of the streamsMap, and moves the garbage
collection of closed streams from the session to the streamsMap.
2017-10-03 04:04:21 +08:00
Marten Seemann
a2988bce8d
send versions in ClientHello and EncryptedExtensions TLS parameters
...
It only sends the right values now, but doesn't yet perform any
validation.
2017-10-02 12:50:17 +07:00
Marten Seemann
9cb7480050
rename connection ID truncation to connection ID omission
2017-09-29 22:52:54 +07:00
Marten Seemann
c95f2054a8
rename the ConnectionParametersManager to ParamsNegotiator
2017-09-28 18:15:33 +07:00
Marten Seemann
ebb4150e63
separate connection parameters negotiation and gQUIC handshake parsing
2017-09-28 18:15:32 +07:00
Marten Seemann
95901cdee4
initialize the connection parameters manager in the crypto setup
2017-09-28 18:15:32 +07:00
Marten Seemann
8dbd60a095
drop support for QUIC 35
2017-09-25 19:55:25 +07:00
Marten Seemann
265c35c2eb
rename the STK to Cookie
2017-09-22 18:58:04 +07:00
Marten Seemann
14fae7b6d3
rename the STKGenerator to CookieGenerator
2017-09-22 18:58:03 +07:00
Marten Seemann
e603715949
make handshake and crypto internal packages
2017-09-21 11:52:21 +07:00
Marten Seemann
4da08c9710
use a type alias for the STK
2017-09-11 18:38:24 +02:00
Marten Seemann
60f5c660c6
export flow control window sizes as uint64 in quic.Config
2017-08-31 16:37:03 +07:00
Marten Seemann
f1ada87dcf
make the protocol package internal
2017-08-30 00:19:44 +07:00
Marten Seemann
ed522ebbce
make wire an internal package
2017-08-29 23:51:56 +07:00
Marten Seemann
1794636220
more the PublicHeader to the wire package
2017-08-29 23:45:38 +07:00
Marten Seemann
88afad8722
rename package frames to wire
2017-08-29 23:27:15 +07:00
Marten Seemann
5152019554
don't use an idle timeout before the handshake has completed
...
This simplifies the timeout logic a bit. Before the handshake has
completed, the only timeout is the handshake timeout. After the
handshake has completed, the only timeout is the idle connection timeout.
2017-08-29 15:47:56 +07:00
Marten Seemann
e398d5409a
set the idle timeout during the handshake to half the handshake timeout
2017-08-28 17:58:39 +07:00
Marten Seemann
3390564e98
Merge pull request #782 from lucas-clemente/quic39
...
add support for QUIC 39
2017-08-24 17:59:51 +07:00
Marten Seemann
79bb3a9bd3
force sending of a retransmittable packet every 20 packets
2017-08-23 16:00:48 +07:00
Marten Seemann
dd0daaaf1e
implement version-dependent parsing of the Public Header
2017-08-23 16:00:45 +07:00
Marten Seemann
254e079029
use a chan to store sent packets in mock connection
...
This makes the session tests a bit less racy.
2017-08-23 13:12:43 +07:00
Lucas Clemente
8ec11c0b53
Move testdata/ to internal/
2017-08-18 12:06:36 +02:00
Marten Seemann
be338c8389
send a Public Reset when receiving the NSTP tag in the CHLO
...
We currently don't support the no STOP_WAITING experiment.
2017-08-10 20:26:31 +07:00
Marten Seemann
01baba83a5
don't pass the STOP_WAITING to the receivedPacketHandler
...
Only pass the LeastUnacked. This makes easier to remove STOP_WAITINGs
later.
2017-08-10 20:23:10 +07:00
Marten Seemann
e02f5d5fbe
replace Session.WaitUntilClosed() by a context
2017-08-02 11:27:44 +07:00