| 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" |
| 11 #include "net/quic/quic_utils.h" | 11 #include "net/quic/quic_utils.h" |
| 12 #include "net/quic/test_tools/quic_test_utils.h" | 12 #include "net/quic/test_tools/quic_test_utils.h" |
| 13 | 13 |
| 14 using std::make_pair; | 14 using std::make_pair; |
| 15 | 15 |
| 16 namespace net { | 16 namespace net { |
| 17 namespace test { | 17 namespace test { |
| 18 | 18 |
| 19 QuicTestPacketMaker::QuicTestPacketMaker(QuicVersion version, | 19 QuicTestPacketMaker::QuicTestPacketMaker(QuicVersion version, |
| 20 QuicConnectionId connection_id, | 20 QuicConnectionId connection_id, |
| 21 MockClock* clock) | 21 MockClock* clock) |
| 22 : version_(version), | 22 : version_(version), |
| 23 connection_id_(connection_id), | 23 connection_id_(connection_id), |
| 24 clock_(clock), | 24 clock_(clock), |
| 25 spdy_request_framer_(SPDY3), | 25 spdy_request_framer_(version > QUIC_VERSION_23 ? SPDY4 : SPDY3), |
| 26 spdy_response_framer_(SPDY3) { | 26 spdy_response_framer_(version > QUIC_VERSION_23 ? SPDY4 : SPDY3) { |
| 27 } | 27 } |
| 28 | 28 |
| 29 QuicTestPacketMaker::~QuicTestPacketMaker() { | 29 QuicTestPacketMaker::~QuicTestPacketMaker() { |
| 30 } | 30 } |
| 31 | 31 |
| 32 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRstPacket( | 32 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRstPacket( |
| 33 QuicPacketSequenceNumber num, | 33 QuicPacketSequenceNumber num, |
| 34 bool include_version, | 34 bool include_version, |
| 35 QuicStreamId stream_id, | 35 QuicStreamId stream_id, |
| 36 QuicRstStreamErrorCode error_code) { | 36 QuicRstStreamErrorCode error_code) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 62 header.public_header.reset_flag = false; | 62 header.public_header.reset_flag = false; |
| 63 header.public_header.version_flag = include_version; | 63 header.public_header.version_flag = include_version; |
| 64 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | 64 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
| 65 header.packet_sequence_number = num; | 65 header.packet_sequence_number = num; |
| 66 header.entropy_flag = false; | 66 header.entropy_flag = false; |
| 67 header.fec_flag = false; | 67 header.fec_flag = false; |
| 68 header.fec_group = 0; | 68 header.fec_group = 0; |
| 69 | 69 |
| 70 QuicAckFrame ack(MakeAckFrame(largest_received)); | 70 QuicAckFrame ack(MakeAckFrame(largest_received)); |
| 71 ack.delta_time_largest_observed = QuicTime::Delta::Zero(); | 71 ack.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 72 if (version_ > QUIC_VERSION_22) { | 72 for (QuicPacketSequenceNumber i = least_unacked; i <= largest_received; ++i) { |
| 73 for (QuicPacketSequenceNumber i = least_unacked; i <= largest_received; | 73 ack.received_packet_times.push_back(make_pair(i, clock_->Now())); |
| 74 ++i) { | |
| 75 ack.received_packet_times.push_back(make_pair(i, clock_->Now())); | |
| 76 } | |
| 77 } | 74 } |
| 78 QuicFrames frames; | 75 QuicFrames frames; |
| 79 frames.push_back(QuicFrame(&ack)); | 76 frames.push_back(QuicFrame(&ack)); |
| 80 QuicCongestionFeedbackFrame feedback; | |
| 81 if (send_feedback && version_ <= QUIC_VERSION_22) { | |
| 82 feedback.type = kTCP; | |
| 83 feedback.tcp.receive_window = 256000; | |
| 84 | |
| 85 frames.push_back(QuicFrame(&feedback)); | |
| 86 } | |
| 87 | 77 |
| 88 QuicStopWaitingFrame stop_waiting; | 78 QuicStopWaitingFrame stop_waiting; |
| 89 stop_waiting.least_unacked = least_unacked; | 79 stop_waiting.least_unacked = least_unacked; |
| 90 frames.push_back(QuicFrame(&stop_waiting)); | 80 frames.push_back(QuicFrame(&stop_waiting)); |
| 91 | 81 |
| 92 QuicRstStreamFrame rst(stream_id, error_code, 0); | 82 QuicRstStreamFrame rst(stream_id, error_code, 0); |
| 93 frames.push_back(QuicFrame(&rst)); | 83 frames.push_back(QuicFrame(&rst)); |
| 94 | 84 |
| 95 QuicFramer framer(SupportedVersions(version_), clock_->Now(), false); | 85 QuicFramer framer(SupportedVersions(version_), clock_->Now(), false); |
| 96 scoped_ptr<QuicPacket> packet( | 86 scoped_ptr<QuicPacket> packet( |
| (...skipping 30 matching lines...) Expand all Loading... |
| 127 header.public_header.reset_flag = false; | 117 header.public_header.reset_flag = false; |
| 128 header.public_header.version_flag = false; | 118 header.public_header.version_flag = false; |
| 129 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | 119 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
| 130 header.packet_sequence_number = sequence_number; | 120 header.packet_sequence_number = sequence_number; |
| 131 header.entropy_flag = false; | 121 header.entropy_flag = false; |
| 132 header.fec_flag = false; | 122 header.fec_flag = false; |
| 133 header.fec_group = 0; | 123 header.fec_group = 0; |
| 134 | 124 |
| 135 QuicAckFrame ack(MakeAckFrame(largest_received)); | 125 QuicAckFrame ack(MakeAckFrame(largest_received)); |
| 136 ack.delta_time_largest_observed = QuicTime::Delta::Zero(); | 126 ack.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 137 if (version_ > QUIC_VERSION_22) { | 127 for (QuicPacketSequenceNumber i = least_unacked; i <= largest_received; ++i) { |
| 138 for (QuicPacketSequenceNumber i = least_unacked; i <= largest_received; | 128 ack.received_packet_times.push_back(make_pair(i, clock_->Now())); |
| 139 ++i) { | |
| 140 ack.received_packet_times.push_back(make_pair(i, clock_->Now())); | |
| 141 } | |
| 142 } | 129 } |
| 143 | 130 |
| 144 QuicFramer framer(SupportedVersions(version_), clock_->Now(), false); | 131 QuicFramer framer(SupportedVersions(version_), clock_->Now(), false); |
| 145 QuicFrames frames; | 132 QuicFrames frames; |
| 146 frames.push_back(QuicFrame(&ack)); | 133 frames.push_back(QuicFrame(&ack)); |
| 147 QuicCongestionFeedbackFrame feedback; | |
| 148 if (send_feedback && version_ <= QUIC_VERSION_22) { | |
| 149 feedback.type = kTCP; | |
| 150 feedback.tcp.receive_window = 256000; | |
| 151 frames.push_back(QuicFrame(&feedback)); | |
| 152 } | |
| 153 | 134 |
| 154 QuicStopWaitingFrame stop_waiting; | 135 QuicStopWaitingFrame stop_waiting; |
| 155 stop_waiting.least_unacked = least_unacked; | 136 stop_waiting.least_unacked = least_unacked; |
| 156 frames.push_back(QuicFrame(&stop_waiting)); | 137 frames.push_back(QuicFrame(&stop_waiting)); |
| 157 | 138 |
| 158 scoped_ptr<QuicPacket> packet( | 139 scoped_ptr<QuicPacket> packet( |
| 159 BuildUnsizedDataPacket(&framer, header, frames).packet); | 140 BuildUnsizedDataPacket(&framer, header, frames).packet); |
| 160 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket( | 141 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket( |
| 161 ENCRYPTION_NONE, header.packet_sequence_number, *packet)); | 142 ENCRYPTION_NONE, header.packet_sequence_number, *packet)); |
| 162 } | 143 } |
| 163 | 144 |
| 164 // Returns a newly created packet to send kData on stream 1. | 145 // Returns a newly created packet to send kData on stream 1. |
| 165 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeDataPacket( | 146 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeDataPacket( |
| 166 QuicPacketSequenceNumber sequence_number, | 147 QuicPacketSequenceNumber sequence_number, |
| 167 QuicStreamId stream_id, | 148 QuicStreamId stream_id, |
| 168 bool should_include_version, | 149 bool should_include_version, |
| 169 bool fin, | 150 bool fin, |
| 170 QuicStreamOffset offset, | 151 QuicStreamOffset offset, |
| 171 base::StringPiece data) { | 152 base::StringPiece data) { |
| 172 InitializeHeader(sequence_number, should_include_version); | 153 InitializeHeader(sequence_number, should_include_version); |
| 173 QuicStreamFrame frame(stream_id, fin, offset, MakeIOVector(data)); | 154 QuicStreamFrame frame(stream_id, fin, offset, MakeIOVector(data)); |
| 174 return MakePacket(header_, QuicFrame(&frame)); | 155 return MakePacket(header_, QuicFrame(&frame)); |
| 175 } | 156 } |
| 176 | 157 |
| 177 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRequestHeadersPacket( | 158 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRequestHeadersPacket( |
| 178 QuicPacketSequenceNumber sequence_number, | 159 QuicPacketSequenceNumber sequence_number, |
| 179 QuicStreamId stream_id, | 160 QuicStreamId stream_id, |
| 180 bool should_include_version, | 161 bool should_include_version, |
| 181 bool fin, | 162 bool fin, |
| 163 QuicPriority priority, |
| 182 const SpdyHeaderBlock& headers) { | 164 const SpdyHeaderBlock& headers) { |
| 183 InitializeHeader(sequence_number, should_include_version); | 165 InitializeHeader(sequence_number, should_include_version); |
| 184 SpdySynStreamIR syn_stream(stream_id); | 166 scoped_ptr<SpdySerializedFrame> spdy_frame; |
| 185 syn_stream.set_name_value_block(headers); | 167 if (spdy_request_framer_.protocol_version() == SPDY3) { |
| 186 syn_stream.set_fin(fin); | 168 SpdySynStreamIR syn_stream(stream_id); |
| 187 syn_stream.set_priority(0); | 169 syn_stream.set_name_value_block(headers); |
| 188 scoped_ptr<SpdySerializedFrame> spdy_frame( | 170 syn_stream.set_fin(fin); |
| 189 spdy_request_framer_.SerializeSynStream(syn_stream)); | 171 syn_stream.set_priority(priority); |
| 172 spdy_frame.reset(spdy_request_framer_.SerializeSynStream(syn_stream)); |
| 173 } else { |
| 174 SpdyHeadersIR headers_frame(stream_id); |
| 175 headers_frame.set_name_value_block(headers); |
| 176 headers_frame.set_fin(fin); |
| 177 headers_frame.set_priority(priority); |
| 178 headers_frame.set_has_priority(true); |
| 179 spdy_frame.reset(spdy_request_framer_.SerializeFrame(headers_frame)); |
| 180 } |
| 190 QuicStreamFrame frame(kHeadersStreamId, false, 0, | 181 QuicStreamFrame frame(kHeadersStreamId, false, 0, |
| 191 MakeIOVector(base::StringPiece(spdy_frame->data(), | 182 MakeIOVector(base::StringPiece(spdy_frame->data(), |
| 192 spdy_frame->size()))); | 183 spdy_frame->size()))); |
| 193 return MakePacket(header_, QuicFrame(&frame)); | 184 return MakePacket(header_, QuicFrame(&frame)); |
| 194 } | 185 } |
| 195 | 186 |
| 196 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeResponseHeadersPacket( | 187 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeResponseHeadersPacket( |
| 197 QuicPacketSequenceNumber sequence_number, | 188 QuicPacketSequenceNumber sequence_number, |
| 198 QuicStreamId stream_id, | 189 QuicStreamId stream_id, |
| 199 bool should_include_version, | 190 bool should_include_version, |
| 200 bool fin, | 191 bool fin, |
| 201 const SpdyHeaderBlock& headers) { | 192 const SpdyHeaderBlock& headers) { |
| 202 InitializeHeader(sequence_number, should_include_version); | 193 InitializeHeader(sequence_number, should_include_version); |
| 203 SpdySynReplyIR syn_reply(stream_id); | 194 scoped_ptr<SpdySerializedFrame> spdy_frame; |
| 204 syn_reply.set_name_value_block(headers); | 195 if (spdy_request_framer_.protocol_version() == SPDY3) { |
| 205 syn_reply.set_fin(fin); | 196 SpdySynReplyIR syn_reply(stream_id); |
| 206 scoped_ptr<SpdySerializedFrame> spdy_frame( | 197 syn_reply.set_name_value_block(headers); |
| 207 spdy_response_framer_.SerializeSynReply(syn_reply)); | 198 syn_reply.set_fin(fin); |
| 199 spdy_frame.reset(spdy_response_framer_.SerializeSynReply(syn_reply)); |
| 200 } else { |
| 201 SpdyHeadersIR headers_frame(stream_id); |
| 202 headers_frame.set_name_value_block(headers); |
| 203 headers_frame.set_fin(fin); |
| 204 spdy_frame.reset(spdy_request_framer_.SerializeFrame(headers_frame)); |
| 205 } |
| 208 QuicStreamFrame frame(kHeadersStreamId, false, 0, | 206 QuicStreamFrame frame(kHeadersStreamId, false, 0, |
| 209 MakeIOVector(base::StringPiece(spdy_frame->data(), | 207 MakeIOVector(base::StringPiece(spdy_frame->data(), |
| 210 spdy_frame->size()))); | 208 spdy_frame->size()))); |
| 211 return MakePacket(header_, QuicFrame(&frame)); | 209 return MakePacket(header_, QuicFrame(&frame)); |
| 212 } | 210 } |
| 213 | 211 |
| 214 SpdyHeaderBlock QuicTestPacketMaker::GetRequestHeaders( | 212 SpdyHeaderBlock QuicTestPacketMaker::GetRequestHeaders( |
| 215 const std::string& method, | 213 const std::string& method, |
| 216 const std::string& scheme, | 214 const std::string& scheme, |
| 217 const std::string& path) { | 215 const std::string& path) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 header_.public_header.version_flag = should_include_version; | 251 header_.public_header.version_flag = should_include_version; |
| 254 header_.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | 252 header_.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
| 255 header_.packet_sequence_number = sequence_number; | 253 header_.packet_sequence_number = sequence_number; |
| 256 header_.fec_group = 0; | 254 header_.fec_group = 0; |
| 257 header_.entropy_flag = false; | 255 header_.entropy_flag = false; |
| 258 header_.fec_flag = false; | 256 header_.fec_flag = false; |
| 259 } | 257 } |
| 260 | 258 |
| 261 } // namespace test | 259 } // namespace test |
| 262 } // namespace net | 260 } // namespace net |
| OLD | NEW |