From 89f3f458de2a39e9eb4ff040ee15d22250192d3d Mon Sep 17 00:00:00 2001 From: Phoenix Kahlo Date: Sat, 14 Dec 2024 15:13:34 -0600 Subject: [PATCH] proto: Factor out IncomingToken Factors out the retry_src_cid and orig_dst_cid fields of Incoming into a new token::IncomingToken struct. --- quinn-proto/src/endpoint.rs | 22 +++++++++++----------- quinn-proto/src/token.rs | 7 +++++++ 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/quinn-proto/src/endpoint.rs b/quinn-proto/src/endpoint.rs index 7c8a32915..4c3d70ae6 100644 --- a/quinn-proto/src/endpoint.rs +++ b/quinn-proto/src/endpoint.rs @@ -29,7 +29,7 @@ use crate::{ ConnectionEvent, ConnectionEventInner, ConnectionId, DatagramConnectionEvent, EcnCodepoint, EndpointEvent, EndpointEventInner, IssuedCid, }, - token, + token::{self, IncomingToken}, transport_parameters::{PreferredAddress, TransportParameters}, Duration, Instant, ResetToken, RetryToken, Side, Transmit, TransportConfig, TransportError, INITIAL_MTU, MAX_CID_SIZE, MIN_INITIAL_SIZE, RESET_TOKEN_SIZE, @@ -539,8 +539,10 @@ impl Endpoint { }, rest, crypto, - retry_src_cid, - orig_dst_cid, + token: IncomingToken { + retry_src_cid, + orig_dst_cid, + }, incoming_idx, improper_drop_warner: IncomingImproperDropWarner, })) @@ -630,8 +632,8 @@ impl Endpoint { &mut self.rng, ); params.stateless_reset_token = Some(ResetToken::new(&*self.config.reset_key, &loc_cid)); - params.original_dst_cid = Some(incoming.orig_dst_cid); - params.retry_src_cid = incoming.retry_src_cid; + params.original_dst_cid = Some(incoming.token.orig_dst_cid); + params.retry_src_cid = incoming.token.retry_src_cid; let mut pref_addr_cid = None; if server_config.preferred_address_v4.is_some() || server_config.preferred_address_v6.is_some() @@ -1192,8 +1194,7 @@ pub struct Incoming { packet: InitialPacket, rest: Option, crypto: Keys, - retry_src_cid: Option, - orig_dst_cid: ConnectionId, + token: IncomingToken, incoming_idx: usize, improper_drop_warner: IncomingImproperDropWarner, } @@ -1216,12 +1217,12 @@ impl Incoming { /// This means that the sender of the initial packet has proved that they can receive traffic /// sent to `self.remote_address()`. pub fn remote_address_validated(&self) -> bool { - self.retry_src_cid.is_some() + self.token.retry_src_cid.is_some() } /// The original destination connection ID sent by the client pub fn orig_dst_cid(&self) -> &ConnectionId { - &self.orig_dst_cid + &self.token.orig_dst_cid } } @@ -1232,8 +1233,7 @@ impl fmt::Debug for Incoming { .field("ecn", &self.ecn) // packet doesn't implement debug // rest is too big and not meaningful enough - .field("retry_src_cid", &self.retry_src_cid) - .field("orig_dst_cid", &self.orig_dst_cid) + .field("token", &self.token) .field("incoming_idx", &self.incoming_idx) // improper drop warner contains no information .finish_non_exhaustive() diff --git a/quinn-proto/src/token.rs b/quinn-proto/src/token.rs index 5face46a7..4ff145ab7 100644 --- a/quinn-proto/src/token.rs +++ b/quinn-proto/src/token.rs @@ -178,6 +178,13 @@ impl fmt::Display for ResetToken { } } +/// State in an `Incoming` determined by a token or lack thereof +#[derive(Debug)] +pub(crate) struct IncomingToken { + pub(crate) retry_src_cid: Option, + pub(crate) orig_dst_cid: ConnectionId, +} + #[cfg(all(test, any(feature = "aws-lc-rs", feature = "ring")))] mod test { #[cfg(all(feature = "aws-lc-rs", not(feature = "ring")))]