Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Cleanups for write_appdata_frames #1440

Merged
merged 13 commits into from
Apr 16, 2024
47 changes: 19 additions & 28 deletions neqo-transport/src/connection/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1937,42 +1937,34 @@ impl Connection {
}
}

self.streams
.write_frames(TransmissionPriority::Critical, builder, tokens, frame_stats);
if builder.is_full() {
return;
}

self.streams.write_frames(
for prio in [
TransmissionPriority::Critical,
TransmissionPriority::Important,
builder,
tokens,
frame_stats,
);
if builder.is_full() {
return;
] {
self.streams
.write_frames(prio, builder, tokens, frame_stats);
if builder.is_full() {
return;
}
}

// NEW_CONNECTION_ID, RETIRE_CONNECTION_ID, and ACK_FREQUENCY.
self.cid_manager.write_frames(builder, tokens, frame_stats);
if builder.is_full() {
return;
}
self.paths.write_frames(builder, tokens, frame_stats);
if builder.is_full() {
return;
}

self.streams
.write_frames(TransmissionPriority::High, builder, tokens, frame_stats);
self.paths.write_frames(builder, tokens, frame_stats);
if builder.is_full() {
return;
}

self.streams
.write_frames(TransmissionPriority::Normal, builder, tokens, frame_stats);
if builder.is_full() {
return;
for prio in [TransmissionPriority::High, TransmissionPriority::Normal] {
self.streams
.write_frames(prio, builder, tokens, &mut stats.frame_tx);
if builder.is_full() {
return;
}
}

// Datagrams are best-effort and unreliable. Let streams starve them for now.
Expand All @@ -1981,9 +1973,9 @@ impl Connection {
return;
}

let frame_stats = &mut stats.frame_tx;
// CRYPTO here only includes NewSessionTicket, plus NEW_TOKEN.
// Both of these are only used for resumption and so can be relatively low priority.
let frame_stats = &mut stats.frame_tx;
self.crypto.write_frame(
PacketNumberSpace::ApplicationData,
builder,
Expand All @@ -1993,6 +1985,7 @@ impl Connection {
if builder.is_full() {
return;
}

self.new_token.write_frames(builder, tokens, frame_stats);
if builder.is_full() {
return;
Expand All @@ -2002,10 +1995,8 @@ impl Connection {
.write_frames(TransmissionPriority::Low, builder, tokens, frame_stats);

#[cfg(test)]
{
if let Some(w) = &mut self.test_frame_writer {
w.write_frames(builder);
}
if let Some(w) = &mut self.test_frame_writer {
w.write_frames(builder);
}
}

Expand Down
Loading