1#[macro_export]
7macro_rules! trace_event {
8 ($log:expr_2021, $event:expr_2021) => {
9 #[cfg(feature = "trace")]
10 $log.log($event)
11 };
12}
13
14#[macro_export]
16macro_rules! trace_packet_sent {
17 ($log:expr_2021, $trace_id:expr_2021, $size:expr_2021, $num:expr_2021) => {
18 $crate::trace_event!(
19 $log,
20 $crate::tracing::Event {
21 timestamp: $crate::tracing::timestamp_now(),
22 trace_id: $trace_id,
23 event_data: $crate::tracing::EventData::PacketSent {
24 size: $size as u32,
25 packet_num: $num,
26 _padding: [0u8; 52],
27 },
28 ..Default::default()
29 }
30 )
31 };
32}
33
34#[macro_export]
36macro_rules! trace_packet_received {
37 ($log:expr_2021, $trace_id:expr_2021, $size:expr_2021, $num:expr_2021) => {
38 $crate::trace_event!(
39 $log,
40 $crate::tracing::Event {
41 timestamp: $crate::tracing::timestamp_now(),
42 trace_id: $trace_id,
43 event_data: $crate::tracing::EventData::PacketReceived {
44 size: $size as u32,
45 packet_num: $num,
46 _padding: [0u8; 52],
47 },
48 ..Default::default()
49 }
50 )
51 };
52}
53
54#[macro_export]
56macro_rules! trace_stream_opened {
57 ($log:expr_2021, $trace_id:expr_2021, $stream_id:expr_2021) => {
58 $crate::trace_event!(
59 $log,
60 $crate::tracing::Event {
61 timestamp: $crate::tracing::timestamp_now(),
62 trace_id: $trace_id,
63 event_data: $crate::tracing::EventData::StreamOpened {
64 stream_id: $stream_id,
65 _padding: [0u8; 56],
66 },
67 ..Default::default()
68 }
69 )
70 };
71}
72
73#[macro_export]
75macro_rules! trace_conn_established {
76 ($log:expr_2021, $trace_id:expr_2021, $rtt:expr_2021) => {
77 $crate::trace_event!(
78 $log,
79 $crate::tracing::Event {
80 timestamp: $crate::tracing::timestamp_now(),
81 trace_id: $trace_id,
82 event_data: $crate::tracing::EventData::ConnEstablished {
83 rtt: $rtt as u32,
84 _padding: [0u8; 60],
85 },
86 ..Default::default()
87 }
88 )
89 };
90}
91
92#[macro_export]
94macro_rules! if_trace {
95 ($($body:tt)*) => {
96 #[cfg(feature = "trace")]
97 {
98 $($body)*
99 }
100 };
101}
102
103#[macro_export]
105macro_rules! trace_observed_address_sent {
106 ($log:expr_2021, $trace_id:expr_2021, $addr:expr_2021, $path_id:expr_2021) => {
107 $crate::trace_event!($log, {
108 let (addr_bytes, addr_type) = $crate::tracing::socket_addr_to_bytes($addr);
109 $crate::tracing::Event {
110 timestamp: $crate::tracing::timestamp_now(),
111 trace_id: $trace_id,
112 event_data: $crate::tracing::EventData::ObservedAddressSent {
113 addr_bytes,
114 addr_type,
115 path_id: $path_id as u32,
116 _padding: [0u8; 41],
117 },
118 ..Default::default()
119 }
120 })
121 };
122}
123
124#[macro_export]
126macro_rules! trace_observed_address_received {
127 ($log:expr_2021, $trace_id:expr_2021, $addr:expr_2021, $path_id:expr_2021) => {
128 $crate::trace_event!($log, {
129 let (addr_bytes, addr_type) = $crate::tracing::socket_addr_to_bytes($addr);
130 $crate::tracing::Event {
131 timestamp: $crate::tracing::timestamp_now(),
132 trace_id: $trace_id,
133 event_data: $crate::tracing::EventData::ObservedAddressReceived {
134 addr_bytes,
135 addr_type,
136 from_peer: [0u8; 32], _padding: [0u8; 13],
138 },
139 ..Default::default()
140 }
141 })
142 };
143}
144
145#[macro_export]
147macro_rules! trace_candidate_discovered {
148 ($log:expr_2021, $trace_id:expr_2021, $addr:expr_2021, $priority:expr_2021) => {
149 $crate::trace_event!($log, {
150 let (addr_bytes, addr_type) = $crate::tracing::socket_addr_to_bytes($addr);
151 $crate::tracing::Event {
152 timestamp: $crate::tracing::timestamp_now(),
153 trace_id: $trace_id,
154 event_data: $crate::tracing::EventData::CandidateDiscovered {
155 addr_bytes,
156 addr_type,
157 priority: $priority as u32,
158 _padding: [0u8; 41],
159 },
160 ..Default::default()
161 }
162 })
163 };
164}
165
166#[macro_export]
168macro_rules! trace_hole_punching_started {
169 ($log:expr_2021, $trace_id:expr_2021, $peer:expr_2021) => {
170 $crate::trace_event!(
171 $log,
172 $crate::tracing::Event {
173 timestamp: $crate::tracing::timestamp_now(),
174 trace_id: $trace_id,
175 event_data: $crate::tracing::EventData::HolePunchingStarted {
176 peer: $peer,
177 _padding: [0u8; 32],
178 },
179 ..Default::default()
180 }
181 )
182 };
183}
184
185#[cfg(test)]
186mod tests {
187 use crate::tracing::{EventLog, TraceId};
188
189 #[test]
190 fn test_trace_macros() {
191 let _log = EventLog::new();
192 let _trace_id = TraceId::new();
193
194 trace_packet_sent!(&_log, _trace_id, 1200, 42);
196 trace_packet_received!(&_log, _trace_id, 1200, 43);
197 trace_stream_opened!(&_log, _trace_id, 1);
198 trace_conn_established!(&_log, _trace_id, 25);
199
200 if_trace! {
201 #[cfg(feature = "trace")]
203 let _count = _log.event_count();
204 }
205 }
206}