From a166fffaa52981d6ab17ed9b658ce399704ec03c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oto=20Du=C5=A1ek?= Date: Tue, 6 Jun 2023 11:00:24 +0200 Subject: [PATCH] Fix of rtp header size calculation --- rtp/src/header.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/rtp/src/header.rs b/rtp/src/header.rs index a5a7c9a17..7c867528b 100644 --- a/rtp/src/header.rs +++ b/rtp/src/header.rs @@ -47,6 +47,7 @@ pub struct Header { pub csrc: Vec, pub extension_profile: u16, pub extensions: Vec, + pub extensions_padding: usize } impl Unmarshal for Header { @@ -97,7 +98,7 @@ impl Unmarshal for Header { for _ in 0..cc { csrc.push(raw_packet.get_u32()); } - + let mut extensions_padding: usize = 0; let (extension_profile, extensions) = if extension { let expected = curr_offset + 4; if raw_packet_len < expected { @@ -123,6 +124,7 @@ impl Unmarshal for Header { if b == 0x00 { // padding curr_offset += 1; + extensions_padding += 1; continue; } @@ -149,6 +151,7 @@ impl Unmarshal for Header { if b == 0x00 { // padding curr_offset += 1; + extensions_padding += 1; continue; } @@ -194,6 +197,7 @@ impl Unmarshal for Header { csrc, extension_profile, extensions, + extensions_padding }) } } @@ -203,7 +207,7 @@ impl MarshalSize for Header { fn marshal_size(&self) -> usize { let mut head_size = 12 + (self.csrc.len() * CSRC_LENGTH); if self.extension { - let extension_payload_len = self.get_extension_payload_len(); + let extension_payload_len = self.get_extension_payload_len() + self.extensions_padding; let extension_payload_size = (extension_payload_len + 3) / 4; head_size += 4 + extension_payload_size * 4; }