| 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> |
| 8 |
| 7 #include "net/quic/quic_framer.h" | 9 #include "net/quic/quic_framer.h" |
| 8 #include "net/quic/quic_http_utils.h" | 10 #include "net/quic/quic_http_utils.h" |
| 9 #include "net/quic/quic_utils.h" | 11 #include "net/quic/quic_utils.h" |
| 10 #include "net/quic/test_tools/quic_test_utils.h" | 12 #include "net/quic/test_tools/quic_test_utils.h" |
| 11 | 13 |
| 14 using std::make_pair; |
| 15 |
| 12 namespace net { | 16 namespace net { |
| 13 namespace test { | 17 namespace test { |
| 14 | 18 |
| 15 QuicTestPacketMaker::QuicTestPacketMaker(QuicVersion version, | 19 QuicTestPacketMaker::QuicTestPacketMaker(QuicVersion version, |
| 16 QuicConnectionId connection_id) | 20 QuicConnectionId connection_id) |
| 17 : version_(version), | 21 : version_(version), |
| 18 connection_id_(connection_id), | 22 connection_id_(connection_id), |
| 19 spdy_request_framer_(SPDY3), | 23 spdy_request_framer_(SPDY3), |
| 20 spdy_response_framer_(SPDY3) { | 24 spdy_response_framer_(SPDY3) { |
| 21 } | 25 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 42 return scoped_ptr<QuicEncryptedPacket>(MakePacket(header, QuicFrame(&rst))); | 46 return scoped_ptr<QuicEncryptedPacket>(MakePacket(header, QuicFrame(&rst))); |
| 43 } | 47 } |
| 44 | 48 |
| 45 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckAndRstPacket( | 49 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckAndRstPacket( |
| 46 QuicPacketSequenceNumber num, | 50 QuicPacketSequenceNumber num, |
| 47 bool include_version, | 51 bool include_version, |
| 48 QuicStreamId stream_id, | 52 QuicStreamId stream_id, |
| 49 QuicRstStreamErrorCode error_code, | 53 QuicRstStreamErrorCode error_code, |
| 50 QuicPacketSequenceNumber largest_received, | 54 QuicPacketSequenceNumber largest_received, |
| 51 QuicPacketSequenceNumber least_unacked, | 55 QuicPacketSequenceNumber least_unacked, |
| 52 bool send_feedback) { | 56 bool send_feedback, |
| 57 QuicTime timestamp) { |
| 53 | 58 |
| 54 QuicPacketHeader header; | 59 QuicPacketHeader header; |
| 55 header.public_header.connection_id = connection_id_; | 60 header.public_header.connection_id = connection_id_; |
| 56 header.public_header.reset_flag = false; | 61 header.public_header.reset_flag = false; |
| 57 header.public_header.version_flag = include_version; | 62 header.public_header.version_flag = include_version; |
| 58 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | 63 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
| 59 header.packet_sequence_number = num; | 64 header.packet_sequence_number = num; |
| 60 header.entropy_flag = false; | 65 header.entropy_flag = false; |
| 61 header.fec_flag = false; | 66 header.fec_flag = false; |
| 62 header.fec_group = 0; | 67 header.fec_group = 0; |
| 63 | 68 |
| 64 QuicAckFrame ack(MakeAckFrame(largest_received)); | 69 QuicAckFrame ack(MakeAckFrame(largest_received)); |
| 65 ack.delta_time_largest_observed = QuicTime::Delta::Zero(); | 70 ack.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 71 if (version_ > QUIC_VERSION_22) { |
| 72 for (QuicPacketSequenceNumber i = least_unacked; i <= largest_received; |
| 73 ++i) { |
| 74 ack.received_packet_times.push_back(make_pair(i, timestamp)); |
| 75 } |
| 76 } |
| 66 QuicFrames frames; | 77 QuicFrames frames; |
| 67 frames.push_back(QuicFrame(&ack)); | 78 frames.push_back(QuicFrame(&ack)); |
| 68 QuicCongestionFeedbackFrame feedback; | 79 QuicCongestionFeedbackFrame feedback; |
| 69 if (send_feedback) { | 80 if (send_feedback && version_ <= QUIC_VERSION_22) { |
| 70 feedback.type = kTCP; | 81 feedback.type = kTCP; |
| 71 feedback.tcp.receive_window = 256000; | 82 feedback.tcp.receive_window = 256000; |
| 72 | 83 |
| 73 frames.push_back(QuicFrame(&feedback)); | 84 frames.push_back(QuicFrame(&feedback)); |
| 74 } | 85 } |
| 75 | 86 |
| 76 QuicStopWaitingFrame stop_waiting; | 87 QuicStopWaitingFrame stop_waiting; |
| 77 stop_waiting.least_unacked = least_unacked; | 88 stop_waiting.least_unacked = least_unacked; |
| 78 frames.push_back(QuicFrame(&stop_waiting)); | 89 frames.push_back(QuicFrame(&stop_waiting)); |
| 79 | 90 |
| 80 QuicRstStreamFrame rst(stream_id, error_code, 0); | 91 QuicRstStreamFrame rst(stream_id, error_code, 0); |
| 81 frames.push_back(QuicFrame(&rst)); | 92 frames.push_back(QuicFrame(&rst)); |
| 82 | 93 |
| 83 QuicFramer framer(SupportedVersions(version_), QuicTime::Zero(), false); | 94 QuicFramer framer(SupportedVersions(version_), timestamp, false); |
| 84 scoped_ptr<QuicPacket> packet( | 95 scoped_ptr<QuicPacket> packet( |
| 85 BuildUnsizedDataPacket(&framer, header, frames).packet); | 96 BuildUnsizedDataPacket(&framer, header, frames).packet); |
| 86 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket( | 97 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket( |
| 87 ENCRYPTION_NONE, header.packet_sequence_number, *packet)); | 98 ENCRYPTION_NONE, header.packet_sequence_number, *packet)); |
| 88 } | 99 } |
| 89 | 100 |
| 90 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeConnectionClosePacket( | 101 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeConnectionClosePacket( |
| 91 QuicPacketSequenceNumber num) { | 102 QuicPacketSequenceNumber num) { |
| 92 QuicPacketHeader header; | 103 QuicPacketHeader header; |
| 93 header.public_header.connection_id = connection_id_; | 104 header.public_header.connection_id = connection_id_; |
| 94 header.public_header.reset_flag = false; | 105 header.public_header.reset_flag = false; |
| 95 header.public_header.version_flag = false; | 106 header.public_header.version_flag = false; |
| 96 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | 107 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
| 97 header.packet_sequence_number = num; | 108 header.packet_sequence_number = num; |
| 98 header.entropy_flag = false; | 109 header.entropy_flag = false; |
| 99 header.fec_flag = false; | 110 header.fec_flag = false; |
| 100 header.fec_group = 0; | 111 header.fec_group = 0; |
| 101 | 112 |
| 102 QuicConnectionCloseFrame close; | 113 QuicConnectionCloseFrame close; |
| 103 close.error_code = QUIC_CRYPTO_VERSION_NOT_SUPPORTED; | 114 close.error_code = QUIC_CRYPTO_VERSION_NOT_SUPPORTED; |
| 104 close.error_details = "Time to panic!"; | 115 close.error_details = "Time to panic!"; |
| 105 return scoped_ptr<QuicEncryptedPacket>(MakePacket(header, QuicFrame(&close))); | 116 return scoped_ptr<QuicEncryptedPacket>(MakePacket(header, QuicFrame(&close))); |
| 106 } | 117 } |
| 107 | 118 |
| 108 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckPacket( | 119 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckPacket( |
| 109 QuicPacketSequenceNumber sequence_number, | 120 QuicPacketSequenceNumber sequence_number, |
| 110 QuicPacketSequenceNumber largest_received, | 121 QuicPacketSequenceNumber largest_received, |
| 111 QuicPacketSequenceNumber least_unacked, | 122 QuicPacketSequenceNumber least_unacked, |
| 112 bool send_feedback) { | 123 bool send_feedback, |
| 124 QuicTime timestamp) { |
| 113 QuicPacketHeader header; | 125 QuicPacketHeader header; |
| 114 header.public_header.connection_id = connection_id_; | 126 header.public_header.connection_id = connection_id_; |
| 115 header.public_header.reset_flag = false; | 127 header.public_header.reset_flag = false; |
| 116 header.public_header.version_flag = false; | 128 header.public_header.version_flag = false; |
| 117 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | 129 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
| 118 header.packet_sequence_number = sequence_number; | 130 header.packet_sequence_number = sequence_number; |
| 119 header.entropy_flag = false; | 131 header.entropy_flag = false; |
| 120 header.fec_flag = false; | 132 header.fec_flag = false; |
| 121 header.fec_group = 0; | 133 header.fec_group = 0; |
| 122 | 134 |
| 123 QuicAckFrame ack(MakeAckFrame(largest_received)); | 135 QuicAckFrame ack(MakeAckFrame(largest_received)); |
| 124 ack.delta_time_largest_observed = QuicTime::Delta::Zero(); | 136 ack.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 137 if (version_ > QUIC_VERSION_22) { |
| 138 for (QuicPacketSequenceNumber i = least_unacked; i <= largest_received; |
| 139 ++i) { |
| 140 ack.received_packet_times.push_back(make_pair(i, timestamp)); |
| 141 } |
| 142 } |
| 125 | 143 |
| 126 QuicCongestionFeedbackFrame feedback; | 144 QuicFramer framer(SupportedVersions(version_), timestamp, false); |
| 127 feedback.type = kTCP; | |
| 128 feedback.tcp.receive_window = 256000; | |
| 129 | |
| 130 QuicFramer framer(SupportedVersions(version_), QuicTime::Zero(), false); | |
| 131 QuicFrames frames; | 145 QuicFrames frames; |
| 132 frames.push_back(QuicFrame(&ack)); | 146 frames.push_back(QuicFrame(&ack)); |
| 133 if (send_feedback) { | 147 QuicCongestionFeedbackFrame feedback; |
| 148 if (send_feedback && version_ <= QUIC_VERSION_22) { |
| 149 feedback.type = kTCP; |
| 150 feedback.tcp.receive_window = 256000; |
| 134 frames.push_back(QuicFrame(&feedback)); | 151 frames.push_back(QuicFrame(&feedback)); |
| 135 } | 152 } |
| 136 | 153 |
| 137 QuicStopWaitingFrame stop_waiting; | 154 QuicStopWaitingFrame stop_waiting; |
| 138 stop_waiting.least_unacked = least_unacked; | 155 stop_waiting.least_unacked = least_unacked; |
| 139 frames.push_back(QuicFrame(&stop_waiting)); | 156 frames.push_back(QuicFrame(&stop_waiting)); |
| 140 | 157 |
| 141 scoped_ptr<QuicPacket> packet( | 158 scoped_ptr<QuicPacket> packet( |
| 142 BuildUnsizedDataPacket(&framer, header, frames).packet); | 159 BuildUnsizedDataPacket(&framer, header, frames).packet); |
| 143 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket( | 160 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket( |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 header_.public_header.version_flag = should_include_version; | 253 header_.public_header.version_flag = should_include_version; |
| 237 header_.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | 254 header_.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
| 238 header_.packet_sequence_number = sequence_number; | 255 header_.packet_sequence_number = sequence_number; |
| 239 header_.fec_group = 0; | 256 header_.fec_group = 0; |
| 240 header_.entropy_flag = false; | 257 header_.entropy_flag = false; |
| 241 header_.fec_flag = false; | 258 header_.fec_flag = false; |
| 242 } | 259 } |
| 243 | 260 |
| 244 } // namespace test | 261 } // namespace test |
| 245 } // namespace net | 262 } // namespace net |
| OLD | NEW |