1#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
13#[repr(u32)]
14pub enum CongestionControlState {
15 Open = 0,
17 Disorder = 1,
20 CongestionWindowReduced = 2,
23 Recovery = 3,
26 Loss = 4,
29}
30
31impl CongestionControlState {
32 #[inline]
33 pub fn from_primitive(prim: u32) -> Option<Self> {
34 match prim {
35 0 => Some(Self::Open),
36 1 => Some(Self::Disorder),
37 2 => Some(Self::CongestionWindowReduced),
38 3 => Some(Self::Recovery),
39 4 => Some(Self::Loss),
40 _ => None,
41 }
42 }
43
44 #[inline]
45 pub const fn into_primitive(self) -> u32 {
46 self as u32
47 }
48}
49
50#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
52#[repr(u32)]
53pub enum State {
54 Established = 1,
55 SynSent = 2,
56 SynRecv = 3,
57 FinWait1 = 4,
58 FinWait2 = 5,
59 TimeWait = 6,
60 Close = 7,
61 CloseWait = 8,
62 LastAck = 9,
63 Listen = 10,
64 Closing = 11,
65}
66
67impl State {
68 #[inline]
69 pub fn from_primitive(prim: u32) -> Option<Self> {
70 match prim {
71 1 => Some(Self::Established),
72 2 => Some(Self::SynSent),
73 3 => Some(Self::SynRecv),
74 4 => Some(Self::FinWait1),
75 5 => Some(Self::FinWait2),
76 6 => Some(Self::TimeWait),
77 7 => Some(Self::Close),
78 8 => Some(Self::CloseWait),
79 9 => Some(Self::LastAck),
80 10 => Some(Self::Listen),
81 11 => Some(Self::Closing),
82 _ => None,
83 }
84 }
85
86 #[inline]
87 pub const fn into_primitive(self) -> u32 {
88 self as u32
89 }
90}
91
92#[derive(Clone, Debug, Default, PartialEq)]
94pub struct Info {
95 pub state: Option<State>,
97 pub ca_state: Option<CongestionControlState>,
99 pub rto_usec: Option<u32>,
101 pub tcpi_last_data_sent_msec: Option<u32>,
103 pub tcpi_last_ack_recv_msec: Option<u32>,
105 pub rtt_usec: Option<u32>,
107 pub rtt_var_usec: Option<u32>,
109 pub snd_ssthresh: Option<u32>,
111 pub snd_cwnd: Option<u32>,
113 pub tcpi_total_retrans: Option<u32>,
115 pub tcpi_segs_out: Option<u64>,
117 pub tcpi_segs_in: Option<u64>,
119 pub reorder_seen: Option<bool>,
121 #[doc(hidden)]
122 pub __source_breaking: fidl::marker::SourceBreaking,
123}
124
125impl fidl::Persistable for Info {}
126
127mod internal {
128 use super::*;
129 unsafe impl fidl::encoding::TypeMarker for CongestionControlState {
130 type Owned = Self;
131
132 #[inline(always)]
133 fn inline_align(_context: fidl::encoding::Context) -> usize {
134 std::mem::align_of::<u32>()
135 }
136
137 #[inline(always)]
138 fn inline_size(_context: fidl::encoding::Context) -> usize {
139 std::mem::size_of::<u32>()
140 }
141
142 #[inline(always)]
143 fn encode_is_copy() -> bool {
144 true
145 }
146
147 #[inline(always)]
148 fn decode_is_copy() -> bool {
149 false
150 }
151 }
152
153 impl fidl::encoding::ValueTypeMarker for CongestionControlState {
154 type Borrowed<'a> = Self;
155 #[inline(always)]
156 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
157 *value
158 }
159 }
160
161 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
162 for CongestionControlState
163 {
164 #[inline]
165 unsafe fn encode(
166 self,
167 encoder: &mut fidl::encoding::Encoder<'_, D>,
168 offset: usize,
169 _depth: fidl::encoding::Depth,
170 ) -> fidl::Result<()> {
171 encoder.debug_check_bounds::<Self>(offset);
172 encoder.write_num(self.into_primitive(), offset);
173 Ok(())
174 }
175 }
176
177 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
178 for CongestionControlState
179 {
180 #[inline(always)]
181 fn new_empty() -> Self {
182 Self::Open
183 }
184
185 #[inline]
186 unsafe fn decode(
187 &mut self,
188 decoder: &mut fidl::encoding::Decoder<'_, D>,
189 offset: usize,
190 _depth: fidl::encoding::Depth,
191 ) -> fidl::Result<()> {
192 decoder.debug_check_bounds::<Self>(offset);
193 let prim = decoder.read_num::<u32>(offset);
194
195 *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
196 Ok(())
197 }
198 }
199 unsafe impl fidl::encoding::TypeMarker for State {
200 type Owned = Self;
201
202 #[inline(always)]
203 fn inline_align(_context: fidl::encoding::Context) -> usize {
204 std::mem::align_of::<u32>()
205 }
206
207 #[inline(always)]
208 fn inline_size(_context: fidl::encoding::Context) -> usize {
209 std::mem::size_of::<u32>()
210 }
211
212 #[inline(always)]
213 fn encode_is_copy() -> bool {
214 true
215 }
216
217 #[inline(always)]
218 fn decode_is_copy() -> bool {
219 false
220 }
221 }
222
223 impl fidl::encoding::ValueTypeMarker for State {
224 type Borrowed<'a> = Self;
225 #[inline(always)]
226 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
227 *value
228 }
229 }
230
231 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for State {
232 #[inline]
233 unsafe fn encode(
234 self,
235 encoder: &mut fidl::encoding::Encoder<'_, D>,
236 offset: usize,
237 _depth: fidl::encoding::Depth,
238 ) -> fidl::Result<()> {
239 encoder.debug_check_bounds::<Self>(offset);
240 encoder.write_num(self.into_primitive(), offset);
241 Ok(())
242 }
243 }
244
245 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for State {
246 #[inline(always)]
247 fn new_empty() -> Self {
248 Self::Established
249 }
250
251 #[inline]
252 unsafe fn decode(
253 &mut self,
254 decoder: &mut fidl::encoding::Decoder<'_, D>,
255 offset: usize,
256 _depth: fidl::encoding::Depth,
257 ) -> fidl::Result<()> {
258 decoder.debug_check_bounds::<Self>(offset);
259 let prim = decoder.read_num::<u32>(offset);
260
261 *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
262 Ok(())
263 }
264 }
265
266 impl Info {
267 #[inline(always)]
268 fn max_ordinal_present(&self) -> u64 {
269 if let Some(_) = self.reorder_seen {
270 return 54;
271 }
272 if let Some(_) = self.tcpi_segs_in {
273 return 40;
274 }
275 if let Some(_) = self.tcpi_segs_out {
276 return 39;
277 }
278 if let Some(_) = self.tcpi_total_retrans {
279 return 34;
280 }
281 if let Some(_) = self.snd_cwnd {
282 return 29;
283 }
284 if let Some(_) = self.snd_ssthresh {
285 return 28;
286 }
287 if let Some(_) = self.rtt_var_usec {
288 return 27;
289 }
290 if let Some(_) = self.rtt_usec {
291 return 26;
292 }
293 if let Some(_) = self.tcpi_last_ack_recv_msec {
294 return 23;
295 }
296 if let Some(_) = self.tcpi_last_data_sent_msec {
297 return 20;
298 }
299 if let Some(_) = self.rto_usec {
300 return 11;
301 }
302 if let Some(_) = self.ca_state {
303 return 2;
304 }
305 if let Some(_) = self.state {
306 return 1;
307 }
308 0
309 }
310 }
311
312 impl fidl::encoding::ValueTypeMarker for Info {
313 type Borrowed<'a> = &'a Self;
314 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
315 value
316 }
317 }
318
319 unsafe impl fidl::encoding::TypeMarker for Info {
320 type Owned = Self;
321
322 #[inline(always)]
323 fn inline_align(_context: fidl::encoding::Context) -> usize {
324 8
325 }
326
327 #[inline(always)]
328 fn inline_size(_context: fidl::encoding::Context) -> usize {
329 16
330 }
331 }
332
333 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Info, D> for &Info {
334 unsafe fn encode(
335 self,
336 encoder: &mut fidl::encoding::Encoder<'_, D>,
337 offset: usize,
338 mut depth: fidl::encoding::Depth,
339 ) -> fidl::Result<()> {
340 encoder.debug_check_bounds::<Info>(offset);
341 let max_ordinal: u64 = self.max_ordinal_present();
343 encoder.write_num(max_ordinal, offset);
344 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
345 if max_ordinal == 0 {
347 return Ok(());
348 }
349 depth.increment()?;
350 let envelope_size = 8;
351 let bytes_len = max_ordinal as usize * envelope_size;
352 #[allow(unused_variables)]
353 let offset = encoder.out_of_line_offset(bytes_len);
354 let mut _prev_end_offset: usize = 0;
355 if 1 > max_ordinal {
356 return Ok(());
357 }
358
359 let cur_offset: usize = (1 - 1) * envelope_size;
362
363 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
365
366 fidl::encoding::encode_in_envelope_optional::<State, D>(
371 self.state.as_ref().map(<State as fidl::encoding::ValueTypeMarker>::borrow),
372 encoder,
373 offset + cur_offset,
374 depth,
375 )?;
376
377 _prev_end_offset = cur_offset + envelope_size;
378 if 2 > max_ordinal {
379 return Ok(());
380 }
381
382 let cur_offset: usize = (2 - 1) * envelope_size;
385
386 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
388
389 fidl::encoding::encode_in_envelope_optional::<CongestionControlState, D>(
394 self.ca_state
395 .as_ref()
396 .map(<CongestionControlState as fidl::encoding::ValueTypeMarker>::borrow),
397 encoder,
398 offset + cur_offset,
399 depth,
400 )?;
401
402 _prev_end_offset = cur_offset + envelope_size;
403 if 11 > max_ordinal {
404 return Ok(());
405 }
406
407 let cur_offset: usize = (11 - 1) * envelope_size;
410
411 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
413
414 fidl::encoding::encode_in_envelope_optional::<u32, D>(
419 self.rto_usec.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
420 encoder,
421 offset + cur_offset,
422 depth,
423 )?;
424
425 _prev_end_offset = cur_offset + envelope_size;
426 if 20 > max_ordinal {
427 return Ok(());
428 }
429
430 let cur_offset: usize = (20 - 1) * envelope_size;
433
434 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
436
437 fidl::encoding::encode_in_envelope_optional::<u32, D>(
442 self.tcpi_last_data_sent_msec
443 .as_ref()
444 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
445 encoder,
446 offset + cur_offset,
447 depth,
448 )?;
449
450 _prev_end_offset = cur_offset + envelope_size;
451 if 23 > max_ordinal {
452 return Ok(());
453 }
454
455 let cur_offset: usize = (23 - 1) * envelope_size;
458
459 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
461
462 fidl::encoding::encode_in_envelope_optional::<u32, D>(
467 self.tcpi_last_ack_recv_msec
468 .as_ref()
469 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
470 encoder,
471 offset + cur_offset,
472 depth,
473 )?;
474
475 _prev_end_offset = cur_offset + envelope_size;
476 if 26 > max_ordinal {
477 return Ok(());
478 }
479
480 let cur_offset: usize = (26 - 1) * envelope_size;
483
484 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
486
487 fidl::encoding::encode_in_envelope_optional::<u32, D>(
492 self.rtt_usec.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
493 encoder,
494 offset + cur_offset,
495 depth,
496 )?;
497
498 _prev_end_offset = cur_offset + envelope_size;
499 if 27 > max_ordinal {
500 return Ok(());
501 }
502
503 let cur_offset: usize = (27 - 1) * envelope_size;
506
507 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
509
510 fidl::encoding::encode_in_envelope_optional::<u32, D>(
515 self.rtt_var_usec.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
516 encoder,
517 offset + cur_offset,
518 depth,
519 )?;
520
521 _prev_end_offset = cur_offset + envelope_size;
522 if 28 > max_ordinal {
523 return Ok(());
524 }
525
526 let cur_offset: usize = (28 - 1) * envelope_size;
529
530 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
532
533 fidl::encoding::encode_in_envelope_optional::<u32, D>(
538 self.snd_ssthresh.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
539 encoder,
540 offset + cur_offset,
541 depth,
542 )?;
543
544 _prev_end_offset = cur_offset + envelope_size;
545 if 29 > max_ordinal {
546 return Ok(());
547 }
548
549 let cur_offset: usize = (29 - 1) * envelope_size;
552
553 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
555
556 fidl::encoding::encode_in_envelope_optional::<u32, D>(
561 self.snd_cwnd.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
562 encoder,
563 offset + cur_offset,
564 depth,
565 )?;
566
567 _prev_end_offset = cur_offset + envelope_size;
568 if 34 > max_ordinal {
569 return Ok(());
570 }
571
572 let cur_offset: usize = (34 - 1) * envelope_size;
575
576 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
578
579 fidl::encoding::encode_in_envelope_optional::<u32, D>(
584 self.tcpi_total_retrans
585 .as_ref()
586 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
587 encoder,
588 offset + cur_offset,
589 depth,
590 )?;
591
592 _prev_end_offset = cur_offset + envelope_size;
593 if 39 > max_ordinal {
594 return Ok(());
595 }
596
597 let cur_offset: usize = (39 - 1) * envelope_size;
600
601 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
603
604 fidl::encoding::encode_in_envelope_optional::<u64, D>(
609 self.tcpi_segs_out.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
610 encoder,
611 offset + cur_offset,
612 depth,
613 )?;
614
615 _prev_end_offset = cur_offset + envelope_size;
616 if 40 > max_ordinal {
617 return Ok(());
618 }
619
620 let cur_offset: usize = (40 - 1) * envelope_size;
623
624 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
626
627 fidl::encoding::encode_in_envelope_optional::<u64, D>(
632 self.tcpi_segs_in.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
633 encoder,
634 offset + cur_offset,
635 depth,
636 )?;
637
638 _prev_end_offset = cur_offset + envelope_size;
639 if 54 > max_ordinal {
640 return Ok(());
641 }
642
643 let cur_offset: usize = (54 - 1) * envelope_size;
646
647 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
649
650 fidl::encoding::encode_in_envelope_optional::<bool, D>(
655 self.reorder_seen.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
656 encoder,
657 offset + cur_offset,
658 depth,
659 )?;
660
661 _prev_end_offset = cur_offset + envelope_size;
662
663 Ok(())
664 }
665 }
666
667 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Info {
668 #[inline(always)]
669 fn new_empty() -> Self {
670 Self::default()
671 }
672
673 unsafe fn decode(
674 &mut self,
675 decoder: &mut fidl::encoding::Decoder<'_, D>,
676 offset: usize,
677 mut depth: fidl::encoding::Depth,
678 ) -> fidl::Result<()> {
679 decoder.debug_check_bounds::<Self>(offset);
680 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
681 None => return Err(fidl::Error::NotNullable),
682 Some(len) => len,
683 };
684 if len == 0 {
686 return Ok(());
687 };
688 depth.increment()?;
689 let envelope_size = 8;
690 let bytes_len = len * envelope_size;
691 let offset = decoder.out_of_line_offset(bytes_len)?;
692 let mut _next_ordinal_to_read = 0;
694 let mut next_offset = offset;
695 let end_offset = offset + bytes_len;
696 _next_ordinal_to_read += 1;
697 if next_offset >= end_offset {
698 return Ok(());
699 }
700
701 while _next_ordinal_to_read < 1 {
703 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
704 _next_ordinal_to_read += 1;
705 next_offset += envelope_size;
706 }
707
708 let next_out_of_line = decoder.next_out_of_line();
709 let handles_before = decoder.remaining_handles();
710 if let Some((inlined, num_bytes, num_handles)) =
711 fidl::encoding::decode_envelope_header(decoder, next_offset)?
712 {
713 let member_inline_size =
714 <State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
715 if inlined != (member_inline_size <= 4) {
716 return Err(fidl::Error::InvalidInlineBitInEnvelope);
717 }
718 let inner_offset;
719 let mut inner_depth = depth.clone();
720 if inlined {
721 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
722 inner_offset = next_offset;
723 } else {
724 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
725 inner_depth.increment()?;
726 }
727 let val_ref = self.state.get_or_insert_with(|| fidl::new_empty!(State, D));
728 fidl::decode!(State, D, val_ref, decoder, inner_offset, inner_depth)?;
729 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
730 {
731 return Err(fidl::Error::InvalidNumBytesInEnvelope);
732 }
733 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
734 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
735 }
736 }
737
738 next_offset += envelope_size;
739 _next_ordinal_to_read += 1;
740 if next_offset >= end_offset {
741 return Ok(());
742 }
743
744 while _next_ordinal_to_read < 2 {
746 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
747 _next_ordinal_to_read += 1;
748 next_offset += envelope_size;
749 }
750
751 let next_out_of_line = decoder.next_out_of_line();
752 let handles_before = decoder.remaining_handles();
753 if let Some((inlined, num_bytes, num_handles)) =
754 fidl::encoding::decode_envelope_header(decoder, next_offset)?
755 {
756 let member_inline_size =
757 <CongestionControlState as fidl::encoding::TypeMarker>::inline_size(
758 decoder.context,
759 );
760 if inlined != (member_inline_size <= 4) {
761 return Err(fidl::Error::InvalidInlineBitInEnvelope);
762 }
763 let inner_offset;
764 let mut inner_depth = depth.clone();
765 if inlined {
766 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
767 inner_offset = next_offset;
768 } else {
769 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
770 inner_depth.increment()?;
771 }
772 let val_ref = self
773 .ca_state
774 .get_or_insert_with(|| fidl::new_empty!(CongestionControlState, D));
775 fidl::decode!(
776 CongestionControlState,
777 D,
778 val_ref,
779 decoder,
780 inner_offset,
781 inner_depth
782 )?;
783 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
784 {
785 return Err(fidl::Error::InvalidNumBytesInEnvelope);
786 }
787 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
788 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
789 }
790 }
791
792 next_offset += envelope_size;
793 _next_ordinal_to_read += 1;
794 if next_offset >= end_offset {
795 return Ok(());
796 }
797
798 while _next_ordinal_to_read < 11 {
800 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
801 _next_ordinal_to_read += 1;
802 next_offset += envelope_size;
803 }
804
805 let next_out_of_line = decoder.next_out_of_line();
806 let handles_before = decoder.remaining_handles();
807 if let Some((inlined, num_bytes, num_handles)) =
808 fidl::encoding::decode_envelope_header(decoder, next_offset)?
809 {
810 let member_inline_size =
811 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
812 if inlined != (member_inline_size <= 4) {
813 return Err(fidl::Error::InvalidInlineBitInEnvelope);
814 }
815 let inner_offset;
816 let mut inner_depth = depth.clone();
817 if inlined {
818 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
819 inner_offset = next_offset;
820 } else {
821 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
822 inner_depth.increment()?;
823 }
824 let val_ref = self.rto_usec.get_or_insert_with(|| fidl::new_empty!(u32, D));
825 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
826 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
827 {
828 return Err(fidl::Error::InvalidNumBytesInEnvelope);
829 }
830 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
831 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
832 }
833 }
834
835 next_offset += envelope_size;
836 _next_ordinal_to_read += 1;
837 if next_offset >= end_offset {
838 return Ok(());
839 }
840
841 while _next_ordinal_to_read < 20 {
843 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
844 _next_ordinal_to_read += 1;
845 next_offset += envelope_size;
846 }
847
848 let next_out_of_line = decoder.next_out_of_line();
849 let handles_before = decoder.remaining_handles();
850 if let Some((inlined, num_bytes, num_handles)) =
851 fidl::encoding::decode_envelope_header(decoder, next_offset)?
852 {
853 let member_inline_size =
854 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
855 if inlined != (member_inline_size <= 4) {
856 return Err(fidl::Error::InvalidInlineBitInEnvelope);
857 }
858 let inner_offset;
859 let mut inner_depth = depth.clone();
860 if inlined {
861 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
862 inner_offset = next_offset;
863 } else {
864 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
865 inner_depth.increment()?;
866 }
867 let val_ref =
868 self.tcpi_last_data_sent_msec.get_or_insert_with(|| fidl::new_empty!(u32, D));
869 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
870 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
871 {
872 return Err(fidl::Error::InvalidNumBytesInEnvelope);
873 }
874 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
875 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
876 }
877 }
878
879 next_offset += envelope_size;
880 _next_ordinal_to_read += 1;
881 if next_offset >= end_offset {
882 return Ok(());
883 }
884
885 while _next_ordinal_to_read < 23 {
887 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
888 _next_ordinal_to_read += 1;
889 next_offset += envelope_size;
890 }
891
892 let next_out_of_line = decoder.next_out_of_line();
893 let handles_before = decoder.remaining_handles();
894 if let Some((inlined, num_bytes, num_handles)) =
895 fidl::encoding::decode_envelope_header(decoder, next_offset)?
896 {
897 let member_inline_size =
898 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
899 if inlined != (member_inline_size <= 4) {
900 return Err(fidl::Error::InvalidInlineBitInEnvelope);
901 }
902 let inner_offset;
903 let mut inner_depth = depth.clone();
904 if inlined {
905 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
906 inner_offset = next_offset;
907 } else {
908 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
909 inner_depth.increment()?;
910 }
911 let val_ref =
912 self.tcpi_last_ack_recv_msec.get_or_insert_with(|| fidl::new_empty!(u32, D));
913 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
914 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
915 {
916 return Err(fidl::Error::InvalidNumBytesInEnvelope);
917 }
918 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
919 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
920 }
921 }
922
923 next_offset += envelope_size;
924 _next_ordinal_to_read += 1;
925 if next_offset >= end_offset {
926 return Ok(());
927 }
928
929 while _next_ordinal_to_read < 26 {
931 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
932 _next_ordinal_to_read += 1;
933 next_offset += envelope_size;
934 }
935
936 let next_out_of_line = decoder.next_out_of_line();
937 let handles_before = decoder.remaining_handles();
938 if let Some((inlined, num_bytes, num_handles)) =
939 fidl::encoding::decode_envelope_header(decoder, next_offset)?
940 {
941 let member_inline_size =
942 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
943 if inlined != (member_inline_size <= 4) {
944 return Err(fidl::Error::InvalidInlineBitInEnvelope);
945 }
946 let inner_offset;
947 let mut inner_depth = depth.clone();
948 if inlined {
949 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
950 inner_offset = next_offset;
951 } else {
952 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
953 inner_depth.increment()?;
954 }
955 let val_ref = self.rtt_usec.get_or_insert_with(|| fidl::new_empty!(u32, D));
956 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
957 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
958 {
959 return Err(fidl::Error::InvalidNumBytesInEnvelope);
960 }
961 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
962 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
963 }
964 }
965
966 next_offset += envelope_size;
967 _next_ordinal_to_read += 1;
968 if next_offset >= end_offset {
969 return Ok(());
970 }
971
972 while _next_ordinal_to_read < 27 {
974 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
975 _next_ordinal_to_read += 1;
976 next_offset += envelope_size;
977 }
978
979 let next_out_of_line = decoder.next_out_of_line();
980 let handles_before = decoder.remaining_handles();
981 if let Some((inlined, num_bytes, num_handles)) =
982 fidl::encoding::decode_envelope_header(decoder, next_offset)?
983 {
984 let member_inline_size =
985 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
986 if inlined != (member_inline_size <= 4) {
987 return Err(fidl::Error::InvalidInlineBitInEnvelope);
988 }
989 let inner_offset;
990 let mut inner_depth = depth.clone();
991 if inlined {
992 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
993 inner_offset = next_offset;
994 } else {
995 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
996 inner_depth.increment()?;
997 }
998 let val_ref = self.rtt_var_usec.get_or_insert_with(|| fidl::new_empty!(u32, D));
999 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1000 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1001 {
1002 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1003 }
1004 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1005 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1006 }
1007 }
1008
1009 next_offset += envelope_size;
1010 _next_ordinal_to_read += 1;
1011 if next_offset >= end_offset {
1012 return Ok(());
1013 }
1014
1015 while _next_ordinal_to_read < 28 {
1017 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1018 _next_ordinal_to_read += 1;
1019 next_offset += envelope_size;
1020 }
1021
1022 let next_out_of_line = decoder.next_out_of_line();
1023 let handles_before = decoder.remaining_handles();
1024 if let Some((inlined, num_bytes, num_handles)) =
1025 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1026 {
1027 let member_inline_size =
1028 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1029 if inlined != (member_inline_size <= 4) {
1030 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1031 }
1032 let inner_offset;
1033 let mut inner_depth = depth.clone();
1034 if inlined {
1035 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1036 inner_offset = next_offset;
1037 } else {
1038 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1039 inner_depth.increment()?;
1040 }
1041 let val_ref = self.snd_ssthresh.get_or_insert_with(|| fidl::new_empty!(u32, D));
1042 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1043 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1044 {
1045 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1046 }
1047 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1048 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1049 }
1050 }
1051
1052 next_offset += envelope_size;
1053 _next_ordinal_to_read += 1;
1054 if next_offset >= end_offset {
1055 return Ok(());
1056 }
1057
1058 while _next_ordinal_to_read < 29 {
1060 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1061 _next_ordinal_to_read += 1;
1062 next_offset += envelope_size;
1063 }
1064
1065 let next_out_of_line = decoder.next_out_of_line();
1066 let handles_before = decoder.remaining_handles();
1067 if let Some((inlined, num_bytes, num_handles)) =
1068 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1069 {
1070 let member_inline_size =
1071 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1072 if inlined != (member_inline_size <= 4) {
1073 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1074 }
1075 let inner_offset;
1076 let mut inner_depth = depth.clone();
1077 if inlined {
1078 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1079 inner_offset = next_offset;
1080 } else {
1081 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1082 inner_depth.increment()?;
1083 }
1084 let val_ref = self.snd_cwnd.get_or_insert_with(|| fidl::new_empty!(u32, D));
1085 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1086 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1087 {
1088 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1089 }
1090 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1091 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1092 }
1093 }
1094
1095 next_offset += envelope_size;
1096 _next_ordinal_to_read += 1;
1097 if next_offset >= end_offset {
1098 return Ok(());
1099 }
1100
1101 while _next_ordinal_to_read < 34 {
1103 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1104 _next_ordinal_to_read += 1;
1105 next_offset += envelope_size;
1106 }
1107
1108 let next_out_of_line = decoder.next_out_of_line();
1109 let handles_before = decoder.remaining_handles();
1110 if let Some((inlined, num_bytes, num_handles)) =
1111 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1112 {
1113 let member_inline_size =
1114 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1115 if inlined != (member_inline_size <= 4) {
1116 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1117 }
1118 let inner_offset;
1119 let mut inner_depth = depth.clone();
1120 if inlined {
1121 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1122 inner_offset = next_offset;
1123 } else {
1124 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1125 inner_depth.increment()?;
1126 }
1127 let val_ref =
1128 self.tcpi_total_retrans.get_or_insert_with(|| fidl::new_empty!(u32, D));
1129 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1130 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1131 {
1132 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1133 }
1134 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1135 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1136 }
1137 }
1138
1139 next_offset += envelope_size;
1140 _next_ordinal_to_read += 1;
1141 if next_offset >= end_offset {
1142 return Ok(());
1143 }
1144
1145 while _next_ordinal_to_read < 39 {
1147 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1148 _next_ordinal_to_read += 1;
1149 next_offset += envelope_size;
1150 }
1151
1152 let next_out_of_line = decoder.next_out_of_line();
1153 let handles_before = decoder.remaining_handles();
1154 if let Some((inlined, num_bytes, num_handles)) =
1155 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1156 {
1157 let member_inline_size =
1158 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1159 if inlined != (member_inline_size <= 4) {
1160 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1161 }
1162 let inner_offset;
1163 let mut inner_depth = depth.clone();
1164 if inlined {
1165 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1166 inner_offset = next_offset;
1167 } else {
1168 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1169 inner_depth.increment()?;
1170 }
1171 let val_ref = self.tcpi_segs_out.get_or_insert_with(|| fidl::new_empty!(u64, D));
1172 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1173 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1174 {
1175 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1176 }
1177 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1178 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1179 }
1180 }
1181
1182 next_offset += envelope_size;
1183 _next_ordinal_to_read += 1;
1184 if next_offset >= end_offset {
1185 return Ok(());
1186 }
1187
1188 while _next_ordinal_to_read < 40 {
1190 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1191 _next_ordinal_to_read += 1;
1192 next_offset += envelope_size;
1193 }
1194
1195 let next_out_of_line = decoder.next_out_of_line();
1196 let handles_before = decoder.remaining_handles();
1197 if let Some((inlined, num_bytes, num_handles)) =
1198 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1199 {
1200 let member_inline_size =
1201 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1202 if inlined != (member_inline_size <= 4) {
1203 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1204 }
1205 let inner_offset;
1206 let mut inner_depth = depth.clone();
1207 if inlined {
1208 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1209 inner_offset = next_offset;
1210 } else {
1211 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1212 inner_depth.increment()?;
1213 }
1214 let val_ref = self.tcpi_segs_in.get_or_insert_with(|| fidl::new_empty!(u64, D));
1215 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1216 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1217 {
1218 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1219 }
1220 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1221 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1222 }
1223 }
1224
1225 next_offset += envelope_size;
1226 _next_ordinal_to_read += 1;
1227 if next_offset >= end_offset {
1228 return Ok(());
1229 }
1230
1231 while _next_ordinal_to_read < 54 {
1233 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1234 _next_ordinal_to_read += 1;
1235 next_offset += envelope_size;
1236 }
1237
1238 let next_out_of_line = decoder.next_out_of_line();
1239 let handles_before = decoder.remaining_handles();
1240 if let Some((inlined, num_bytes, num_handles)) =
1241 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1242 {
1243 let member_inline_size =
1244 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1245 if inlined != (member_inline_size <= 4) {
1246 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1247 }
1248 let inner_offset;
1249 let mut inner_depth = depth.clone();
1250 if inlined {
1251 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1252 inner_offset = next_offset;
1253 } else {
1254 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1255 inner_depth.increment()?;
1256 }
1257 let val_ref = self.reorder_seen.get_or_insert_with(|| fidl::new_empty!(bool, D));
1258 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1259 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1260 {
1261 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1262 }
1263 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1264 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1265 }
1266 }
1267
1268 next_offset += envelope_size;
1269
1270 while next_offset < end_offset {
1272 _next_ordinal_to_read += 1;
1273 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1274 next_offset += envelope_size;
1275 }
1276
1277 Ok(())
1278 }
1279 }
1280}