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/test_tools/quic_test_utils.h" | 5 #include "net/quic/test_tools/quic_test_utils.h" |
6 | 6 |
7 #include "base/sha1.h" | 7 #include "base/sha1.h" |
8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "net/quic/crypto/crypto_framer.h" | 10 #include "net/quic/crypto/crypto_framer.h" |
11 #include "net/quic/crypto/crypto_handshake.h" | 11 #include "net/quic/crypto/crypto_handshake.h" |
12 #include "net/quic/crypto/crypto_utils.h" | 12 #include "net/quic/crypto/crypto_utils.h" |
13 #include "net/quic/crypto/null_encrypter.h" | 13 #include "net/quic/crypto/null_encrypter.h" |
14 #include "net/quic/crypto/quic_decrypter.h" | 14 #include "net/quic/crypto/quic_decrypter.h" |
15 #include "net/quic/crypto/quic_encrypter.h" | 15 #include "net/quic/crypto/quic_encrypter.h" |
| 16 #include "net/quic/quic_data_writer.h" |
16 #include "net/quic/quic_framer.h" | 17 #include "net/quic/quic_framer.h" |
17 #include "net/quic/quic_packet_creator.h" | 18 #include "net/quic/quic_packet_creator.h" |
18 #include "net/quic/quic_utils.h" | 19 #include "net/quic/quic_utils.h" |
19 #include "net/quic/test_tools/quic_connection_peer.h" | 20 #include "net/quic/test_tools/quic_connection_peer.h" |
20 #include "net/spdy/spdy_frame_builder.h" | 21 #include "net/spdy/spdy_frame_builder.h" |
21 | 22 |
22 using base::StringPiece; | 23 using base::StringPiece; |
23 using std::max; | 24 using std::max; |
24 using std::min; | 25 using std::min; |
25 using std::string; | 26 using std::string; |
(...skipping 27 matching lines...) Expand all Loading... |
53 QuicAckFrame MakeAckFrameWithNackRanges( | 54 QuicAckFrame MakeAckFrameWithNackRanges( |
54 size_t num_nack_ranges, QuicPacketSequenceNumber least_unacked) { | 55 size_t num_nack_ranges, QuicPacketSequenceNumber least_unacked) { |
55 QuicAckFrame ack = MakeAckFrame(2 * num_nack_ranges + least_unacked); | 56 QuicAckFrame ack = MakeAckFrame(2 * num_nack_ranges + least_unacked); |
56 // Add enough missing packets to get num_nack_ranges nack ranges. | 57 // Add enough missing packets to get num_nack_ranges nack ranges. |
57 for (QuicPacketSequenceNumber i = 1; i < 2 * num_nack_ranges; i += 2) { | 58 for (QuicPacketSequenceNumber i = 1; i < 2 * num_nack_ranges; i += 2) { |
58 ack.missing_packets.insert(least_unacked + i); | 59 ack.missing_packets.insert(least_unacked + i); |
59 } | 60 } |
60 return ack; | 61 return ack; |
61 } | 62 } |
62 | 63 |
63 SerializedPacket BuildUnsizedDataPacket(QuicFramer* framer, | 64 QuicPacket* BuildUnsizedDataPacket(QuicFramer* framer, |
64 const QuicPacketHeader& header, | 65 const QuicPacketHeader& header, |
65 const QuicFrames& frames) { | 66 const QuicFrames& frames) { |
66 const size_t max_plaintext_size = framer->GetMaxPlaintextSize(kMaxPacketSize); | 67 const size_t max_plaintext_size = framer->GetMaxPlaintextSize(kMaxPacketSize); |
67 size_t packet_size = GetPacketHeaderSize(header); | 68 size_t packet_size = GetPacketHeaderSize(header); |
68 for (size_t i = 0; i < frames.size(); ++i) { | 69 for (size_t i = 0; i < frames.size(); ++i) { |
69 DCHECK_LE(packet_size, max_plaintext_size); | 70 DCHECK_LE(packet_size, max_plaintext_size); |
70 bool first_frame = i == 0; | 71 bool first_frame = i == 0; |
71 bool last_frame = i == frames.size() - 1; | 72 bool last_frame = i == frames.size() - 1; |
72 const size_t frame_size = framer->GetSerializedFrameLength( | 73 const size_t frame_size = framer->GetSerializedFrameLength( |
73 frames[i], max_plaintext_size - packet_size, first_frame, last_frame, | 74 frames[i], max_plaintext_size - packet_size, first_frame, last_frame, |
74 header.is_in_fec_group, | 75 header.is_in_fec_group, |
75 header.public_header.sequence_number_length); | 76 header.public_header.sequence_number_length); |
76 DCHECK(frame_size); | 77 DCHECK(frame_size); |
77 packet_size += frame_size; | 78 packet_size += frame_size; |
78 } | 79 } |
79 return framer->BuildDataPacket(header, frames, packet_size); | 80 return BuildUnsizedDataPacket(framer, header, frames, packet_size); |
| 81 } |
| 82 |
| 83 QuicPacket* BuildUnsizedDataPacket(QuicFramer* framer, |
| 84 const QuicPacketHeader& header, |
| 85 const QuicFrames& frames, |
| 86 size_t packet_size) { |
| 87 char* buffer = new char[packet_size]; |
| 88 scoped_ptr<QuicPacket> packet( |
| 89 framer->BuildDataPacket(header, frames, buffer, packet_size)); |
| 90 DCHECK(packet.get() != nullptr); |
| 91 // Now I have to re-construct the data packet with data ownership. |
| 92 return new QuicPacket(buffer, packet->length(), true, |
| 93 header.public_header.connection_id_length, |
| 94 header.public_header.version_flag, |
| 95 header.public_header.sequence_number_length); |
80 } | 96 } |
81 | 97 |
82 uint64 SimpleRandom::RandUint64() { | 98 uint64 SimpleRandom::RandUint64() { |
83 unsigned char hash[base::kSHA1Length]; | 99 unsigned char hash[base::kSHA1Length]; |
84 base::SHA1HashBytes(reinterpret_cast<unsigned char*>(&seed_), sizeof(seed_), | 100 base::SHA1HashBytes(reinterpret_cast<unsigned char*>(&seed_), sizeof(seed_), |
85 hash); | 101 hash); |
86 memcpy(&seed_, hash, sizeof(seed_)); | 102 memcpy(&seed_, hash, sizeof(seed_)); |
87 return seed_; | 103 return seed_; |
88 } | 104 } |
89 | 105 |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 : MockConnection(is_server) { | 307 : MockConnection(is_server) { |
292 } | 308 } |
293 | 309 |
294 PacketSavingConnection::PacketSavingConnection( | 310 PacketSavingConnection::PacketSavingConnection( |
295 bool is_server, | 311 bool is_server, |
296 const QuicVersionVector& supported_versions) | 312 const QuicVersionVector& supported_versions) |
297 : MockConnection(is_server, supported_versions) { | 313 : MockConnection(is_server, supported_versions) { |
298 } | 314 } |
299 | 315 |
300 PacketSavingConnection::~PacketSavingConnection() { | 316 PacketSavingConnection::~PacketSavingConnection() { |
301 STLDeleteElements(&packets_); | |
302 STLDeleteElements(&encrypted_packets_); | 317 STLDeleteElements(&encrypted_packets_); |
303 } | 318 } |
304 | 319 |
305 void PacketSavingConnection::SendOrQueuePacket(QueuedPacket packet) { | 320 void PacketSavingConnection::SendOrQueuePacket(QueuedPacket packet) { |
306 packets_.push_back(packet.serialized_packet.packet); | 321 encrypted_packets_.push_back(packet.serialized_packet.packet); |
307 QuicEncryptedPacket* encrypted = QuicConnectionPeer::GetFramer(this)-> | |
308 EncryptPacket(packet.encryption_level, | |
309 packet.serialized_packet.sequence_number, | |
310 *packet.serialized_packet.packet); | |
311 encrypted_packets_.push_back(encrypted); | |
312 // Transfer ownership of the packet to the SentPacketManager and the | 322 // Transfer ownership of the packet to the SentPacketManager and the |
313 // ack notifier to the AckNotifierManager. | 323 // ack notifier to the AckNotifierManager. |
314 sent_packet_manager_.OnPacketSent( | 324 sent_packet_manager_.OnPacketSent( |
315 &packet.serialized_packet, 0, QuicTime::Zero(), 1000, | 325 &packet.serialized_packet, 0, QuicTime::Zero(), 1000, |
316 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 326 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
317 } | 327 } |
318 | 328 |
319 MockSession::MockSession(QuicConnection* connection) | 329 MockSession::MockSession(QuicConnection* connection) |
320 : QuicSession(connection, DefaultQuicConfig()) { | 330 : QuicSession(connection, DefaultQuicConfig()) { |
321 InitializeSession(); | 331 InitializeSession(); |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
474 header.entropy_hash = 0; | 484 header.entropy_hash = 0; |
475 header.fec_flag = false; | 485 header.fec_flag = false; |
476 header.is_in_fec_group = NOT_IN_FEC_GROUP; | 486 header.is_in_fec_group = NOT_IN_FEC_GROUP; |
477 header.fec_group = 0; | 487 header.fec_group = 0; |
478 QuicStreamFrame stream_frame(1, false, 0, MakeIOVector(data)); | 488 QuicStreamFrame stream_frame(1, false, 0, MakeIOVector(data)); |
479 QuicFrame frame(&stream_frame); | 489 QuicFrame frame(&stream_frame); |
480 QuicFrames frames; | 490 QuicFrames frames; |
481 frames.push_back(frame); | 491 frames.push_back(frame); |
482 QuicFramer framer(QuicSupportedVersions(), QuicTime::Zero(), false); | 492 QuicFramer framer(QuicSupportedVersions(), QuicTime::Zero(), false); |
483 scoped_ptr<QuicPacket> packet( | 493 scoped_ptr<QuicPacket> packet( |
484 BuildUnsizedDataPacket(&framer, header, frames).packet); | 494 BuildUnsizedDataPacket(&framer, header, frames)); |
485 EXPECT_TRUE(packet != nullptr); | 495 EXPECT_TRUE(packet != nullptr); |
486 QuicEncryptedPacket* encrypted = framer.EncryptPacket(ENCRYPTION_NONE, | 496 QuicEncryptedPacket* encrypted = framer.EncryptPacket(ENCRYPTION_NONE, |
487 sequence_number, | 497 sequence_number, |
488 *packet); | 498 *packet); |
489 EXPECT_TRUE(encrypted != nullptr); | 499 EXPECT_TRUE(encrypted != nullptr); |
490 return encrypted; | 500 return encrypted; |
491 } | 501 } |
492 | 502 |
493 void CompareCharArraysWithHexError( | 503 void CompareCharArraysWithHexError( |
494 const string& description, | 504 const string& description, |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
551 header.entropy_hash = 0; | 561 header.entropy_hash = 0; |
552 header.fec_flag = false; | 562 header.fec_flag = false; |
553 header.fec_group = 0; | 563 header.fec_group = 0; |
554 | 564 |
555 QuicStreamFrame stream_frame(kCryptoStreamId, false, 0, | 565 QuicStreamFrame stream_frame(kCryptoStreamId, false, 0, |
556 MakeIOVector(data->AsStringPiece())); | 566 MakeIOVector(data->AsStringPiece())); |
557 | 567 |
558 QuicFrame frame(&stream_frame); | 568 QuicFrame frame(&stream_frame); |
559 QuicFrames frames; | 569 QuicFrames frames; |
560 frames.push_back(frame); | 570 frames.push_back(frame); |
561 return BuildUnsizedDataPacket(&quic_framer, header, frames).packet; | 571 return BuildUnsizedDataPacket(&quic_framer, header, frames); |
562 } | 572 } |
563 | 573 |
564 QuicPacket* ConstructHandshakePacket(QuicConnectionId connection_id, | 574 QuicPacket* ConstructHandshakePacket(QuicConnectionId connection_id, |
565 QuicTag tag) { | 575 QuicTag tag) { |
566 CryptoHandshakeMessage message; | 576 CryptoHandshakeMessage message; |
567 message.set_tag(tag); | 577 message.set_tag(tag); |
568 return ConstructPacketFromHandshakeMessage(connection_id, message, false); | 578 return ConstructPacketFromHandshakeMessage(connection_id, message, false); |
569 } | 579 } |
570 | 580 |
571 size_t GetPacketLengthForOneStream( | 581 size_t GetPacketLengthForOneStream( |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
668 // called. | 678 // called. |
669 factory_->current_writer_ = this; | 679 factory_->current_writer_ = this; |
670 return QuicPerConnectionPacketWriter::WritePacket(buffer, | 680 return QuicPerConnectionPacketWriter::WritePacket(buffer, |
671 buf_len, | 681 buf_len, |
672 self_address, | 682 self_address, |
673 peer_address); | 683 peer_address); |
674 } | 684 } |
675 | 685 |
676 } // namespace test | 686 } // namespace test |
677 } // namespace net | 687 } // namespace net |
OLD | NEW |