OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/cast/net/rtcp/test_rtcp_packet_builder.h" | 5 #include "media/cast/net/rtcp/test_rtcp_packet_builder.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "media/cast/net/rtcp/rtcp_utility.h" | 8 #include "media/cast/net/rtcp/rtcp_utility.h" |
9 | 9 |
10 namespace media { | 10 namespace media { |
11 namespace cast { | 11 namespace cast { |
12 | 12 |
13 TestRtcpPacketBuilder::TestRtcpPacketBuilder() | 13 TestRtcpPacketBuilder::TestRtcpPacketBuilder() |
14 : ptr_of_length_(NULL), | 14 : ptr_of_length_(NULL), |
15 big_endian_writer_(reinterpret_cast<char*>(buffer_), kMaxIpPacketSize), | 15 big_endian_writer_(reinterpret_cast<char*>(buffer_), kMaxIpPacketSize), |
16 big_endian_reader_(NULL, 0) {} | 16 big_endian_reader_(NULL, 0) {} |
17 | 17 |
18 void TestRtcpPacketBuilder::AddSr(uint32_t sender_ssrc, | 18 void TestRtcpPacketBuilder::AddSr(uint32_t remote_ssrc, |
19 int number_of_report_blocks) { | 19 int number_of_report_blocks) { |
20 AddRtcpHeader(200, number_of_report_blocks); | 20 AddRtcpHeader(200, number_of_report_blocks); |
21 big_endian_writer_.WriteU32(sender_ssrc); | 21 big_endian_writer_.WriteU32(remote_ssrc); |
22 big_endian_writer_.WriteU32(kNtpHigh); // NTP timestamp. | 22 big_endian_writer_.WriteU32(kNtpHigh); // NTP timestamp. |
23 big_endian_writer_.WriteU32(kNtpLow); | 23 big_endian_writer_.WriteU32(kNtpLow); |
24 big_endian_writer_.WriteU32(kRtpTimestamp); | 24 big_endian_writer_.WriteU32(kRtpTimestamp); |
25 big_endian_writer_.WriteU32(kSendPacketCount); | 25 big_endian_writer_.WriteU32(kSendPacketCount); |
26 big_endian_writer_.WriteU32(kSendOctetCount); | 26 big_endian_writer_.WriteU32(kSendOctetCount); |
27 } | 27 } |
28 | 28 |
29 void TestRtcpPacketBuilder::AddSrWithNtp(uint32_t sender_ssrc, | 29 void TestRtcpPacketBuilder::AddSrWithNtp(uint32_t remote_ssrc, |
30 uint32_t ntp_high, | 30 uint32_t ntp_high, |
31 uint32_t ntp_low, | 31 uint32_t ntp_low, |
32 uint32_t rtp_timestamp) { | 32 uint32_t rtp_timestamp) { |
33 AddRtcpHeader(200, 0); | 33 AddRtcpHeader(200, 0); |
34 big_endian_writer_.WriteU32(sender_ssrc); | 34 big_endian_writer_.WriteU32(remote_ssrc); |
35 big_endian_writer_.WriteU32(ntp_high); | 35 big_endian_writer_.WriteU32(ntp_high); |
36 big_endian_writer_.WriteU32(ntp_low); | 36 big_endian_writer_.WriteU32(ntp_low); |
37 big_endian_writer_.WriteU32(rtp_timestamp); | 37 big_endian_writer_.WriteU32(rtp_timestamp); |
38 big_endian_writer_.WriteU32(kSendPacketCount); | 38 big_endian_writer_.WriteU32(kSendPacketCount); |
39 big_endian_writer_.WriteU32(kSendOctetCount); | 39 big_endian_writer_.WriteU32(kSendOctetCount); |
40 } | 40 } |
41 | 41 |
42 void TestRtcpPacketBuilder::AddRr(uint32_t sender_ssrc, | 42 void TestRtcpPacketBuilder::AddRr(uint32_t remote_ssrc, |
43 int number_of_report_blocks) { | 43 int number_of_report_blocks) { |
44 AddRtcpHeader(201, number_of_report_blocks); | 44 AddRtcpHeader(201, number_of_report_blocks); |
45 big_endian_writer_.WriteU32(sender_ssrc); | 45 big_endian_writer_.WriteU32(remote_ssrc); |
46 } | 46 } |
47 | 47 |
48 void TestRtcpPacketBuilder::AddRb(uint32_t rtp_ssrc) { | 48 void TestRtcpPacketBuilder::AddRb(uint32_t local_ssrc) { |
49 big_endian_writer_.WriteU32(rtp_ssrc); | 49 big_endian_writer_.WriteU32(local_ssrc); |
50 big_endian_writer_.WriteU32(kLoss); | 50 big_endian_writer_.WriteU32(kLoss); |
51 big_endian_writer_.WriteU32(kExtendedMax); | 51 big_endian_writer_.WriteU32(kExtendedMax); |
52 big_endian_writer_.WriteU32(kTestJitter); | 52 big_endian_writer_.WriteU32(kTestJitter); |
53 big_endian_writer_.WriteU32(kLastSr); | 53 big_endian_writer_.WriteU32(kLastSr); |
54 big_endian_writer_.WriteU32(kDelayLastSr); | 54 big_endian_writer_.WriteU32(kDelayLastSr); |
55 } | 55 } |
56 | 56 |
57 void TestRtcpPacketBuilder::AddXrHeader(uint32_t sender_ssrc) { | 57 void TestRtcpPacketBuilder::AddXrHeader(uint32_t remote_ssrc) { |
58 AddRtcpHeader(207, 0); | 58 AddRtcpHeader(207, 0); |
59 big_endian_writer_.WriteU32(sender_ssrc); | 59 big_endian_writer_.WriteU32(remote_ssrc); |
60 } | 60 } |
61 | 61 |
62 void TestRtcpPacketBuilder::AddXrUnknownBlock() { | 62 void TestRtcpPacketBuilder::AddXrUnknownBlock() { |
63 big_endian_writer_.WriteU8(9); // Block type. | 63 big_endian_writer_.WriteU8(9); // Block type. |
64 big_endian_writer_.WriteU8(0); // Reserved. | 64 big_endian_writer_.WriteU8(0); // Reserved. |
65 big_endian_writer_.WriteU16(4); // Block length. | 65 big_endian_writer_.WriteU16(4); // Block length. |
66 // First receiver same as sender of this report. | 66 // First receiver same as sender of this report. |
67 big_endian_writer_.WriteU32(0); | 67 big_endian_writer_.WriteU32(0); |
68 big_endian_writer_.WriteU32(0); | 68 big_endian_writer_.WriteU32(0); |
69 big_endian_writer_.WriteU32(0); | 69 big_endian_writer_.WriteU32(0); |
70 big_endian_writer_.WriteU32(0); | 70 big_endian_writer_.WriteU32(0); |
71 } | 71 } |
72 | 72 |
73 void TestRtcpPacketBuilder::AddUnknownBlock() { | 73 void TestRtcpPacketBuilder::AddUnknownBlock() { |
74 AddRtcpHeader(99, 0); | 74 AddRtcpHeader(99, 0); |
75 big_endian_writer_.WriteU32(42); | 75 big_endian_writer_.WriteU32(42); |
76 big_endian_writer_.WriteU32(42); | 76 big_endian_writer_.WriteU32(42); |
77 big_endian_writer_.WriteU32(42); | 77 big_endian_writer_.WriteU32(42); |
78 } | 78 } |
79 | 79 |
80 void TestRtcpPacketBuilder::AddXrDlrrBlock(uint32_t sender_ssrc) { | 80 void TestRtcpPacketBuilder::AddXrDlrrBlock(uint32_t remote_ssrc) { |
81 big_endian_writer_.WriteU8(5); // Block type. | 81 big_endian_writer_.WriteU8(5); // Block type. |
82 big_endian_writer_.WriteU8(0); // Reserved. | 82 big_endian_writer_.WriteU8(0); // Reserved. |
83 big_endian_writer_.WriteU16(3); // Block length. | 83 big_endian_writer_.WriteU16(3); // Block length. |
84 | 84 |
85 // First receiver same as sender of this report. | 85 // First receiver same as sender of this report. |
86 big_endian_writer_.WriteU32(sender_ssrc); | 86 big_endian_writer_.WriteU32(remote_ssrc); |
87 big_endian_writer_.WriteU32(kLastRr); | 87 big_endian_writer_.WriteU32(kLastRr); |
88 big_endian_writer_.WriteU32(kDelayLastRr); | 88 big_endian_writer_.WriteU32(kDelayLastRr); |
89 } | 89 } |
90 | 90 |
91 void TestRtcpPacketBuilder::AddXrExtendedDlrrBlock(uint32_t sender_ssrc) { | 91 void TestRtcpPacketBuilder::AddXrExtendedDlrrBlock(uint32_t remote_ssrc) { |
92 big_endian_writer_.WriteU8(5); // Block type. | 92 big_endian_writer_.WriteU8(5); // Block type. |
93 big_endian_writer_.WriteU8(0); // Reserved. | 93 big_endian_writer_.WriteU8(0); // Reserved. |
94 big_endian_writer_.WriteU16(9); // Block length. | 94 big_endian_writer_.WriteU16(9); // Block length. |
95 big_endian_writer_.WriteU32(0xaaaaaaaa); | 95 big_endian_writer_.WriteU32(0xaaaaaaaa); |
96 big_endian_writer_.WriteU32(0xaaaaaaaa); | 96 big_endian_writer_.WriteU32(0xaaaaaaaa); |
97 big_endian_writer_.WriteU32(0xaaaaaaaa); | 97 big_endian_writer_.WriteU32(0xaaaaaaaa); |
98 | 98 |
99 // First receiver same as sender of this report. | 99 // First receiver same as sender of this report. |
100 big_endian_writer_.WriteU32(sender_ssrc); | 100 big_endian_writer_.WriteU32(remote_ssrc); |
101 big_endian_writer_.WriteU32(kLastRr); | 101 big_endian_writer_.WriteU32(kLastRr); |
102 big_endian_writer_.WriteU32(kDelayLastRr); | 102 big_endian_writer_.WriteU32(kDelayLastRr); |
103 big_endian_writer_.WriteU32(0xbbbbbbbb); | 103 big_endian_writer_.WriteU32(0xbbbbbbbb); |
104 big_endian_writer_.WriteU32(0xbbbbbbbb); | 104 big_endian_writer_.WriteU32(0xbbbbbbbb); |
105 big_endian_writer_.WriteU32(0xbbbbbbbb); | 105 big_endian_writer_.WriteU32(0xbbbbbbbb); |
106 } | 106 } |
107 | 107 |
108 void TestRtcpPacketBuilder::AddXrRrtrBlock() { | 108 void TestRtcpPacketBuilder::AddXrRrtrBlock() { |
109 big_endian_writer_.WriteU8(4); // Block type. | 109 big_endian_writer_.WriteU8(4); // Block type. |
110 big_endian_writer_.WriteU8(0); // Reserved. | 110 big_endian_writer_.WriteU8(0); // Reserved. |
111 big_endian_writer_.WriteU16(2); // Block length. | 111 big_endian_writer_.WriteU16(2); // Block length. |
112 big_endian_writer_.WriteU32(kNtpHigh); | 112 big_endian_writer_.WriteU32(kNtpHigh); |
113 big_endian_writer_.WriteU32(kNtpLow); | 113 big_endian_writer_.WriteU32(kNtpLow); |
114 } | 114 } |
115 | 115 |
116 void TestRtcpPacketBuilder::AddNack(uint32_t sender_ssrc, uint32_t media_ssrc) { | 116 void TestRtcpPacketBuilder::AddNack(uint32_t remote_ssrc, uint32_t local_ssrc) { |
117 AddRtcpHeader(205, 1); | 117 AddRtcpHeader(205, 1); |
118 big_endian_writer_.WriteU32(sender_ssrc); | 118 big_endian_writer_.WriteU32(remote_ssrc); |
119 big_endian_writer_.WriteU32(media_ssrc); | 119 big_endian_writer_.WriteU32(local_ssrc); |
120 big_endian_writer_.WriteU16(kMissingPacket); | 120 big_endian_writer_.WriteU16(kMissingPacket); |
121 big_endian_writer_.WriteU16(0); | 121 big_endian_writer_.WriteU16(0); |
122 } | 122 } |
123 | 123 |
124 void TestRtcpPacketBuilder::AddSendReportRequest(uint32_t sender_ssrc, | 124 void TestRtcpPacketBuilder::AddSendReportRequest(uint32_t remote_ssrc, |
125 uint32_t media_ssrc) { | 125 uint32_t local_ssrc) { |
126 AddRtcpHeader(205, 5); | 126 AddRtcpHeader(205, 5); |
127 big_endian_writer_.WriteU32(sender_ssrc); | 127 big_endian_writer_.WriteU32(remote_ssrc); |
128 big_endian_writer_.WriteU32(media_ssrc); | 128 big_endian_writer_.WriteU32(local_ssrc); |
129 } | 129 } |
130 | 130 |
131 void TestRtcpPacketBuilder::AddCast(uint32_t sender_ssrc, | 131 void TestRtcpPacketBuilder::AddCast(uint32_t remote_ssrc, |
132 uint32_t media_ssrc, | 132 uint32_t local_ssrc, |
133 base::TimeDelta target_delay) { | 133 base::TimeDelta target_delay) { |
134 AddRtcpHeader(206, 15); | 134 AddRtcpHeader(206, 15); |
135 big_endian_writer_.WriteU32(sender_ssrc); | 135 big_endian_writer_.WriteU32(remote_ssrc); |
136 big_endian_writer_.WriteU32(media_ssrc); | 136 big_endian_writer_.WriteU32(local_ssrc); |
137 big_endian_writer_.WriteU8('C'); | 137 big_endian_writer_.WriteU8('C'); |
138 big_endian_writer_.WriteU8('A'); | 138 big_endian_writer_.WriteU8('A'); |
139 big_endian_writer_.WriteU8('S'); | 139 big_endian_writer_.WriteU8('S'); |
140 big_endian_writer_.WriteU8('T'); | 140 big_endian_writer_.WriteU8('T'); |
141 big_endian_writer_.WriteU8(kAckFrameId); | 141 big_endian_writer_.WriteU8(kAckFrameId); |
142 big_endian_writer_.WriteU8(3); // Loss fields. | 142 big_endian_writer_.WriteU8(3); // Loss fields. |
143 big_endian_writer_.WriteU16(target_delay.InMilliseconds()); | 143 big_endian_writer_.WriteU16(target_delay.InMilliseconds()); |
144 big_endian_writer_.WriteU8(kLostFrameId); | 144 big_endian_writer_.WriteU8(kLostFrameId); |
145 big_endian_writer_.WriteU16(kRtcpCastAllPacketsLost); | 145 big_endian_writer_.WriteU16(kRtcpCastAllPacketsLost); |
146 big_endian_writer_.WriteU8(0); // Lost packet id mask. | 146 big_endian_writer_.WriteU8(0); // Lost packet id mask. |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 big_endian_writer_.WriteU8('C'); | 187 big_endian_writer_.WriteU8('C'); |
188 big_endian_writer_.WriteU8('A'); | 188 big_endian_writer_.WriteU8('A'); |
189 big_endian_writer_.WriteU8('S'); | 189 big_endian_writer_.WriteU8('S'); |
190 big_endian_writer_.WriteU8('T'); | 190 big_endian_writer_.WriteU8('T'); |
191 big_endian_writer_.WriteU8(kFeedbackSeq); | 191 big_endian_writer_.WriteU8(kFeedbackSeq); |
192 big_endian_writer_.WriteU8(0); | 192 big_endian_writer_.WriteU8(0); |
193 big_endian_writer_.WriteU8(0); | 193 big_endian_writer_.WriteU8(0); |
194 big_endian_writer_.WriteU8(0); | 194 big_endian_writer_.WriteU8(0); |
195 } | 195 } |
196 | 196 |
197 void TestRtcpPacketBuilder::AddReceiverLog(uint32_t sender_ssrc) { | 197 void TestRtcpPacketBuilder::AddPli(uint32_t remote_ssrc, uint32_t local_ssrc) { |
| 198 AddRtcpHeader(206, 1); |
| 199 big_endian_writer_.WriteU32(remote_ssrc); |
| 200 big_endian_writer_.WriteU32(local_ssrc); |
| 201 } |
| 202 |
| 203 void TestRtcpPacketBuilder::AddReceiverLog(uint32_t remote_ssrc) { |
198 AddRtcpHeader(204, 2); | 204 AddRtcpHeader(204, 2); |
199 big_endian_writer_.WriteU32(sender_ssrc); | 205 big_endian_writer_.WriteU32(remote_ssrc); |
200 big_endian_writer_.WriteU8('C'); | 206 big_endian_writer_.WriteU8('C'); |
201 big_endian_writer_.WriteU8('A'); | 207 big_endian_writer_.WriteU8('A'); |
202 big_endian_writer_.WriteU8('S'); | 208 big_endian_writer_.WriteU8('S'); |
203 big_endian_writer_.WriteU8('T'); | 209 big_endian_writer_.WriteU8('T'); |
204 } | 210 } |
205 | 211 |
206 void TestRtcpPacketBuilder::AddReceiverFrameLog(uint32_t rtp_timestamp, | 212 void TestRtcpPacketBuilder::AddReceiverFrameLog(uint32_t rtp_timestamp, |
207 int num_events, | 213 int num_events, |
208 uint32_t event_timesamp_base) { | 214 uint32_t event_timesamp_base) { |
209 big_endian_writer_.WriteU32(rtp_timestamp); | 215 big_endian_writer_.WriteU32(rtp_timestamp); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 big_endian_writer_.WriteU8(0x80 | (format_or_count & 0x1F)); | 267 big_endian_writer_.WriteU8(0x80 | (format_or_count & 0x1F)); |
262 big_endian_writer_.WriteU8(payload); | 268 big_endian_writer_.WriteU8(payload); |
263 ptr_of_length_ = big_endian_writer_.ptr(); | 269 ptr_of_length_ = big_endian_writer_.ptr(); |
264 | 270 |
265 // Initialize length to "clearly illegal". | 271 // Initialize length to "clearly illegal". |
266 big_endian_writer_.WriteU16(0xDEAD); | 272 big_endian_writer_.WriteU16(0xDEAD); |
267 } | 273 } |
268 | 274 |
269 } // namespace cast | 275 } // namespace cast |
270 } // namespace media | 276 } // namespace media |
OLD | NEW |