Commit Graph

1246 Commits

Author SHA1 Message Date
Benjamin Saunders 9fc7ddf129 Silence spurious warning 2019-03-28 08:28:01 +01:00
Benjamin Saunders cd4240e2a2 Improve key_update_reordered test robustness 2019-03-28 08:28:01 +01:00
Benjamin Saunders 29587e8552 Clarify handling of a lost endpoint driver 2019-03-28 08:28:01 +01:00
Benjamin Saunders f949a5981c Tweak comment 2019-03-28 08:28:01 +01:00
Benjamin Saunders 237e405889 Fix handling of STOP_SENDING on closed or unopened streams 2019-03-28 08:26:40 +01:00
Benjamin Saunders 1ed29db73b Fix receiving MAX_STREAM_DATA after closing the stream 2019-03-28 08:26:40 +01:00
Benjamin Saunders 21b8b99c53 Avoid redundant recv stream lookup 2019-03-28 08:26:40 +01:00
Dirkjan Ochtman d2f454ebc6 Return Connections from Endpoints after creation 2019-03-27 18:20:24 -07:00
Dirkjan Ochtman 6c8f3e0ea0 Enable key log in quinn tests 2019-03-27 18:20:24 -07:00
Dirkjan Ochtman 1a4eb4793d Optimize stream assembler (see #258) 2019-03-27 18:53:51 +01:00
Benjamin Saunders 75d5c730de Fix unreliable unblocking of ordered reads
If an ordered read was blocked on a stream that had pending unordered
data and became blocked, `Recv::is_blocked` would have returned false,
leading to the application never getting notified. We could detect
whether *either* readiness boundary has been crossed, but the
more conservative approach is simple and obviously correct, and
spurious notifications are not known to be an issue.
2019-03-27 01:52:09 -07:00
Benjamin Saunders 1c24492c86 Don't start close timer on stateless reset 2019-03-27 01:52:09 -07:00
Benjamin Saunders bf6cf7387e Less error-prone timer cleanup 2019-03-27 01:52:09 -07:00
Benjamin Saunders 67de213a5a Only send PING in 1-RTT packets
In particular, don't send it in handshake packets we retransmit after
reaching 1-RTT.
2019-03-27 01:52:09 -07:00
Benjamin Saunders bc8bc6a17a Clarify logging 2019-03-27 01:52:09 -07:00
Benjamin Saunders 8be6ec3661 Don't set keep-alive during handshake 2019-03-27 01:52:09 -07:00
Benjamin Saunders 662b9483b8 Don't reset streams on dead connections
Fixes a panic that could happen when dropping streams from a
connection that's been closed.
2019-03-26 07:09:33 +01:00
Benjamin Saunders 2fb452259b Don't send PING in Handshake packets 2019-03-26 07:09:33 +01:00
Nikita Baksalyar 762bcf277b Add more debug info for the PROTOCOL_VIOLATION error
The error type should contain the frame causing the protocol violation
2019-03-25 20:21:21 +01:00
Dirkjan Ochtman eade6f4d9a Initialize EndpointInner in same file as definition 2019-03-23 21:40:06 +01:00
Dirkjan Ochtman b9410ce895 Import mpsc module for shorter type paths 2019-03-23 21:40:06 +01:00
Dirkjan Ochtman 5872661b8d Split up Driver::poll() into manageable parts 2019-03-23 19:10:36 +01:00
Dirkjan Ochtman ef0fb2b869 Pass datagram to Connection as a ConnectionEvent 2019-03-23 19:10:36 +01:00
Dirkjan Ochtman a6fec82b44 Change variable names in Endpoint that match Connection usage 2019-03-23 19:10:36 +01:00
Dirkjan Ochtman 5bbaf6d4b4 Tweak formatting for better readability 2019-03-23 19:10:36 +01:00
Dirkjan Ochtman 46ad36e34b Trigger connection forgetting through EndpointEvent 2019-03-23 19:10:36 +01:00
Dirkjan Ochtman 149bec5f8c Handle timer events as ConnectionEvent variants 2019-03-23 19:10:36 +01:00
Dirkjan Ochtman d29f186418 Rename poll_io() and remove unnecessary Io wrapper enum 2019-03-23 19:10:36 +01:00
Dirkjan Ochtman 753bddadb2 Retire connection identifiers through EndpointEvent 2019-03-23 19:10:36 +01:00
Dirkjan Ochtman 11cf1336a5 Send new connection IDs as a single event 2019-03-23 19:10:36 +01:00
Dirkjan Ochtman b689cfcecd Use events to communicate from Connection to Endpoint 2019-03-23 19:10:36 +01:00
Dirkjan Ochtman 18cfea2145 Keep local CIDs state in Endpoint 2019-03-23 19:10:36 +01:00
Dirkjan Ochtman d28dc2bb64 Move Endpoint-only state from Connection into Endpoint 2019-03-23 19:10:36 +01:00
Dirkjan Ochtman 41f7551e10 Leave debugging hint for stupid future me 2019-03-23 19:10:36 +01:00
Dirkjan Ochtman 481e7286c7 Return new ConnectionHandle from Endpoint::handle() 2019-03-23 19:10:36 +01:00
Dirkjan Ochtman 385fd39411 Clarify connection setup flow 2019-03-23 19:10:36 +01:00
Dirkjan Ochtman e4bd3f1597 Disable dual-stack IP test for now 2019-03-23 19:10:36 +01:00
Benjamin Saunders cada5cc194 Update quinn/src/lib.rs
Review incorporated

Co-Authored-By: ustulation <ustulation@gmail.com>
2019-03-21 11:10:34 +01:00
ustulation e468390802 API for obtaining our local endpoint
This is especially useful if we were binding to port 0 intending the OS to allocate us a random port. Then we would like to know what port was actually allocated. Besides it's a useful API anyway as it's natural to want to know this detail from a bound socket for completeness.
2019-03-21 11:10:34 +01:00
Benjamin Saunders 0a967f66e2 Relax 0-RTT frame type restrictions 2019-03-15 16:32:35 +01:00
Dirkjan Ochtman f5b066574a Move maybe_cleanup() method into Streams 2019-03-06 10:14:45 -08:00
Dirkjan Ochtman 65c3f2c7c6 Let Connection handle stream cleanup if necessary 2019-03-06 10:14:45 -08:00
Benjamin Saunders 27b5dfe541 Account for all UDP datagram bytes in anti-amplification
Authentication/correctness is an independent concern. Improves
behavior when coalesced 0-RTT is rejected.
2019-03-05 06:49:15 +01:00
Benjamin Saunders 5a3034b957 Update persistent congestion detection logic 2019-02-28 13:22:09 +01:00
Benjamin Saunders 7da5188ba8 Enable backtraces in CI 2019-02-28 13:17:09 +01:00
Benjamin Saunders d50edb67fb Expand ECN support
libc's CMSG macros got built out to many more platforms. There may
remain some obscure platforms where this will still fail to build, but
we can account for them as they show up in practice.
2019-02-28 13:17:09 +01:00
Dirkjan Ochtman 92deb61f60 Move Streams type into stream module 2019-02-27 19:13:45 +01:00
Dirkjan Ochtman 694b94a877 Reduce duplication of logic in stream read handling 2019-02-27 19:13:45 +01:00
Dirkjan Ochtman a22d79d6d2 Don't panic on reads of unknown streams 2019-02-27 19:13:45 +01:00
Benjamin Saunders 53143ad12a Limit volume of unacked stream data
This prevents a memory exhaustion DoS if a peer issues large amounts
of flow control credit without acknowledging stream data.
2019-02-27 09:20:38 +01:00