| 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 156 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 167   close.error_code = QUIC_CRYPTO_VERSION_NOT_SUPPORTED; | 167   close.error_code = QUIC_CRYPTO_VERSION_NOT_SUPPORTED; | 
| 168   close.error_details = "Time to panic!"; | 168   close.error_details = "Time to panic!"; | 
| 169   return scoped_ptr<QuicEncryptedPacket>(MakePacket(header, QuicFrame(&close))); | 169   return scoped_ptr<QuicEncryptedPacket>(MakePacket(header, QuicFrame(&close))); | 
| 170 } | 170 } | 
| 171 | 171 | 
| 172 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckPacket( | 172 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckPacket( | 
| 173     QuicPacketNumber packet_number, | 173     QuicPacketNumber packet_number, | 
| 174     QuicPacketNumber largest_received, | 174     QuicPacketNumber largest_received, | 
| 175     QuicPacketNumber least_unacked, | 175     QuicPacketNumber least_unacked, | 
| 176     bool send_feedback) { | 176     bool send_feedback) { | 
|  | 177   return MakeAckPacket(packet_number, largest_received, least_unacked, | 
|  | 178                        least_unacked, send_feedback); | 
|  | 179 } | 
|  | 180 | 
|  | 181 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckPacket( | 
|  | 182     QuicPacketNumber packet_number, | 
|  | 183     QuicPacketNumber largest_received, | 
|  | 184     QuicPacketNumber ack_least_unacked, | 
|  | 185     QuicPacketNumber stop_least_unacked, | 
|  | 186     bool send_feedback) { | 
| 177   QuicPacketHeader header; | 187   QuicPacketHeader header; | 
| 178   header.public_header.connection_id = connection_id_; | 188   header.public_header.connection_id = connection_id_; | 
| 179   header.public_header.reset_flag = false; | 189   header.public_header.reset_flag = false; | 
| 180   header.public_header.version_flag = false; | 190   header.public_header.version_flag = false; | 
| 181   header.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; | 191   header.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; | 
| 182   header.packet_number = packet_number; | 192   header.packet_number = packet_number; | 
| 183   header.entropy_flag = false; | 193   header.entropy_flag = false; | 
| 184   header.fec_flag = false; | 194   header.fec_flag = false; | 
| 185   header.fec_group = 0; | 195   header.fec_group = 0; | 
| 186 | 196 | 
| 187   QuicAckFrame ack(MakeAckFrame(largest_received)); | 197   QuicAckFrame ack(MakeAckFrame(largest_received)); | 
| 188   ack.delta_time_largest_observed = QuicTime::Delta::Zero(); | 198   ack.delta_time_largest_observed = QuicTime::Delta::Zero(); | 
| 189   for (QuicPacketNumber i = least_unacked; i <= largest_received; ++i) { | 199   for (QuicPacketNumber i = ack_least_unacked; i <= largest_received; ++i) { | 
| 190     ack.received_packet_times.push_back(make_pair(i, clock_->Now())); | 200     ack.received_packet_times.push_back(make_pair(i, clock_->Now())); | 
| 191   } | 201   } | 
| 192 | 202 | 
| 193   QuicFramer framer(SupportedVersions(version_), clock_->Now(), | 203   QuicFramer framer(SupportedVersions(version_), clock_->Now(), | 
| 194                     Perspective::IS_CLIENT); | 204                     Perspective::IS_CLIENT); | 
| 195   QuicFrames frames; | 205   QuicFrames frames; | 
| 196   frames.push_back(QuicFrame(&ack)); | 206   frames.push_back(QuicFrame(&ack)); | 
| 197 | 207 | 
| 198   QuicStopWaitingFrame stop_waiting; | 208   QuicStopWaitingFrame stop_waiting; | 
| 199   stop_waiting.least_unacked = least_unacked; | 209   stop_waiting.least_unacked = stop_least_unacked; | 
| 200   frames.push_back(QuicFrame(&stop_waiting)); | 210   frames.push_back(QuicFrame(&stop_waiting)); | 
| 201 | 211 | 
| 202   scoped_ptr<QuicPacket> packet( | 212   scoped_ptr<QuicPacket> packet( | 
| 203       BuildUnsizedDataPacket(&framer, header, frames)); | 213       BuildUnsizedDataPacket(&framer, header, frames)); | 
| 204   char buffer[kMaxPacketSize]; | 214   char buffer[kMaxPacketSize]; | 
| 205   size_t encrypted_size = framer.EncryptPayload( | 215   size_t encrypted_size = framer.EncryptPayload( | 
| 206       ENCRYPTION_NONE, header.packet_number, *packet, buffer, kMaxPacketSize); | 216       ENCRYPTION_NONE, header.packet_number, *packet, buffer, kMaxPacketSize); | 
| 207   EXPECT_NE(0u, encrypted_size); | 217   EXPECT_NE(0u, encrypted_size); | 
| 208   QuicEncryptedPacket encrypted(buffer, encrypted_size, false); | 218   QuicEncryptedPacket encrypted(buffer, encrypted_size, false); | 
| 209   return scoped_ptr<QuicEncryptedPacket>(encrypted.Clone()); | 219   return scoped_ptr<QuicEncryptedPacket>(encrypted.Clone()); | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 223 } | 233 } | 
| 224 | 234 | 
| 225 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRequestHeadersPacket( | 235 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRequestHeadersPacket( | 
| 226     QuicPacketNumber packet_number, | 236     QuicPacketNumber packet_number, | 
| 227     QuicStreamId stream_id, | 237     QuicStreamId stream_id, | 
| 228     bool should_include_version, | 238     bool should_include_version, | 
| 229     bool fin, | 239     bool fin, | 
| 230     SpdyPriority priority, | 240     SpdyPriority priority, | 
| 231     const SpdyHeaderBlock& headers, | 241     const SpdyHeaderBlock& headers, | 
| 232     size_t* spdy_headers_frame_length) { | 242     size_t* spdy_headers_frame_length) { | 
|  | 243   return MakeRequestHeadersPacket(packet_number, stream_id, | 
|  | 244                                   should_include_version, fin, priority, | 
|  | 245                                   headers, spdy_headers_frame_length, 0); | 
|  | 246 } | 
|  | 247 | 
|  | 248 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRequestHeadersPacket( | 
|  | 249     QuicPacketNumber packet_number, | 
|  | 250     QuicStreamId stream_id, | 
|  | 251     bool should_include_version, | 
|  | 252     bool fin, | 
|  | 253     SpdyPriority priority, | 
|  | 254     const SpdyHeaderBlock& headers, | 
|  | 255     size_t* spdy_headers_frame_length, | 
|  | 256     QuicStreamOffset offset) { | 
| 233   InitializeHeader(packet_number, should_include_version); | 257   InitializeHeader(packet_number, should_include_version); | 
| 234   scoped_ptr<SpdySerializedFrame> spdy_frame; | 258   scoped_ptr<SpdySerializedFrame> spdy_frame; | 
| 235   if (spdy_request_framer_.protocol_version() == SPDY3) { | 259   if (spdy_request_framer_.protocol_version() == SPDY3) { | 
| 236     SpdySynStreamIR syn_stream(stream_id); | 260     SpdySynStreamIR syn_stream(stream_id); | 
| 237     syn_stream.set_header_block(headers); | 261     syn_stream.set_header_block(headers); | 
| 238     syn_stream.set_fin(fin); | 262     syn_stream.set_fin(fin); | 
| 239     syn_stream.set_priority(priority); | 263     syn_stream.set_priority(priority); | 
| 240     spdy_frame.reset(spdy_request_framer_.SerializeSynStream(syn_stream)); | 264     spdy_frame.reset(spdy_request_framer_.SerializeSynStream(syn_stream)); | 
| 241   } else { | 265   } else { | 
| 242     SpdyHeadersIR headers_frame(stream_id); | 266     SpdyHeadersIR headers_frame(stream_id); | 
| 243     headers_frame.set_header_block(headers); | 267     headers_frame.set_header_block(headers); | 
| 244     headers_frame.set_fin(fin); | 268     headers_frame.set_fin(fin); | 
| 245     headers_frame.set_priority(priority); | 269     headers_frame.set_priority(priority); | 
| 246     headers_frame.set_has_priority(true); | 270     headers_frame.set_has_priority(true); | 
| 247     spdy_frame.reset(spdy_request_framer_.SerializeFrame(headers_frame)); | 271     spdy_frame.reset(spdy_request_framer_.SerializeFrame(headers_frame)); | 
| 248   } | 272   } | 
| 249   if (spdy_headers_frame_length) { | 273   if (spdy_headers_frame_length) { | 
| 250     *spdy_headers_frame_length = spdy_frame->size(); | 274     *spdy_headers_frame_length = spdy_frame->size(); | 
| 251   } | 275   } | 
| 252   QuicStreamFrame frame( | 276   QuicStreamFrame frame( | 
| 253       kHeadersStreamId, false, 0, | 277       kHeadersStreamId, false, offset, | 
| 254       base::StringPiece(spdy_frame->data(), spdy_frame->size())); | 278       base::StringPiece(spdy_frame->data(), spdy_frame->size())); | 
|  | 279 | 
| 255   return MakePacket(header_, QuicFrame(&frame)); | 280   return MakePacket(header_, QuicFrame(&frame)); | 
| 256 } | 281 } | 
| 257 | 282 | 
| 258 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRequestHeadersPacket( | 283 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRequestHeadersPacket( | 
| 259     QuicPacketNumber packet_number, | 284     QuicPacketNumber packet_number, | 
| 260     QuicStreamId stream_id, | 285     QuicStreamId stream_id, | 
| 261     bool should_include_version, | 286     bool should_include_version, | 
| 262     bool fin, | 287     bool fin, | 
| 263     SpdyPriority priority, | 288     SpdyPriority priority, | 
| 264     const SpdyHeaderBlock& headers) { | 289     const SpdyHeaderBlock& headers, | 
|  | 290     QuicStreamOffset offset) { | 
| 265   return MakeRequestHeadersPacket(packet_number, stream_id, | 291   return MakeRequestHeadersPacket(packet_number, stream_id, | 
| 266                                   should_include_version, fin, priority, | 292                                   should_include_version, fin, priority, | 
| 267                                   headers, nullptr); | 293                                   headers, nullptr, offset); | 
| 268 } | 294 } | 
| 269 | 295 | 
| 270 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeResponseHeadersPacket( | 296 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeResponseHeadersPacket( | 
| 271     QuicPacketNumber packet_number, | 297     QuicPacketNumber packet_number, | 
| 272     QuicStreamId stream_id, | 298     QuicStreamId stream_id, | 
| 273     bool should_include_version, | 299     bool should_include_version, | 
| 274     bool fin, | 300     bool fin, | 
| 275     const SpdyHeaderBlock& headers, | 301     const SpdyHeaderBlock& headers, | 
| 276     size_t* spdy_headers_frame_length) { | 302     size_t* spdy_headers_frame_length, | 
|  | 303     QuicStreamOffset offset) { | 
| 277   InitializeHeader(packet_number, should_include_version); | 304   InitializeHeader(packet_number, should_include_version); | 
| 278   scoped_ptr<SpdySerializedFrame> spdy_frame; | 305   scoped_ptr<SpdySerializedFrame> spdy_frame; | 
| 279   if (spdy_request_framer_.protocol_version() == SPDY3) { | 306   if (spdy_response_framer_.protocol_version() == SPDY3) { | 
| 280     SpdySynReplyIR syn_reply(stream_id); | 307     SpdySynReplyIR syn_reply(stream_id); | 
| 281     syn_reply.set_header_block(headers); | 308     syn_reply.set_header_block(headers); | 
| 282     syn_reply.set_fin(fin); | 309     syn_reply.set_fin(fin); | 
| 283     spdy_frame.reset(spdy_response_framer_.SerializeSynReply(syn_reply)); | 310     spdy_frame.reset(spdy_response_framer_.SerializeSynReply(syn_reply)); | 
| 284   } else { | 311   } else { | 
| 285     SpdyHeadersIR headers_frame(stream_id); | 312     SpdyHeadersIR headers_frame(stream_id); | 
| 286     headers_frame.set_header_block(headers); | 313     headers_frame.set_header_block(headers); | 
| 287     headers_frame.set_fin(fin); | 314     headers_frame.set_fin(fin); | 
| 288     spdy_frame.reset(spdy_request_framer_.SerializeFrame(headers_frame)); | 315     spdy_frame.reset(spdy_response_framer_.SerializeFrame(headers_frame)); | 
| 289   } | 316   } | 
| 290   if (spdy_headers_frame_length) { | 317   if (spdy_headers_frame_length) { | 
| 291     *spdy_headers_frame_length = spdy_frame->size(); | 318     *spdy_headers_frame_length = spdy_frame->size(); | 
| 292   } | 319   } | 
| 293   QuicStreamFrame frame( | 320   QuicStreamFrame frame( | 
| 294       kHeadersStreamId, false, 0, | 321       kHeadersStreamId, false, offset, | 
| 295       base::StringPiece(spdy_frame->data(), spdy_frame->size())); | 322       base::StringPiece(spdy_frame->data(), spdy_frame->size())); | 
| 296   return MakePacket(header_, QuicFrame(&frame)); | 323   return MakePacket(header_, QuicFrame(&frame)); | 
| 297 } | 324 } | 
| 298 | 325 | 
| 299 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeResponseHeadersPacket( | 326 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeResponseHeadersPacket( | 
| 300     QuicPacketNumber packet_number, | 327     QuicPacketNumber packet_number, | 
| 301     QuicStreamId stream_id, | 328     QuicStreamId stream_id, | 
| 302     bool should_include_version, | 329     bool should_include_version, | 
| 303     bool fin, | 330     bool fin, | 
| 304     const SpdyHeaderBlock& headers) { | 331     const SpdyHeaderBlock& headers, | 
| 305   return MakeResponseHeadersPacket( | 332     size_t* spdy_headers_frame_length) { | 
| 306       packet_number, stream_id, should_include_version, fin, headers, nullptr); | 333   return MakeResponseHeadersPacket(packet_number, stream_id, | 
|  | 334                                    should_include_version, fin, headers, | 
|  | 335                                    spdy_headers_frame_length, 0); | 
|  | 336 } | 
|  | 337 | 
|  | 338 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeResponseHeadersPacket( | 
|  | 339     QuicPacketNumber packet_number, | 
|  | 340     QuicStreamId stream_id, | 
|  | 341     bool should_include_version, | 
|  | 342     bool fin, | 
|  | 343     const SpdyHeaderBlock& headers, | 
|  | 344     QuicStreamOffset offset) { | 
|  | 345   return MakeResponseHeadersPacket(packet_number, stream_id, | 
|  | 346                                    should_include_version, fin, headers, | 
|  | 347                                    nullptr, offset); | 
| 307 } | 348 } | 
| 308 | 349 | 
| 309 SpdyHeaderBlock QuicTestPacketMaker::GetRequestHeaders( | 350 SpdyHeaderBlock QuicTestPacketMaker::GetRequestHeaders( | 
| 310     const std::string& method, | 351     const std::string& method, | 
| 311     const std::string& scheme, | 352     const std::string& scheme, | 
| 312     const std::string& path) { | 353     const std::string& path) { | 
| 313   SpdyHeaderBlock headers; | 354   SpdyHeaderBlock headers; | 
| 314   headers[":method"] = method; | 355   headers[":method"] = method; | 
| 315   headers[":authority"] = host_; | 356   headers[":authority"] = host_; | 
| 316   headers[":scheme"] = scheme; | 357   headers[":scheme"] = scheme; | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 350   header_.public_header.version_flag = should_include_version; | 391   header_.public_header.version_flag = should_include_version; | 
| 351   header_.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; | 392   header_.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; | 
| 352   header_.packet_number = packet_number; | 393   header_.packet_number = packet_number; | 
| 353   header_.fec_group = 0; | 394   header_.fec_group = 0; | 
| 354   header_.entropy_flag = false; | 395   header_.entropy_flag = false; | 
| 355   header_.fec_flag = false; | 396   header_.fec_flag = false; | 
| 356 } | 397 } | 
| 357 | 398 | 
| 358 }  // namespace test | 399 }  // namespace test | 
| 359 }  // namespace net | 400 }  // namespace net | 
| OLD | NEW | 
|---|