Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "net/quic/test_tools/quic_test_packet_maker.h" | |
| 6 | |
| 7 #include "net/quic/quic_framer.h" | |
| 8 #include "net/quic/quic_http_utils.h" | |
| 9 #include "net/quic/test_tools/quic_test_utils.h" | |
| 10 | |
| 11 namespace net { | |
| 12 namespace test { | |
| 13 | |
| 14 QuicTestPacketMaker::QuicTestPacketMaker(QuicVersion version, QuicGuid guid) | |
| 15 : version_(version), | |
| 16 guid_(guid), | |
| 17 spdy_request_framer_(SPDY3), | |
| 18 spdy_response_framer_(SPDY3) { | |
| 19 } | |
| 20 | |
| 21 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRstPacket( | |
| 22 QuicPacketSequenceNumber num, | |
| 23 bool include_version, | |
| 24 QuicStreamId stream_id, | |
| 25 QuicRstStreamErrorCode error_code) { | |
| 26 QuicPacketHeader header; | |
| 27 header.public_header.guid = guid_; | |
| 28 header.public_header.reset_flag = false; | |
| 29 header.public_header.version_flag = include_version; | |
| 30 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | |
| 31 header.packet_sequence_number = num; | |
| 32 header.entropy_flag = false; | |
| 33 header.fec_flag = false; | |
| 34 header.fec_group = 0; | |
| 35 | |
| 36 QuicRstStreamFrame rst(stream_id, error_code); | |
| 37 return scoped_ptr<QuicEncryptedPacket>(MakePacket(header, QuicFrame(&rst))); | |
| 38 } | |
| 39 | |
| 40 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeConnectionClosePacket( | |
| 41 QuicPacketSequenceNumber num) { | |
| 42 QuicPacketHeader header; | |
| 43 header.public_header.guid = guid_; | |
| 44 header.public_header.reset_flag = false; | |
| 45 header.public_header.version_flag = false; | |
| 46 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | |
| 47 header.packet_sequence_number = num; | |
| 48 header.entropy_flag = false; | |
| 49 header.fec_flag = false; | |
| 50 header.fec_group = 0; | |
| 51 | |
| 52 QuicConnectionCloseFrame close; | |
| 53 close.error_code = QUIC_CRYPTO_VERSION_NOT_SUPPORTED; | |
| 54 close.error_details = "Time to panic!"; | |
| 55 return scoped_ptr<QuicEncryptedPacket>(MakePacket(header, QuicFrame(&close))); | |
| 56 } | |
| 57 | |
| 58 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckPacket( | |
| 59 QuicPacketSequenceNumber sequence_number, | |
| 60 QuicPacketSequenceNumber largest_received, | |
| 61 QuicPacketSequenceNumber least_unacked, | |
| 62 bool send_feedback) { | |
| 63 QuicPacketHeader header; | |
| 64 header.public_header.guid = guid_; | |
| 65 header.public_header.reset_flag = false; | |
| 66 header.public_header.version_flag = false; | |
| 67 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | |
| 68 header.packet_sequence_number = sequence_number; | |
| 69 header.entropy_flag = false; | |
| 70 header.fec_flag = false; | |
| 71 header.fec_group = 0; | |
| 72 | |
| 73 QuicAckFrame ack(largest_received, QuicTime::Zero(), least_unacked); | |
| 74 | |
| 75 QuicCongestionFeedbackFrame feedback; | |
| 76 feedback.type = kTCP; | |
| 77 feedback.tcp.accumulated_number_of_lost_packets = 0; | |
| 78 feedback.tcp.receive_window = 256000; | |
| 79 | |
| 80 QuicFramer framer(SupportedVersions(version_), QuicTime::Zero(), false); | |
| 81 QuicFrames frames; | |
| 82 frames.push_back(QuicFrame(&ack)); | |
| 83 if (send_feedback) { | |
| 84 frames.push_back(QuicFrame(&feedback)); | |
| 85 } | |
| 86 scoped_ptr<QuicPacket> packet( | |
| 87 framer.BuildUnsizedDataPacket(header, frames).packet); | |
| 88 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket( | |
| 89 ENCRYPTION_NONE, header.packet_sequence_number, *packet)); | |
| 90 } | |
| 91 | |
| 92 // Returns a newly created packet to send kData on stream 1. | |
| 93 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeDataPacket( | |
| 94 QuicPacketSequenceNumber sequence_number, | |
| 95 QuicStreamId stream_id, | |
| 96 bool should_include_version, | |
| 97 bool fin, | |
| 98 QuicStreamOffset offset, | |
| 99 base::StringPiece data) { | |
| 100 InitializeHeader(sequence_number, should_include_version); | |
| 101 QuicStreamFrame frame(stream_id, fin, offset, MakeIOVector(data)); | |
| 102 return MakePacket(header_, QuicFrame(&frame)); | |
| 103 } | |
| 104 | |
| 105 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRequestHeadersPacket( | |
| 106 QuicPacketSequenceNumber sequence_number, | |
| 107 QuicStreamId stream_id, | |
| 108 bool should_include_version, | |
| 109 bool fin, | |
| 110 const SpdyHeaderBlock& headers) { | |
| 111 EXPECT_LT(QUIC_VERSION_12, version_); | |
| 112 InitializeHeader(sequence_number, should_include_version); | |
| 113 SpdySynStreamIR syn_stream(stream_id); | |
| 114 *syn_stream.GetMutableNameValueBlock() = headers; | |
| 115 syn_stream.set_fin(fin); | |
| 116 syn_stream.set_priority(0); | |
| 117 scoped_ptr<SpdySerializedFrame> spdy_frame( | |
| 118 spdy_request_framer_.SerializeSynStream(syn_stream)); | |
| 119 QuicStreamFrame frame(kHeadersStreamId, false, 0, | |
| 120 MakeIOVector(base::StringPiece(spdy_frame->data(), | |
| 121 spdy_frame->size()))); | |
| 122 return MakePacket(header_, QuicFrame(&frame)); | |
| 123 } | |
| 124 | |
| 125 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeResponseHeadersPacket( | |
| 126 QuicPacketSequenceNumber sequence_number, | |
| 127 QuicStreamId stream_id, | |
| 128 bool should_include_version, | |
| 129 bool fin, | |
| 130 const SpdyHeaderBlock& headers) { | |
| 131 EXPECT_LT(QUIC_VERSION_12, version_); | |
| 132 InitializeHeader(sequence_number, should_include_version); | |
| 133 SpdySynReplyIR syn_reply(stream_id); | |
| 134 *syn_reply.GetMutableNameValueBlock() = headers; | |
| 135 syn_reply.set_fin(fin); | |
| 136 scoped_ptr<SpdySerializedFrame> spdy_frame( | |
| 137 spdy_response_framer_.SerializeSynReply(syn_reply)); | |
| 138 QuicStreamFrame frame(kHeadersStreamId, false, 0, | |
| 139 MakeIOVector(base::StringPiece(spdy_frame->data(), | |
| 140 spdy_frame->size()))); | |
| 141 return MakePacket(header_, QuicFrame(&frame)); | |
| 142 } | |
| 143 | |
| 144 SpdyHeaderBlock QuicTestPacketMaker::GetRequestHeaders( | |
| 145 const std::string& method, | |
| 146 const std::string& scheme, | |
| 147 const std::string& path) { | |
| 148 SpdyHeaderBlock headers; | |
| 149 headers[":method"] = method; | |
| 150 headers[":host"] = "www.google.com"; | |
| 151 headers[":path"] = path; | |
| 152 headers[":scheme"] = scheme; | |
| 153 headers[":version"] = "HTTP/1.1"; | |
| 154 return headers; | |
| 155 } | |
| 156 | |
| 157 std::string QuicTestPacketMaker::GetRequestString( | |
| 158 const std::string& method, | |
| 159 const std::string& scheme, | |
| 160 const std::string& path) { | |
| 161 DCHECK_LT(QUIC_VERSION_12, version_); | |
| 162 return SerializeHeaderBlock(GetRequestHeaders(method, scheme, path)); | |
| 163 } | |
| 164 | |
| 165 SpdyHeaderBlock QuicTestPacketMaker::GetResponseHeaders( | |
| 166 const std::string& status) { | |
| 167 SpdyHeaderBlock headers; | |
| 168 headers[":status"] = status; | |
| 169 headers[":version"] = "HTTP/1.1"; | |
| 170 headers["content-type"] = "text/plain"; | |
| 171 return headers; | |
| 172 } | |
| 173 | |
| 174 std::string QuicTestPacketMaker::GetResponseString(const std::string& status, | |
| 175 const std::string& body) { | |
| 176 DCHECK_LT(QUIC_VERSION_12, version_); | |
|
jar (doing other things)
2013/12/20 00:53:12
Why is this here? Is this called?
Ryan Hamilton
2013/12/20 01:55:02
Switched to GE. I think I moved this around w/o r
| |
| 177 return compressor_.CompressHeaders(GetResponseHeaders(status)) + body; | |
| 178 } | |
| 179 | |
| 180 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakePacket( | |
| 181 const QuicPacketHeader& header, | |
| 182 const QuicFrame& frame) { | |
| 183 QuicFramer framer(SupportedVersions(version_), QuicTime::Zero(), false); | |
| 184 QuicFrames frames; | |
| 185 frames.push_back(frame); | |
| 186 scoped_ptr<QuicPacket> packet( | |
| 187 framer.BuildUnsizedDataPacket(header, frames).packet); | |
| 188 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket( | |
| 189 ENCRYPTION_NONE, header.packet_sequence_number, *packet)); | |
| 190 } | |
| 191 | |
| 192 void QuicTestPacketMaker::InitializeHeader( | |
| 193 QuicPacketSequenceNumber sequence_number, | |
| 194 bool should_include_version) { | |
| 195 header_.public_header.guid = guid_; | |
| 196 header_.public_header.reset_flag = false; | |
| 197 header_.public_header.version_flag = should_include_version; | |
| 198 header_.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | |
| 199 header_.packet_sequence_number = sequence_number; | |
| 200 header_.fec_group = 0; | |
| 201 header_.entropy_flag = false; | |
| 202 header_.fec_flag = false; | |
| 203 } | |
| 204 | |
| 205 std::string QuicTestPacketMaker::SerializeHeaderBlock( | |
| 206 const SpdyHeaderBlock& headers) { | |
| 207 QuicSpdyCompressor compressor; | |
| 208 return compressor.CompressHeadersWithPriority( | |
| 209 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY), headers); | |
| 210 } | |
| 211 | |
| 212 } // namespace test | |
| 213 } // namespace net | |
| OLD | NEW |