OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "net/quic/quic_packet_generator.h" | 5 #include "net/quic/quic_packet_generator.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "net/quic/crypto/crypto_protocol.h" | 9 #include "net/quic/crypto/crypto_protocol.h" |
10 #include "net/quic/crypto/null_encrypter.h" | 10 #include "net/quic/crypto/null_encrypter.h" |
(...skipping 21 matching lines...) Expand all Loading... |
32 public: | 32 public: |
33 MockDelegate() {} | 33 MockDelegate() {} |
34 virtual ~MockDelegate() {} | 34 virtual ~MockDelegate() {} |
35 | 35 |
36 MOCK_METHOD3(ShouldGeneratePacket, | 36 MOCK_METHOD3(ShouldGeneratePacket, |
37 bool(TransmissionType transmission_type, | 37 bool(TransmissionType transmission_type, |
38 HasRetransmittableData retransmittable, | 38 HasRetransmittableData retransmittable, |
39 IsHandshake handshake)); | 39 IsHandshake handshake)); |
40 MOCK_METHOD0(CreateAckFrame, QuicAckFrame*()); | 40 MOCK_METHOD0(CreateAckFrame, QuicAckFrame*()); |
41 MOCK_METHOD0(CreateFeedbackFrame, QuicCongestionFeedbackFrame*()); | 41 MOCK_METHOD0(CreateFeedbackFrame, QuicCongestionFeedbackFrame*()); |
| 42 MOCK_METHOD0(CreateStopWaitingFrame, QuicStopWaitingFrame*()); |
42 MOCK_METHOD1(OnSerializedPacket, bool(const SerializedPacket& packet)); | 43 MOCK_METHOD1(OnSerializedPacket, bool(const SerializedPacket& packet)); |
43 MOCK_METHOD2(CloseConnection, void(QuicErrorCode, bool)); | 44 MOCK_METHOD2(CloseConnection, void(QuicErrorCode, bool)); |
44 | 45 |
45 void SetCanWriteAnything() { | 46 void SetCanWriteAnything() { |
46 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, _, _)) | 47 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, _, _)) |
47 .WillRepeatedly(Return(true)); | 48 .WillRepeatedly(Return(true)); |
48 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, | 49 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, |
49 NO_RETRANSMITTABLE_DATA, _)) | 50 NO_RETRANSMITTABLE_DATA, _)) |
50 .WillRepeatedly(Return(true)); | 51 .WillRepeatedly(Return(true)); |
51 } | 52 } |
(...skipping 22 matching lines...) Expand all Loading... |
74 // Simple struct for describing the contents of a packet. | 75 // Simple struct for describing the contents of a packet. |
75 // Useful in conjunction with a SimpleQuicFrame for validating | 76 // Useful in conjunction with a SimpleQuicFrame for validating |
76 // that a packet contains the expected frames. | 77 // that a packet contains the expected frames. |
77 struct PacketContents { | 78 struct PacketContents { |
78 PacketContents() | 79 PacketContents() |
79 : num_ack_frames(0), | 80 : num_ack_frames(0), |
80 num_connection_close_frames(0), | 81 num_connection_close_frames(0), |
81 num_feedback_frames(0), | 82 num_feedback_frames(0), |
82 num_goaway_frames(0), | 83 num_goaway_frames(0), |
83 num_rst_stream_frames(0), | 84 num_rst_stream_frames(0), |
| 85 num_stop_waiting_frames(0), |
84 num_stream_frames(0), | 86 num_stream_frames(0), |
85 fec_group(0) { | 87 fec_group(0) { |
86 } | 88 } |
87 | 89 |
88 size_t num_ack_frames; | 90 size_t num_ack_frames; |
89 size_t num_connection_close_frames; | 91 size_t num_connection_close_frames; |
90 size_t num_feedback_frames; | 92 size_t num_feedback_frames; |
91 size_t num_goaway_frames; | 93 size_t num_goaway_frames; |
92 size_t num_rst_stream_frames; | 94 size_t num_rst_stream_frames; |
| 95 size_t num_stop_waiting_frames; |
93 size_t num_stream_frames; | 96 size_t num_stream_frames; |
94 | 97 |
95 QuicFecGroupNumber fec_group; | 98 QuicFecGroupNumber fec_group; |
96 }; | 99 }; |
97 | 100 |
98 } // namespace | 101 } // namespace |
99 | 102 |
100 class QuicPacketGeneratorTest : public ::testing::Test { | 103 class QuicPacketGeneratorTest : public ::testing::Test { |
101 protected: | 104 protected: |
102 QuicPacketGeneratorTest() | 105 QuicPacketGeneratorTest() |
(...skipping 25 matching lines...) Expand all Loading... |
128 return new QuicAckFrame(0, QuicTime::Zero(), 0); | 131 return new QuicAckFrame(0, QuicTime::Zero(), 0); |
129 } | 132 } |
130 | 133 |
131 QuicCongestionFeedbackFrame* CreateFeedbackFrame() { | 134 QuicCongestionFeedbackFrame* CreateFeedbackFrame() { |
132 QuicCongestionFeedbackFrame* frame = new QuicCongestionFeedbackFrame; | 135 QuicCongestionFeedbackFrame* frame = new QuicCongestionFeedbackFrame; |
133 frame->type = kFixRate; | 136 frame->type = kFixRate; |
134 frame->fix_rate.bitrate = QuicBandwidth::FromBytesPerSecond(42); | 137 frame->fix_rate.bitrate = QuicBandwidth::FromBytesPerSecond(42); |
135 return frame; | 138 return frame; |
136 } | 139 } |
137 | 140 |
| 141 QuicStopWaitingFrame* CreateStopWaitingFrame() { |
| 142 QuicStopWaitingFrame* frame = new QuicStopWaitingFrame(); |
| 143 frame->entropy_hash = 0; |
| 144 frame->least_unacked = 0; |
| 145 return frame; |
| 146 } |
| 147 |
138 QuicRstStreamFrame* CreateRstStreamFrame() { | 148 QuicRstStreamFrame* CreateRstStreamFrame() { |
139 return new QuicRstStreamFrame(1, QUIC_STREAM_NO_ERROR, 0); | 149 return new QuicRstStreamFrame(1, QUIC_STREAM_NO_ERROR, 0); |
140 } | 150 } |
141 | 151 |
142 QuicGoAwayFrame* CreateGoAwayFrame() { | 152 QuicGoAwayFrame* CreateGoAwayFrame() { |
143 return new QuicGoAwayFrame(QUIC_NO_ERROR, 1, string()); | 153 return new QuicGoAwayFrame(QUIC_NO_ERROR, 1, string()); |
144 } | 154 } |
145 | 155 |
146 void CheckPacketContains(const PacketContents& contents, | 156 void CheckPacketContains(const PacketContents& contents, |
147 const SerializedPacket& packet) { | 157 const SerializedPacket& packet) { |
148 size_t num_retransmittable_frames = contents.num_connection_close_frames + | 158 size_t num_retransmittable_frames = contents.num_connection_close_frames + |
149 contents.num_goaway_frames + contents.num_rst_stream_frames + | 159 contents.num_goaway_frames + contents.num_rst_stream_frames + |
150 contents.num_stream_frames; | 160 contents.num_stream_frames; |
151 size_t num_frames = contents.num_feedback_frames + contents.num_ack_frames + | 161 size_t num_frames = contents.num_feedback_frames + contents.num_ack_frames + |
152 num_retransmittable_frames; | 162 contents.num_stop_waiting_frames + num_retransmittable_frames; |
153 | 163 |
154 if (num_retransmittable_frames == 0) { | 164 if (num_retransmittable_frames == 0) { |
155 ASSERT_TRUE(packet.retransmittable_frames == NULL); | 165 ASSERT_TRUE(packet.retransmittable_frames == NULL); |
156 } else { | 166 } else { |
157 ASSERT_TRUE(packet.retransmittable_frames != NULL); | 167 ASSERT_TRUE(packet.retransmittable_frames != NULL); |
158 EXPECT_EQ(num_retransmittable_frames, | 168 EXPECT_EQ(num_retransmittable_frames, |
159 packet.retransmittable_frames->frames().size()); | 169 packet.retransmittable_frames->frames().size()); |
160 } | 170 } |
161 | 171 |
162 ASSERT_TRUE(packet.packet != NULL); | 172 ASSERT_TRUE(packet.packet != NULL); |
163 ASSERT_TRUE(simple_framer_.ProcessPacket(*packet.packet)); | 173 ASSERT_TRUE(simple_framer_.ProcessPacket(*packet.packet)); |
164 EXPECT_EQ(num_frames, simple_framer_.num_frames()); | 174 EXPECT_EQ(num_frames, simple_framer_.num_frames()); |
165 EXPECT_EQ(contents.num_ack_frames, simple_framer_.ack_frames().size()); | 175 EXPECT_EQ(contents.num_ack_frames, simple_framer_.ack_frames().size()); |
166 EXPECT_EQ(contents.num_connection_close_frames, | 176 EXPECT_EQ(contents.num_connection_close_frames, |
167 simple_framer_.connection_close_frames().size()); | 177 simple_framer_.connection_close_frames().size()); |
168 EXPECT_EQ(contents.num_feedback_frames, | 178 EXPECT_EQ(contents.num_feedback_frames, |
169 simple_framer_.feedback_frames().size()); | 179 simple_framer_.feedback_frames().size()); |
170 EXPECT_EQ(contents.num_goaway_frames, | 180 EXPECT_EQ(contents.num_goaway_frames, |
171 simple_framer_.goaway_frames().size()); | 181 simple_framer_.goaway_frames().size()); |
172 EXPECT_EQ(contents.num_rst_stream_frames, | 182 EXPECT_EQ(contents.num_rst_stream_frames, |
173 simple_framer_.rst_stream_frames().size()); | 183 simple_framer_.rst_stream_frames().size()); |
174 EXPECT_EQ(contents.num_stream_frames, | 184 EXPECT_EQ(contents.num_stream_frames, |
175 simple_framer_.stream_frames().size()); | 185 simple_framer_.stream_frames().size()); |
| 186 EXPECT_EQ(contents.num_stop_waiting_frames, |
| 187 simple_framer_.stop_waiting_frames().size()); |
176 EXPECT_EQ(contents.fec_group, simple_framer_.header().fec_group); | 188 EXPECT_EQ(contents.fec_group, simple_framer_.header().fec_group); |
177 } | 189 } |
178 | 190 |
179 void CheckPacketHasSingleStreamFrame(const SerializedPacket& packet) { | 191 void CheckPacketHasSingleStreamFrame(const SerializedPacket& packet) { |
180 ASSERT_TRUE(packet.retransmittable_frames != NULL); | 192 ASSERT_TRUE(packet.retransmittable_frames != NULL); |
181 EXPECT_EQ(1u, packet.retransmittable_frames->frames().size()); | 193 EXPECT_EQ(1u, packet.retransmittable_frames->frames().size()); |
182 ASSERT_TRUE(packet.packet != NULL); | 194 ASSERT_TRUE(packet.packet != NULL); |
183 ASSERT_TRUE(simple_framer_.ProcessPacket(*packet.packet)); | 195 ASSERT_TRUE(simple_framer_.ProcessPacket(*packet.packet)); |
184 EXPECT_EQ(1u, simple_framer_.num_frames()); | 196 EXPECT_EQ(1u, simple_framer_.num_frames()); |
185 EXPECT_EQ(1u, simple_framer_.stream_frames().size()); | 197 EXPECT_EQ(1u, simple_framer_.stream_frames().size()); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 | 232 |
221 class MockDebugDelegate : public QuicPacketGenerator::DebugDelegateInterface { | 233 class MockDebugDelegate : public QuicPacketGenerator::DebugDelegateInterface { |
222 public: | 234 public: |
223 MOCK_METHOD1(OnFrameAddedToPacket, | 235 MOCK_METHOD1(OnFrameAddedToPacket, |
224 void(const QuicFrame&)); | 236 void(const QuicFrame&)); |
225 }; | 237 }; |
226 | 238 |
227 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_NotWritable) { | 239 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_NotWritable) { |
228 delegate_.SetCanNotWrite(); | 240 delegate_.SetCanNotWrite(); |
229 | 241 |
230 generator_.SetShouldSendAck(false); | 242 generator_.SetShouldSendAck(false, false); |
231 EXPECT_TRUE(generator_.HasQueuedFrames()); | 243 EXPECT_TRUE(generator_.HasQueuedFrames()); |
232 } | 244 } |
233 | 245 |
234 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldNotFlush) { | 246 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldNotFlush) { |
235 StrictMock<MockDebugDelegate> debug_delegate; | 247 StrictMock<MockDebugDelegate> debug_delegate; |
236 | 248 |
237 generator_.set_debug_delegate(&debug_delegate); | 249 generator_.set_debug_delegate(&debug_delegate); |
238 delegate_.SetCanWriteOnlyNonRetransmittable(); | 250 delegate_.SetCanWriteOnlyNonRetransmittable(); |
239 generator_.StartBatchOperations(); | 251 generator_.StartBatchOperations(); |
240 | 252 |
241 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 253 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
242 EXPECT_CALL(debug_delegate, OnFrameAddedToPacket(_)).Times(1); | 254 EXPECT_CALL(debug_delegate, OnFrameAddedToPacket(_)).Times(1); |
243 | 255 |
244 generator_.SetShouldSendAck(false); | 256 generator_.SetShouldSendAck(false, false); |
245 EXPECT_TRUE(generator_.HasQueuedFrames()); | 257 EXPECT_TRUE(generator_.HasQueuedFrames()); |
246 } | 258 } |
247 | 259 |
248 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldFlush) { | 260 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldFlush) { |
249 delegate_.SetCanWriteOnlyNonRetransmittable(); | 261 delegate_.SetCanWriteOnlyNonRetransmittable(); |
250 | 262 |
251 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 263 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
252 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 264 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( |
253 DoAll(SaveArg<0>(&packet_), Return(true))); | 265 DoAll(SaveArg<0>(&packet_), Return(true))); |
254 | 266 |
255 generator_.SetShouldSendAck(false); | 267 generator_.SetShouldSendAck(false, false); |
256 EXPECT_FALSE(generator_.HasQueuedFrames()); | 268 EXPECT_FALSE(generator_.HasQueuedFrames()); |
257 | 269 |
258 PacketContents contents; | 270 PacketContents contents; |
259 contents.num_ack_frames = 1; | 271 contents.num_ack_frames = 1; |
260 CheckPacketContains(contents, packet_); | 272 CheckPacketContains(contents, packet_); |
261 } | 273 } |
262 | 274 |
263 TEST_F(QuicPacketGeneratorTest, | 275 TEST_F(QuicPacketGeneratorTest, |
264 ShouldSendAckWithFeedback_WritableAndShouldNotFlush) { | 276 ShouldSendAckWithFeedback_WritableAndShouldNotFlush) { |
265 delegate_.SetCanWriteOnlyNonRetransmittable(); | 277 delegate_.SetCanWriteOnlyNonRetransmittable(); |
266 generator_.StartBatchOperations(); | 278 generator_.StartBatchOperations(); |
267 | 279 |
268 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 280 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
269 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( | 281 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( |
270 Return(CreateFeedbackFrame())); | 282 Return(CreateFeedbackFrame())); |
271 | 283 |
272 generator_.SetShouldSendAck(true); | 284 generator_.SetShouldSendAck(true, false); |
273 EXPECT_TRUE(generator_.HasQueuedFrames()); | 285 EXPECT_TRUE(generator_.HasQueuedFrames()); |
274 } | 286 } |
275 | 287 |
276 TEST_F(QuicPacketGeneratorTest, | 288 TEST_F(QuicPacketGeneratorTest, |
277 ShouldSendAckWithFeedback_WritableAndShouldFlush) { | 289 ShouldSendAckWithFeedback_WritableAndShouldFlush) { |
278 delegate_.SetCanWriteOnlyNonRetransmittable(); | 290 delegate_.SetCanWriteOnlyNonRetransmittable(); |
279 | 291 |
280 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 292 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
281 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( | 293 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( |
282 Return(CreateFeedbackFrame())); | 294 Return(CreateFeedbackFrame())); |
| 295 EXPECT_CALL(delegate_, CreateStopWaitingFrame()).WillOnce( |
| 296 Return(CreateStopWaitingFrame())); |
283 | 297 |
284 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 298 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( |
285 DoAll(SaveArg<0>(&packet_), Return(true))); | 299 DoAll(SaveArg<0>(&packet_), Return(true))); |
286 | 300 |
287 generator_.SetShouldSendAck(true); | 301 generator_.SetShouldSendAck(true, true); |
288 EXPECT_FALSE(generator_.HasQueuedFrames()); | 302 EXPECT_FALSE(generator_.HasQueuedFrames()); |
289 | 303 |
290 PacketContents contents; | 304 PacketContents contents; |
291 contents.num_ack_frames = 1; | 305 contents.num_ack_frames = 1; |
292 contents.num_feedback_frames = 1; | 306 contents.num_feedback_frames = 1; |
| 307 contents.num_stop_waiting_frames = 1; |
293 CheckPacketContains(contents, packet_); | 308 CheckPacketContains(contents, packet_); |
294 } | 309 } |
295 | 310 |
296 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritable) { | 311 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritable) { |
297 delegate_.SetCanNotWrite(); | 312 delegate_.SetCanNotWrite(); |
298 | 313 |
299 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); | 314 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); |
300 EXPECT_TRUE(generator_.HasQueuedFrames()); | 315 EXPECT_TRUE(generator_.HasQueuedFrames()); |
301 } | 316 } |
302 | 317 |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 | 540 |
526 PacketContents contents; | 541 PacketContents contents; |
527 contents.num_stream_frames = 1; | 542 contents.num_stream_frames = 1; |
528 CheckPacketContains(contents, packet_); | 543 CheckPacketContains(contents, packet_); |
529 CheckPacketContains(contents, packet2_); | 544 CheckPacketContains(contents, packet2_); |
530 } | 545 } |
531 | 546 |
532 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) { | 547 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) { |
533 delegate_.SetCanNotWrite(); | 548 delegate_.SetCanNotWrite(); |
534 | 549 |
535 generator_.SetShouldSendAck(true); | 550 generator_.SetShouldSendAck(true, false); |
536 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); | 551 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); |
537 EXPECT_TRUE(generator_.HasQueuedFrames()); | 552 EXPECT_TRUE(generator_.HasQueuedFrames()); |
538 | 553 |
539 delegate_.SetCanWriteAnything(); | 554 delegate_.SetCanWriteAnything(); |
540 | 555 |
541 generator_.StartBatchOperations(); | 556 generator_.StartBatchOperations(); |
542 | 557 |
543 // When the first write operation is invoked, the ack and feedback | 558 // When the first write operation is invoked, the ack and feedback |
544 // frames will be returned. | 559 // frames will be returned. |
545 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 560 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
(...skipping 15 matching lines...) Expand all Loading... |
561 contents.num_goaway_frames = 1; | 576 contents.num_goaway_frames = 1; |
562 contents.num_feedback_frames = 1; | 577 contents.num_feedback_frames = 1; |
563 contents.num_rst_stream_frames = 1; | 578 contents.num_rst_stream_frames = 1; |
564 contents.num_stream_frames = 1; | 579 contents.num_stream_frames = 1; |
565 CheckPacketContains(contents, packet_); | 580 CheckPacketContains(contents, packet_); |
566 } | 581 } |
567 | 582 |
568 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations2) { | 583 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations2) { |
569 delegate_.SetCanNotWrite(); | 584 delegate_.SetCanNotWrite(); |
570 | 585 |
571 generator_.SetShouldSendAck(true); | 586 generator_.SetShouldSendAck(true, false); |
572 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); | 587 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); |
573 EXPECT_TRUE(generator_.HasQueuedFrames()); | 588 EXPECT_TRUE(generator_.HasQueuedFrames()); |
574 | 589 |
575 delegate_.SetCanWriteAnything(); | 590 delegate_.SetCanWriteAnything(); |
576 | 591 |
577 generator_.StartBatchOperations(); | 592 generator_.StartBatchOperations(); |
578 | 593 |
579 // When the first write operation is invoked, the ack and feedback | 594 // When the first write operation is invoked, the ack and feedback |
580 // frames will be returned. | 595 // frames will be returned. |
581 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 596 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
(...skipping 30 matching lines...) Expand all Loading... |
612 | 627 |
613 // The second should have the remainder of the stream data. | 628 // The second should have the remainder of the stream data. |
614 PacketContents contents2; | 629 PacketContents contents2; |
615 contents2.num_goaway_frames = 1; | 630 contents2.num_goaway_frames = 1; |
616 contents2.num_stream_frames = 1; | 631 contents2.num_stream_frames = 1; |
617 CheckPacketContains(contents2, packet2_); | 632 CheckPacketContains(contents2, packet2_); |
618 } | 633 } |
619 | 634 |
620 } // namespace test | 635 } // namespace test |
621 } // namespace net | 636 } // namespace net |
OLD | NEW |