Commit Graph

781 Commits

Author SHA1 Message Date
Benjamin Saunders 4096cdc19c Issue new connection IDs on connection established 2018-12-25 12:42:06 +01:00
Benjamin Saunders a1915edfd8 Extract frame::NewConnectionId struct 2018-12-25 12:42:06 +01:00
Benjamin Saunders b973de2514 Don't leak client connections with bad Initial 2018-12-25 12:42:06 +01:00
Benjamin Saunders e6bc4f97e6 Clientside stateless resets
This will only become useful once we send a new conection ID to the
server, as the client's initial connection ID is not associated with a
reset token due to client transport parameters not being protected.
2018-12-25 12:42:06 +01:00
Benjamin Saunders 80b27f8d43 Fix illegal stateless reset size, looping vulnerability 2018-12-25 12:42:06 +01:00
Benjamin Saunders cb8114f2e9 Extract stateless reset transmit into its own method 2018-12-25 12:42:06 +01:00
Benjamin Saunders 9cdb729a52 Style fixes 2018-12-25 12:42:06 +01:00
Benjamin Saunders f7a33fcc17 Expand use of RESET_TOKEN_SIZE 2018-12-25 12:42:06 +01:00
Benjamin Saunders 6c27427c1c Privatize Retransmits fields 2018-12-25 12:42:06 +01:00
Benjamin Saunders 4fce79f7f3 Isolate header keys from traffic keys
This lets us avoid key copying that would otherwise arise due to the
somewhat differing lifecycles of the two key types, and which crypto
APIs seem to discourage.
2018-12-25 09:56:44 +01:00
Benjamin Saunders 21c5b103f7 Check reserved bits when connected 2018-12-25 09:56:44 +01:00
Benjamin Saunders 9314c88828 Fix underflow on decoding truncated long packets 2018-12-25 09:56:44 +01:00
Benjamin Saunders e3d3344747 Draft 17 header protection ciphers 2018-12-25 09:56:44 +01:00
Benjamin Saunders e2fafe45e2 Update version to draft 17 2018-12-25 09:56:44 +01:00
Benjamin Saunders 3b295dec72 PADDING shouldn't directly elicit ACKs 2018-12-25 09:56:44 +01:00
Benjamin Saunders 4258d22e4c Pad packets as needed for header protection sampling 2018-12-25 09:56:44 +01:00
Benjamin Saunders 28aa2f1f9b Draft 17 header protection 2018-12-25 09:56:44 +01:00
Benjamin Saunders d408867d97 Don't update header keys in 1RTT 2018-12-25 09:56:44 +01:00
Benjamin Saunders 06d3bef4d6 Rename PacketNumberKey to HeaderKey 2018-12-25 09:56:44 +01:00
Benjamin Saunders 72e480be9f Draft 17 key derivation 2018-12-25 09:56:44 +01:00
Benjamin Saunders 0c6d2f9803 Draft 17 flags and packet number encoding 2018-12-25 09:56:44 +01:00
Benjamin Saunders f4862a9d6a Draft 17 frames 2018-12-23 23:55:19 -08:00
Benjamin Saunders 01083617ea Don't retransmit PING 2018-12-23 23:55:19 -08:00
Benjamin Saunders 8d824b1263 impl Display/slog::Value for Directionality 2018-12-23 23:55:19 -08:00
Benjamin Saunders 6ba840281c Naming consistency 2018-12-23 23:52:24 -08:00
Benjamin Saunders 2998b95241 Draft 17 transport parameters 2018-12-23 23:52:24 -08:00
stammw e516160b03 Upgrade orion to 0.11 2018-12-23 14:21:15 -08:00
Benjamin Saunders fb3c317f60 Send/receive ECN bits on linux 2018-12-22 11:48:24 -08:00
Dirkjan Ochtman 70513bb72e Inline Context type back into Endpoint 2018-12-22 11:47:48 -08:00
Dirkjan Ochtman 1fe4235abe Reorder code in endpoint module 2018-12-22 11:47:48 -08:00
Dirkjan Ochtman 4d336d489c Introduce is_drained(), make Connection state private 2018-12-22 11:47:48 -08:00
Dirkjan Ochtman 9e24db7ccb Move core implementation of Endpoint::timeout() into Connection 2018-12-22 11:47:48 -08:00
Dirkjan Ochtman f53a132a1a Remove Connections from eventful_conns on forget 2018-12-22 11:47:48 -08:00
Benjamin Saunders 5ff6936cea Remove ConnectionDrained event
This event was always emitted exactly when the close timer expires,
which is already known to the caller. Making it implicit lets us
reduce bookkeeping.
2018-12-17 22:30:40 -08:00
Dirkjan Ochtman 3314364e07 Take StreamId arguments by value 2018-12-18 06:42:14 +01:00
Dirkjan Ochtman 025db1be94 Fix issues as suggested by clippy 2018-12-18 06:42:14 +01:00
Benjamin Saunders 07928e42cd Fix Connection::poll_io usage advice 2018-12-17 10:45:50 -08:00
Benjamin Saunders 46c9174637 Test retransmission of dropped client Initial 2018-12-17 10:45:50 -08:00
Benjamin Saunders c444261ccf Fix CRYPTO frames never being retransmitted 2018-12-17 10:45:50 -08:00
Benjamin Saunders fa2c88ac5d Mark connections dirty after loss detection timeout
When the loss detection timer expires, a connection will want to
retransmit data and hence must be polled.
2018-12-17 10:45:50 -08:00
Benjamin Saunders 29834d058d Pretty-print times in tests 2018-12-17 10:45:50 -08:00
Benjamin Saunders 198f170b6a Don't send zero-length CRYPTO frames 2018-12-17 00:24:50 -08:00
Benjamin Saunders ec77474511 Tweak timer I/O representation 2018-12-17 00:24:50 -08:00
Benjamin Saunders 5aa7b3840e Replace Multiplexer with per-connection queues
This simplifies signatures, reduces buffering, and further narrows the
Endpoint-Connection interface.
2018-12-17 00:24:50 -08:00
Benjamin Saunders 87f7f7107f Assemble normal packets on demand 2018-12-17 00:24:50 -08:00
Dirkjan Ochtman 27a558ee1c Keep Packet intact in Endpoint::handle_initial() 2018-12-15 21:10:37 +01:00
Dirkjan Ochtman 11b744e4ec Keep Crypto instances in a single deque 2018-12-15 21:10:37 +01:00
Dirkjan Ochtman a04951358a Delay check for stateless reset (fixes #118) 2018-12-15 21:00:43 +01:00
Dirkjan Ochtman 8ce4a5752d Add comment about unused From impl 2018-12-15 21:00:43 +01:00
Dirkjan Ochtman 7d3f7a5c15 Remove unused argument 2018-12-15 21:00:43 +01:00