Skip to content

Commit 4890170

Browse files
committed
Emit qlog PacketSent events
1 parent ebc98fa commit 4890170

File tree

3 files changed

+52
-7
lines changed

3 files changed

+52
-7
lines changed

quinn-proto/src/connection/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1050,7 +1050,7 @@ impl Connection {
10501050
// sending a datagram of this size
10511051
builder.pad_to(MIN_INITIAL_SIZE);
10521052

1053-
builder.finish(self, buf);
1053+
builder.finish(self, now, buf);
10541054
self.stats.udp_tx.on_sent(1, buf.len());
10551055

10561056
Some(Transmit {

quinn-proto/src/connection/packet_builder.rs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ impl PacketBuilder {
191191
let ack_eliciting = self.ack_eliciting;
192192
let exact_number = self.exact_number;
193193
let space_id = self.space;
194-
let (size, padded) = self.finish(conn, buffer);
194+
let (size, padded) = self.finish(conn, now, buffer);
195195
let sent = match sent {
196196
Some(sent) => sent,
197197
None => return,
@@ -229,7 +229,12 @@ impl PacketBuilder {
229229
}
230230

231231
/// Encrypt packet, returning the length of the packet and whether padding was added
232-
pub(super) fn finish(self, conn: &mut Connection, buffer: &mut Vec<u8>) -> (usize, bool) {
232+
pub(super) fn finish(
233+
self,
234+
conn: &mut Connection,
235+
now: Instant,
236+
buffer: &mut Vec<u8>,
237+
) -> (usize, bool) {
233238
let pad = buffer.len() < self.min_size;
234239
if pad {
235240
trace!("PADDING * {}", self.min_size - buffer.len());
@@ -261,6 +266,16 @@ impl PacketBuilder {
261266
Some((self.exact_number, packet_crypto)),
262267
);
263268

264-
(buffer.len() - encode_start, pad)
269+
let len = buffer.len() - encode_start;
270+
conn.config.qlog_sink.emit_packet_sent(
271+
self.exact_number,
272+
len,
273+
self.space,
274+
self.space == SpaceId::Data && conn.spaces[SpaceId::Data].crypto.is_none(),
275+
now,
276+
conn.orig_rem_cid,
277+
);
278+
279+
(len, pad)
265280
}
266281
}

quinn-proto/src/connection/qlog.rs

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use std::sync::{Arc, Mutex};
88
use qlog::{
99
events::{
1010
Event, EventData,
11-
quic::{PacketHeader, PacketLost, PacketLostTrigger, PacketType},
11+
quic::{PacketHeader, PacketLost, PacketLostTrigger, PacketSent, PacketType},
1212
},
1313
streamer::QlogStreamer,
1414
};
@@ -98,7 +98,7 @@ impl QlogSink {
9898
let event = PacketLost {
9999
header: Some(PacketHeader {
100100
packet_number: Some(pn),
101-
packet_type: packet_type(space),
101+
packet_type: packet_type(space, false),
102102
length: Some(info.size),
103103
..Default::default()
104104
}),
@@ -112,6 +112,35 @@ impl QlogSink {
112112
stream.emit_event(orig_rem_cid, EventData::PacketLost(event), now);
113113
}
114114
}
115+
116+
pub(super) fn emit_packet_sent(
117+
&self,
118+
pn: u64,
119+
len: usize,
120+
space: SpaceId,
121+
is_0rtt: bool,
122+
now: Instant,
123+
orig_rem_cid: ConnectionId,
124+
) {
125+
#[cfg(feature = "qlog")]
126+
{
127+
let Some(stream) = self.stream.as_ref() else {
128+
return;
129+
};
130+
131+
let event = PacketSent {
132+
header: PacketHeader {
133+
packet_number: Some(pn),
134+
packet_type: packet_type(space, is_0rtt),
135+
length: Some(len as u16),
136+
..Default::default()
137+
},
138+
..Default::default()
139+
};
140+
141+
stream.emit_event(orig_rem_cid, EventData::PacketSent(event), now);
142+
}
143+
}
115144
}
116145

117146
#[cfg(feature = "qlog")]
@@ -122,10 +151,11 @@ impl From<Option<QlogStream>> for QlogSink {
122151
}
123152

124153
#[cfg(feature = "qlog")]
125-
fn packet_type(space: SpaceId) -> PacketType {
154+
fn packet_type(space: SpaceId, is_0rtt: bool) -> PacketType {
126155
match space {
127156
SpaceId::Initial => PacketType::Initial,
128157
SpaceId::Handshake => PacketType::Handshake,
158+
SpaceId::Data if is_0rtt => PacketType::ZeroRtt,
129159
SpaceId::Data => PacketType::OneRtt,
130160
}
131161
}

0 commit comments

Comments
 (0)