@@ -47,6 +47,7 @@ pub struct Header {
47
47
pub csrc : Vec < u32 > ,
48
48
pub extension_profile : u16 ,
49
49
pub extensions : Vec < Extension > ,
50
+ pub extensions_padding : usize
50
51
}
51
52
52
53
impl Unmarshal for Header {
@@ -97,7 +98,7 @@ impl Unmarshal for Header {
97
98
for _ in 0 ..cc {
98
99
csrc. push ( raw_packet. get_u32 ( ) ) ;
99
100
}
100
-
101
+ let mut extensions_padding : usize = 0 ;
101
102
let ( extension_profile, extensions) = if extension {
102
103
let expected = curr_offset + 4 ;
103
104
if raw_packet_len < expected {
@@ -123,6 +124,7 @@ impl Unmarshal for Header {
123
124
if b == 0x00 {
124
125
// padding
125
126
curr_offset += 1 ;
127
+ extensions_padding += 1 ;
126
128
continue ;
127
129
}
128
130
@@ -149,6 +151,7 @@ impl Unmarshal for Header {
149
151
if b == 0x00 {
150
152
// padding
151
153
curr_offset += 1 ;
154
+ extensions_padding += 1 ;
152
155
continue ;
153
156
}
154
157
@@ -194,6 +197,7 @@ impl Unmarshal for Header {
194
197
csrc,
195
198
extension_profile,
196
199
extensions,
200
+ extensions_padding
197
201
} )
198
202
}
199
203
}
@@ -203,7 +207,7 @@ impl MarshalSize for Header {
203
207
fn marshal_size ( & self ) -> usize {
204
208
let mut head_size = 12 + ( self . csrc . len ( ) * CSRC_LENGTH ) ;
205
209
if self . extension {
206
- let extension_payload_len = self . get_extension_payload_len ( ) ;
210
+ let extension_payload_len = self . get_extension_payload_len ( ) + self . extensions_padding ;
207
211
let extension_payload_size = ( extension_payload_len + 3 ) / 4 ;
208
212
head_size += 4 + extension_payload_size * 4 ;
209
213
}
0 commit comments