Skip to content

Commit 4f5f96f

Browse files
committed
Use DatagramBuffer in PacketBuilder
The PacketBuilder no longer has any business with the TransmitBuilder, it can do everything with just the DatagramBuffer.
1 parent 07f7ebe commit 4f5f96f

File tree

2 files changed

+41
-28
lines changed

2 files changed

+41
-28
lines changed

quinn-proto/src/connection/mod.rs

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,12 @@ impl Connection {
663663
builder.pad_to(transmits.segment_size() as u16);
664664
}
665665

666-
builder.finish_and_track(now, self, sent_frames.take(), &mut transmits);
666+
builder.finish_and_track(
667+
now,
668+
self,
669+
sent_frames.take(),
670+
&mut transmits.datagram_mut(),
671+
);
667672

668673
if transmits.num_datagrams() == 1 {
669674
transmits.clip_datagram_size();
@@ -708,7 +713,12 @@ impl Connection {
708713
// datagram.
709714
// Finish current packet without adding extra padding
710715
if let Some(builder) = builder_storage.take() {
711-
builder.finish_and_track(now, self, sent_frames.take(), &mut transmits);
716+
builder.finish_and_track(
717+
now,
718+
self,
719+
sent_frames.take(),
720+
&mut transmits.datagram_mut(),
721+
);
712722
}
713723
}
714724

@@ -739,7 +749,7 @@ impl Connection {
739749
now,
740750
space_id,
741751
self.rem_cids.active(),
742-
&mut transmits,
752+
&mut transmits.datagram_mut(),
743753
ack_eliciting,
744754
self,
745755
)?);
@@ -837,7 +847,7 @@ impl Connection {
837847
non_retransmits: true,
838848
..SentFrames::default()
839849
}),
840-
&mut transmits,
850+
&mut transmits.datagram_mut(),
841851
);
842852
self.stats.udp_tx.on_sent(1, transmits.len());
843853
return Some(Transmit {
@@ -890,7 +900,7 @@ impl Connection {
890900
builder.pad_to(MIN_INITIAL_SIZE);
891901
}
892902
let last_packet_number = builder.exact_number;
893-
builder.finish_and_track(now, self, sent_frames, &mut transmits);
903+
builder.finish_and_track(now, self, sent_frames, &mut transmits.datagram_mut());
894904
self.path
895905
.congestion
896906
.on_sent(now, transmits.len() as u64, last_packet_number);
@@ -914,7 +924,7 @@ impl Connection {
914924
now,
915925
space_id,
916926
self.rem_cids.active(),
917-
&mut transmits,
927+
&mut transmits.datagram_mut(),
918928
true,
919929
self,
920930
)?;
@@ -936,7 +946,7 @@ impl Connection {
936946
non_retransmits: true,
937947
..Default::default()
938948
};
939-
builder.finish_and_track(now, self, Some(sent_frames), &mut transmits);
949+
builder.finish_and_track(now, self, Some(sent_frames), &mut transmits.datagram_mut());
940950

941951
self.stats.path.sent_plpmtud_probes += 1;
942952

@@ -1002,8 +1012,14 @@ impl Connection {
10021012
// if a post-migration packet caused the CID to be retired, it's fair to pretend
10031013
// this is sent first.
10041014
debug_assert!(transmits.datagram().is_empty());
1005-
let mut builder =
1006-
PacketBuilder::new(now, SpaceId::Data, *prev_cid, transmits, false, self)?;
1015+
let mut builder = PacketBuilder::new(
1016+
now,
1017+
SpaceId::Data,
1018+
*prev_cid,
1019+
&mut transmits.datagram_mut(),
1020+
false,
1021+
self,
1022+
)?;
10071023
trace!("validating previous path with PATH_CHALLENGE {:08x}", token);
10081024
transmits
10091025
.datagram_mut()
@@ -1017,7 +1033,7 @@ impl Connection {
10171033
// sending a datagram of this size
10181034
builder.pad_to(MIN_INITIAL_SIZE);
10191035

1020-
builder.finish(self, transmits);
1036+
builder.finish(self, &mut transmits.datagram_mut());
10211037
self.stats.udp_tx.on_sent(1, transmits.len());
10221038

10231039
Some(Transmit {

quinn-proto/src/connection/packet_builder.rs

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use bytes::{BufMut, Bytes};
22
use rand::Rng;
33
use tracing::{trace, trace_span};
44

5-
use super::{Connection, SentFrames, TransmitBuilder, spaces::SentPacket};
5+
use super::{Connection, DatagramBuffer, SentFrames, spaces::SentPacket};
66
use crate::{
77
ConnectionId, Instant, TransportError, TransportErrorCode,
88
connection::ConnectionSide,
@@ -36,7 +36,7 @@ impl PacketBuilder {
3636
now: Instant,
3737
space_id: SpaceId,
3838
dst_cid: ConnectionId,
39-
transmits: &mut TransmitBuilder<'_>,
39+
datagram: &mut DatagramBuffer<'_>,
4040
ack_eliciting: bool,
4141
conn: &mut Connection,
4242
) -> Option<Self> {
@@ -120,9 +120,9 @@ impl PacketBuilder {
120120
version,
121121
}),
122122
};
123-
let partial_encode = header.encode(&mut transmits.datagram_mut());
123+
let partial_encode = header.encode(datagram);
124124
if conn.peer_params.grease_quic_bit && conn.rng.random() {
125-
transmits.datagram_mut()[partial_encode.start] ^= FIXED_BIT;
125+
datagram[partial_encode.start] ^= FIXED_BIT;
126126
}
127127

128128
let (sample_size, tag_len) = if let Some(ref crypto) = space.crypto {
@@ -146,10 +146,10 @@ impl PacketBuilder {
146146
// pn_len + payload_len + tag_len >= sample_size + 4
147147
// payload_len >= sample_size + 4 - pn_len - tag_len
148148
let min_size = Ord::max(
149-
transmits.datagram().len() + (sample_size + 4).saturating_sub(number.len() + tag_len),
149+
datagram.len() + (sample_size + 4).saturating_sub(number.len() + tag_len),
150150
partial_encode.start + dst_cid.len() + 6,
151151
);
152-
let max_size = transmits.datagram_mut().capacity() - tag_len;
152+
let max_size = datagram.capacity() - tag_len;
153153
debug_assert!(max_size >= min_size);
154154

155155
Some(Self {
@@ -179,12 +179,12 @@ impl PacketBuilder {
179179
now: Instant,
180180
conn: &mut Connection,
181181
sent: Option<SentFrames>,
182-
transmits: &mut TransmitBuilder<'_>,
182+
datagram: &mut DatagramBuffer<'_>,
183183
) {
184184
let ack_eliciting = self.ack_eliciting;
185185
let exact_number = self.exact_number;
186186
let space_id = self.space;
187-
let (size, padded) = self.finish(conn, transmits);
187+
let (size, padded) = self.finish(conn, datagram);
188188
let sent = match sent {
189189
Some(sent) => sent,
190190
None => return,
@@ -225,13 +225,13 @@ impl PacketBuilder {
225225
pub(super) fn finish(
226226
self,
227227
conn: &mut Connection,
228-
transmits: &mut TransmitBuilder<'_>,
228+
datagram: &mut DatagramBuffer<'_>,
229229
) -> (usize, bool) {
230-
let pad = self.min_size > transmits.datagram().len();
230+
let pad = self.min_size > datagram.len();
231231
if pad {
232-
let padding_bytes = self.min_size - transmits.datagram().len();
232+
let padding_bytes = self.min_size - datagram.len();
233233
trace!("PADDING * {padding_bytes}");
234-
transmits.datagram_mut().put_bytes(0, padding_bytes);
234+
datagram.put_bytes(0, padding_bytes);
235235
}
236236

237237
let space = &conn.spaces[self.space];
@@ -250,18 +250,15 @@ impl PacketBuilder {
250250
"Mismatching crypto tag len"
251251
);
252252

253-
transmits
254-
.datagram_mut()
255-
.put_bytes(0, packet_crypto.tag_len());
253+
datagram.put_bytes(0, packet_crypto.tag_len());
256254
let encode_start = self.partial_encode.start;
257-
let mut datagram_buf = transmits.datagram_mut();
258-
let packet_buf = &mut datagram_buf[encode_start..];
255+
let packet_buf = &mut datagram[encode_start..];
259256
self.partial_encode.finish(
260257
packet_buf,
261258
header_crypto,
262259
Some((self.exact_number, packet_crypto)),
263260
);
264261

265-
(transmits.datagram().len() - encode_start, pad)
262+
(datagram.len() - encode_start, pad)
266263
}
267264
}

0 commit comments

Comments
 (0)