Skip to content
This repository was archived by the owner on Aug 23, 2022. It is now read-only.

Commit 4a6c57f

Browse files
author
rainliu
committed
use new util Marshal trait
1 parent 9e0f5bc commit 4a6c57f

File tree

11 files changed

+51
-53
lines changed

11 files changed

+51
-53
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ repository = "https://github.com/webrtc-rs/rtp"
1212
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
1313

1414
[dependencies]
15-
util = { package = "webrtc-util", version = "0.2.1", default-features = false, features = ["marshal"] }
15+
util = { package = "webrtc-util", version = "0.2.2", default-features = false, features = ["marshal"] }
1616
bytes = "1"
1717
rand = "0.8.0"
1818
thiserror = "1.0.25"

src/extension/abs_send_time_extension/abs_send_time_extension_test.rs

+2
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ fn test_abs_send_time_extension_roundtrip() -> Result<()> {
5555

5656
for test in &tests {
5757
let mut raw = BytesMut::with_capacity(test.marshal_size());
58+
raw.resize(test.marshal_size(), 0);
5859
test.marshal_to(&mut raw)?;
5960
let raw = raw.freeze();
6061
let buf = &mut raw.clone();
@@ -79,6 +80,7 @@ fn test_abs_send_time_extension_estimate() -> Result<()> {
7980
timestamp: send_ntp >> 14,
8081
};
8182
let mut raw = BytesMut::with_capacity(send.marshal_size());
83+
raw.resize(send.marshal_size(), 0);
8284
send.marshal_to(&mut raw)?;
8385
let raw = raw.freeze();
8486
let buf = &mut raw.clone();

src/extension/abs_send_time_extension/mod.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,7 @@ impl MarshalSize for AbsSendTimeExtension {
4545

4646
impl Marshal for AbsSendTimeExtension {
4747
/// MarshalTo serializes the members to buffer.
48-
fn marshal_to<B>(&self, buf: &mut B) -> Result<usize>
49-
where
50-
B: BufMut,
51-
{
48+
fn marshal_to(&self, mut buf: &mut [u8]) -> Result<usize> {
5249
if buf.remaining_mut() < ABS_SEND_TIME_EXTENSION_SIZE {
5350
return Err(Error::ErrBufferTooSmall.into());
5451
}

src/extension/audio_level_extension/audio_level_extension_test.rs

+3
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ fn test_audio_level_extension_voice_true() -> Result<()> {
2222
assert_eq!(a1, a2);
2323

2424
let mut dst = BytesMut::with_capacity(a2.marshal_size());
25+
dst.resize(a2.marshal_size(), 0);
2526
a2.marshal_to(&mut dst)?;
2627
assert_eq!(raw, dst.freeze());
2728

@@ -40,6 +41,7 @@ fn test_audio_level_extension_voice_false() -> Result<()> {
4041
assert_eq!(a1, a2);
4142

4243
let mut dst = BytesMut::with_capacity(a2.marshal_size());
44+
dst.resize(a2.marshal_size(), 0);
4345
a2.marshal_to(&mut dst)?;
4446
assert_eq!(raw, dst.freeze());
4547

@@ -54,6 +56,7 @@ fn test_audio_level_extension_level_overflow() -> Result<()> {
5456
};
5557

5658
let mut dst = BytesMut::with_capacity(a.marshal_size());
59+
dst.resize(a.marshal_size(), 0);
5760
let result = a.marshal_to(&mut dst);
5861
assert!(result.is_err());
5962

src/extension/audio_level_extension/mod.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,7 @@ impl MarshalSize for AudioLevelExtension {
6464

6565
impl Marshal for AudioLevelExtension {
6666
/// MarshalTo serializes the members to buffer
67-
fn marshal_to<B>(&self, buf: &mut B) -> Result<usize>
68-
where
69-
B: BufMut,
70-
{
67+
fn marshal_to(&self, mut buf: &mut [u8]) -> Result<usize> {
7168
if buf.remaining_mut() < AUDIO_LEVEL_EXTENSION_SIZE {
7269
return Err(Error::ErrBufferTooSmall.into());
7370
}

src/extension/transport_cc_extension/mod.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,7 @@ impl MarshalSize for TransportCcExtension {
5151

5252
impl Marshal for TransportCcExtension {
5353
/// Marshal serializes the members to buffer
54-
fn marshal_to<B>(&self, buf: &mut B) -> Result<usize>
55-
where
56-
B: BufMut,
57-
{
54+
fn marshal_to(&self, mut buf: &mut [u8]) -> Result<usize> {
5855
if buf.remaining_mut() < TRANSPORT_CC_EXTENSION_SIZE {
5956
return Err(Error::ErrBufferTooSmall.into());
6057
}

src/extension/transport_cc_extension/transport_cc_extension_test.rs

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ fn test_transport_cc_extension() -> Result<()> {
2121
assert_eq!(t1, t2);
2222

2323
let mut dst = BytesMut::with_capacity(t2.marshal_size());
24+
dst.resize(t2.marshal_size(), 0);
2425
t2.marshal_to(&mut dst)?;
2526
assert_eq!(raw, dst.freeze());
2627

src/header.rs

+17-20
Original file line numberDiff line numberDiff line change
@@ -214,10 +214,7 @@ impl MarshalSize for Header {
214214

215215
impl Marshal for Header {
216216
/// Marshal serializes the header and writes to the buffer.
217-
fn marshal_to<B>(&self, writer: &mut B) -> Result<usize>
218-
where
219-
B: BufMut,
220-
{
217+
fn marshal_to(&self, mut buf: &mut [u8]) -> Result<usize> {
221218
/*
222219
* 0 1 2 3
223220
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
@@ -232,7 +229,7 @@ impl Marshal for Header {
232229
* | .... |
233230
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
234231
*/
235-
if writer.remaining_mut() < self.marshal_size() {
232+
if buf.remaining_mut() < self.marshal_size() {
236233
return Err(Error::ErrBufferTooSmall.into());
237234
}
238235

@@ -245,27 +242,27 @@ impl Marshal for Header {
245242
if self.extension {
246243
b0 |= 1 << EXTENSION_SHIFT;
247244
}
248-
writer.put_u8(b0);
245+
buf.put_u8(b0);
249246

250247
// The second byte contains the marker bit and payload type.
251248
let mut b1 = self.payload_type;
252249
if self.marker {
253250
b1 |= 1 << MARKER_SHIFT;
254251
}
255-
writer.put_u8(b1);
252+
buf.put_u8(b1);
256253

257-
writer.put_u16(self.sequence_number);
258-
writer.put_u32(self.timestamp);
259-
writer.put_u32(self.ssrc);
254+
buf.put_u16(self.sequence_number);
255+
buf.put_u32(self.timestamp);
256+
buf.put_u32(self.ssrc);
260257

261258
let mut n = 12;
262259
for csrc in &self.csrc {
263-
writer.put_u32(*csrc);
260+
buf.put_u32(*csrc);
264261
n += 4;
265262
}
266263

267264
if self.extension {
268-
writer.put_u16(self.extension_profile);
265+
buf.put_u16(self.extension_profile);
269266
n += 2;
270267

271268
// calculate extensions size and round to 4 bytes boundaries
@@ -278,27 +275,27 @@ impl Marshal for Header {
278275
return Err(Error::HeaderExtensionPayloadNot32BitWords.into());
279276
}
280277
let extension_payload_size = (extension_payload_len as u16 + 3) / 4;
281-
writer.put_u16(extension_payload_size);
278+
buf.put_u16(extension_payload_size);
282279
n += 2;
283280

284281
match self.extension_profile {
285282
// RFC 8285 RTP One Byte Header Extension
286283
EXTENSION_PROFILE_ONE_BYTE => {
287284
for extension in &self.extensions {
288-
writer.put_u8((extension.id << 4) | (extension.payload.len() as u8 - 1));
285+
buf.put_u8((extension.id << 4) | (extension.payload.len() as u8 - 1));
289286
n += 1;
290-
writer.put(&*extension.payload);
287+
buf.put(&*extension.payload);
291288
n += extension.payload.len();
292289
}
293290
}
294291
// RFC 8285 RTP Two Byte Header Extension
295292
EXTENSION_PROFILE_TWO_BYTE => {
296293
for extension in &self.extensions {
297-
writer.put_u8(extension.id);
294+
buf.put_u8(extension.id);
298295
n += 1;
299-
writer.put_u8(extension.payload.len() as u8);
296+
buf.put_u8(extension.payload.len() as u8);
300297
n += 1;
301-
writer.put(&*extension.payload);
298+
buf.put(&*extension.payload);
302299
n += extension.payload.len();
303300
}
304301
}
@@ -313,15 +310,15 @@ impl Marshal for Header {
313310
if ext_len % 4 != 0 {
314311
return Err(Error::HeaderExtensionPayloadNot32BitWords.into());
315312
}
316-
writer.put(&*extension.payload);
313+
buf.put(&*extension.payload);
317314
n += ext_len;
318315
}
319316
}
320317
};
321318

322319
// add padding to reach 4 bytes boundaries
323320
for _ in extension_payload_len..extension_payload_size as usize * 4 {
324-
writer.put_u8(0);
321+
buf.put_u8(0);
325322
n += 1;
326323
}
327324
}

src/packet/mod.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,13 @@ impl MarshalSize for Packet {
8282

8383
impl Marshal for Packet {
8484
/// MarshalTo serializes the packet and writes to the buffer.
85-
fn marshal_to<B>(&self, buf: &mut B) -> Result<usize>
86-
where
87-
B: BufMut,
88-
{
85+
fn marshal_to(&self, mut buf: &mut [u8]) -> Result<usize> {
8986
if buf.remaining_mut() < self.marshal_size() {
9087
return Err(Error::ErrBufferTooSmall.into());
9188
}
9289

9390
let n = self.header.marshal_to(buf)?;
91+
buf = &mut buf[n..];
9492
buf.put(&*self.payload);
9593
let padding_len = if self.header.padding {
9694
let mut padding_len = get_padding(self.payload.len());

src/packet/packet_test.rs

+21-16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use super::*;
22
use bytes::{Bytes, BytesMut};
3-
use std::collections::HashMap;
3+
//use std::collections::HashMap;
44

55
#[test]
66
fn test_basic() -> Result<()> {
@@ -53,8 +53,8 @@ fn test_basic() -> Result<()> {
5353
"wrong computed marshal size"
5454
);
5555

56-
let mut raw = BytesMut::new();
57-
let n = packet.marshal_to(&mut raw)?;
56+
let raw = packet.marshal()?;
57+
let n = raw.len();
5858
assert_eq!(n, raw_pkt.len(), "wrong marshal size");
5959

6060
assert_eq!(
@@ -115,6 +115,9 @@ fn test_extension() -> Result<()> {
115115
result.is_err(),
116116
"Marshal did not error on packet with invalid extension length"
117117
);
118+
if let Err(err) = result {
119+
assert!(Error::ErrBufferTooSmall.equal(&err));
120+
}
118121

119122
Ok(())
120123
}
@@ -158,12 +161,8 @@ fn test_packet_marshal_unmarshal() -> Result<()> {
158161
payload: Bytes::from_static(&[0xFFu8; 15]),
159162
..Default::default()
160163
};
161-
let mut raw = BytesMut::new();
162-
let _ = pkt.marshal_to(&mut raw)?;
163-
164-
let raw = raw.freeze();
165-
let buf = &mut raw.clone();
166-
let p = Packet::unmarshal(buf)?;
164+
let mut raw = pkt.marshal()?;
165+
let p = Packet::unmarshal(&mut raw)?;
167166

168167
assert_eq!(pkt, p);
169168

@@ -199,8 +198,7 @@ fn test_rfc8285_one_byte_extension() -> Result<()> {
199198
payload: raw_pkt.slice(20..),
200199
};
201200

202-
let mut dst = BytesMut::new();
203-
let _ = p.marshal_to(&mut dst)?;
201+
let dst = p.marshal()?;
204202
assert_eq!(dst, raw_pkt);
205203

206204
Ok(())
@@ -266,8 +264,7 @@ fn test_rfc8285_one_byte_two_extension_of_two_bytes() -> Result<()> {
266264
payload: raw_pkt.slice(20..),
267265
};
268266

269-
let mut dst = BytesMut::new();
270-
let _ = p.marshal_to(&mut dst)?;
267+
let dst = p.marshal()?;
271268
assert_eq!(dst, raw_pkt);
272269

273270
Ok(())
@@ -329,7 +326,7 @@ fn test_rfc8285_one_byte_multiple_extensions_with_padding() -> Result<()> {
329326
0x98, 0x36, 0xbe, 0x88, 0x9e,
330327
];
331328

332-
let checker = |name: &str, buf: &mut [u8], p: &mut Packet| -> Result<()> {
329+
let checker = |name: &str, buf: &mut [u8], p: &Packet| -> Result<()> {
333330
let size = p.marshal_to(buf)?;
334331

335332
assert_eq!(
@@ -342,8 +339,16 @@ fn test_rfc8285_one_byte_multiple_extensions_with_padding() -> Result<()> {
342339
Ok(())
343340
};
344341

345-
checker("CleanBuffer", &mut dst_buf[0], &mut p)?;
346-
checker("DirtyBuffer", &mut dst_buf[1], &mut p)
342+
checker("CleanBuffer", &mut dst_buf[0], &packet)?;
343+
checker("DirtyBuffer", &mut dst_buf[1], &packet)?;
344+
345+
let result = packet.marshal_to(&mut dst_buf[2]);
346+
assert!(result.is_err());
347+
if let Err(err) = result {
348+
assert!(Error::ErrBufferTooSmall.equal(&err));
349+
}
350+
351+
Ok(())
347352
}
348353

349354
/*

src/packetizer/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ impl<P: Payloader, S: Sequencer> Packetizer for PacketizerImpl<P, S> {
9797
let send_time = AbsSendTimeExtension::new(d);
9898
//apply http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
9999
let mut raw = BytesMut::with_capacity(send_time.marshal_size());
100+
raw.resize(send_time.marshal_size(), 0);
100101
let _ = send_time.marshal_to(&mut raw)?;
101102
packets[l - 1]
102103
.header

0 commit comments

Comments
 (0)