OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/test_tools/quic_test_packet_maker.h" | 5 #include "net/quic/test_tools/quic_test_packet_maker.h" |
6 | 6 |
7 #include <list> | 7 #include <list> |
8 | 8 |
9 #include "net/quic/quic_framer.h" | 9 #include "net/quic/quic_framer.h" |
10 #include "net/quic/quic_http_utils.h" | 10 #include "net/quic/quic_http_utils.h" |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 QuicStreamId stream_id, | 280 QuicStreamId stream_id, |
281 bool should_include_version, | 281 bool should_include_version, |
282 bool fin, | 282 bool fin, |
283 QuicStreamOffset offset, | 283 QuicStreamOffset offset, |
284 base::StringPiece data) { | 284 base::StringPiece data) { |
285 InitializeHeader(packet_number, should_include_version); | 285 InitializeHeader(packet_number, should_include_version); |
286 QuicStreamFrame frame(stream_id, fin, offset, data); | 286 QuicStreamFrame frame(stream_id, fin, offset, data); |
287 return MakePacket(header_, QuicFrame(&frame)); | 287 return MakePacket(header_, QuicFrame(&frame)); |
288 } | 288 } |
289 | 289 |
| 290 scoped_ptr<QuicReceivedPacket> |
| 291 QuicTestPacketMaker::MakeMultipleDataFramesPacket( |
| 292 QuicPacketNumber packet_number, |
| 293 QuicStreamId stream_id, |
| 294 bool should_include_version, |
| 295 bool fin, |
| 296 QuicStreamOffset offset, |
| 297 const std::vector<std::string>& data_writes) { |
| 298 InitializeHeader(packet_number, should_include_version); |
| 299 QuicFrames data_frames = |
| 300 MakeMultipleDataFrames(stream_id, fin, offset, data_writes); |
| 301 return MakeMultipleFramesPacket(header_, data_frames); |
| 302 } |
| 303 |
290 scoped_ptr<QuicReceivedPacket> QuicTestPacketMaker::MakeAckAndDataPacket( | 304 scoped_ptr<QuicReceivedPacket> QuicTestPacketMaker::MakeAckAndDataPacket( |
291 QuicPacketNumber packet_number, | 305 QuicPacketNumber packet_number, |
292 bool include_version, | 306 bool include_version, |
293 QuicStreamId stream_id, | 307 QuicStreamId stream_id, |
294 QuicPacketNumber largest_received, | 308 QuicPacketNumber largest_received, |
295 QuicPacketNumber least_unacked, | 309 QuicPacketNumber least_unacked, |
296 bool fin, | 310 bool fin, |
297 QuicStreamOffset offset, | 311 QuicStreamOffset offset, |
298 base::StringPiece data) { | 312 base::StringPiece data) { |
299 InitializeHeader(packet_number, include_version); | 313 InitializeHeader(packet_number, include_version); |
300 | 314 |
301 QuicAckFrame ack(MakeAckFrame(largest_received)); | 315 QuicAckFrame ack(MakeAckFrame(largest_received)); |
302 ack.ack_delay_time = QuicTime::Delta::Zero(); | 316 ack.ack_delay_time = QuicTime::Delta::Zero(); |
303 for (QuicPacketNumber i = least_unacked; i <= largest_received; ++i) { | 317 for (QuicPacketNumber i = least_unacked; i <= largest_received; ++i) { |
304 ack.received_packet_times.push_back(make_pair(i, clock_->Now())); | 318 ack.received_packet_times.push_back(make_pair(i, clock_->Now())); |
305 } | 319 } |
306 QuicFrames frames; | 320 QuicFrames frames; |
307 frames.push_back(QuicFrame(&ack)); | 321 frames.push_back(QuicFrame(&ack)); |
308 | 322 |
309 QuicStopWaitingFrame stop_waiting; | 323 QuicStopWaitingFrame stop_waiting; |
310 stop_waiting.least_unacked = least_unacked; | 324 stop_waiting.least_unacked = least_unacked; |
311 frames.push_back(QuicFrame(&stop_waiting)); | 325 frames.push_back(QuicFrame(&stop_waiting)); |
312 | 326 |
313 QuicStreamFrame stream_frame(stream_id, fin, offset, data); | 327 QuicStreamFrame stream_frame(stream_id, fin, offset, data); |
314 frames.push_back(QuicFrame(&stream_frame)); | 328 frames.push_back(QuicFrame(&stream_frame)); |
315 | 329 |
316 return MakeMultipleFramesPacket(header_, frames); | 330 return MakeMultipleFramesPacket(header_, frames); |
317 } | 331 } |
318 | 332 |
| 333 scoped_ptr<QuicReceivedPacket> |
| 334 QuicTestPacketMaker::MakeRequestHeadersAndMultipleDataFramesPacket( |
| 335 QuicPacketNumber packet_number, |
| 336 QuicStreamId stream_id, |
| 337 bool should_include_version, |
| 338 bool fin, |
| 339 SpdyPriority priority, |
| 340 const SpdyHeaderBlock& headers, |
| 341 size_t* spdy_headers_frame_length, |
| 342 const std::vector<std::string>& data_writes) { |
| 343 InitializeHeader(packet_number, should_include_version); |
| 344 SpdySerializedFrame spdy_frame; |
| 345 if (spdy_request_framer_.protocol_version() == SPDY3) { |
| 346 SpdySynStreamIR syn_stream(stream_id); |
| 347 syn_stream.set_header_block(headers); |
| 348 syn_stream.set_fin(fin); |
| 349 syn_stream.set_priority(priority); |
| 350 spdy_frame = spdy_request_framer_.SerializeSynStream(syn_stream); |
| 351 } else { |
| 352 SpdyHeadersIR headers_frame(stream_id); |
| 353 headers_frame.set_header_block(headers); |
| 354 headers_frame.set_fin(fin); |
| 355 headers_frame.set_priority(priority); |
| 356 headers_frame.set_has_priority(true); |
| 357 spdy_frame = spdy_request_framer_.SerializeFrame(headers_frame); |
| 358 } |
| 359 if (spdy_headers_frame_length) { |
| 360 *spdy_headers_frame_length = spdy_frame.size(); |
| 361 } |
| 362 QuicStreamFrame frame( |
| 363 kHeadersStreamId, false, 0, |
| 364 base::StringPiece(spdy_frame.data(), spdy_frame.size())); |
| 365 |
| 366 QuicFrames frames; |
| 367 frames.push_back(QuicFrame(&frame)); |
| 368 |
| 369 QuicFrames data_frames = |
| 370 MakeMultipleDataFrames(stream_id, fin, 0, data_writes); |
| 371 for (auto data_frame : data_frames) { |
| 372 frames.push_back(data_frame); |
| 373 } |
| 374 return MakeMultipleFramesPacket(header_, frames); |
| 375 } |
| 376 |
319 scoped_ptr<QuicReceivedPacket> QuicTestPacketMaker::MakeRequestHeadersPacket( | 377 scoped_ptr<QuicReceivedPacket> QuicTestPacketMaker::MakeRequestHeadersPacket( |
320 QuicPacketNumber packet_number, | 378 QuicPacketNumber packet_number, |
321 QuicStreamId stream_id, | 379 QuicStreamId stream_id, |
322 bool should_include_version, | 380 bool should_include_version, |
323 bool fin, | 381 bool fin, |
324 SpdyPriority priority, | 382 SpdyPriority priority, |
325 const SpdyHeaderBlock& headers, | 383 const SpdyHeaderBlock& headers, |
326 size_t* spdy_headers_frame_length) { | 384 size_t* spdy_headers_frame_length) { |
327 return MakeRequestHeadersPacket(packet_number, stream_id, | 385 return MakeRequestHeadersPacket(packet_number, stream_id, |
328 should_include_version, fin, priority, | 386 should_include_version, fin, priority, |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 BuildUnsizedDataPacket(&framer, header, frames)); | 562 BuildUnsizedDataPacket(&framer, header, frames)); |
505 char buffer[kMaxPacketSize]; | 563 char buffer[kMaxPacketSize]; |
506 size_t encrypted_size = framer.EncryptPayload(ENCRYPTION_NONE, /*path_id=*/0u, | 564 size_t encrypted_size = framer.EncryptPayload(ENCRYPTION_NONE, /*path_id=*/0u, |
507 header.packet_number, *packet, | 565 header.packet_number, *packet, |
508 buffer, kMaxPacketSize); | 566 buffer, kMaxPacketSize); |
509 EXPECT_NE(0u, encrypted_size); | 567 EXPECT_NE(0u, encrypted_size); |
510 QuicReceivedPacket encrypted(buffer, encrypted_size, clock_->Now(), false); | 568 QuicReceivedPacket encrypted(buffer, encrypted_size, clock_->Now(), false); |
511 return scoped_ptr<QuicReceivedPacket>(encrypted.Clone()); | 569 return scoped_ptr<QuicReceivedPacket>(encrypted.Clone()); |
512 } | 570 } |
513 | 571 |
| 572 QuicFrames QuicTestPacketMaker::MakeMultipleDataFrames( |
| 573 QuicStreamId stream_id, |
| 574 bool fin, |
| 575 QuicStreamOffset offset, |
| 576 const std::vector<std::string>& data_writes) { |
| 577 QuicFrames result_frames; |
| 578 for (size_t i = 0; i < data_writes.size(); ++i) { |
| 579 bool is_fin = fin && (i == data_writes.size() - 1); |
| 580 QuicStreamFrame* stream_frame = new QuicStreamFrame( |
| 581 stream_id, is_fin, offset, base::StringPiece(data_writes[i])); |
| 582 offset += data_writes[i].length(); |
| 583 DVLOG(1) << "Adding frame: " << QuicFrame(stream_frame); |
| 584 result_frames.push_back(QuicFrame(stream_frame)); |
| 585 } |
| 586 return result_frames; |
| 587 } |
| 588 |
514 void QuicTestPacketMaker::InitializeHeader(QuicPacketNumber packet_number, | 589 void QuicTestPacketMaker::InitializeHeader(QuicPacketNumber packet_number, |
515 bool should_include_version) { | 590 bool should_include_version) { |
516 header_.public_header.connection_id = connection_id_; | 591 header_.public_header.connection_id = connection_id_; |
517 header_.public_header.reset_flag = false; | 592 header_.public_header.reset_flag = false; |
518 header_.public_header.version_flag = should_include_version; | 593 header_.public_header.version_flag = should_include_version; |
519 header_.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; | 594 header_.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; |
520 header_.packet_number = packet_number; | 595 header_.packet_number = packet_number; |
521 header_.fec_group = 0; | 596 header_.fec_group = 0; |
522 header_.entropy_flag = false; | 597 header_.entropy_flag = false; |
523 header_.fec_flag = false; | 598 header_.fec_flag = false; |
524 } | 599 } |
525 | 600 |
526 } // namespace test | 601 } // namespace test |
527 } // namespace net | 602 } // namespace net |
OLD | NEW |