Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(90)

Side by Side Diff: net/quic/test_tools/quic_test_packet_maker.cc

Issue 110853010: Enable support for QUIC 13. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix android Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/quic/test_tools/quic_test_packet_maker.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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 QuicTestPacketMaker::~QuicTestPacketMaker() {
22 }
23
24 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRstPacket(
25 QuicPacketSequenceNumber num,
26 bool include_version,
27 QuicStreamId stream_id,
28 QuicRstStreamErrorCode error_code) {
29 QuicPacketHeader header;
30 header.public_header.guid = guid_;
31 header.public_header.reset_flag = false;
32 header.public_header.version_flag = include_version;
33 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER;
34 header.packet_sequence_number = num;
35 header.entropy_flag = false;
36 header.fec_flag = false;
37 header.fec_group = 0;
38
39 QuicRstStreamFrame rst(stream_id, error_code);
40 return scoped_ptr<QuicEncryptedPacket>(MakePacket(header, QuicFrame(&rst)));
41 }
42
43 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeConnectionClosePacket(
44 QuicPacketSequenceNumber num) {
45 QuicPacketHeader header;
46 header.public_header.guid = guid_;
47 header.public_header.reset_flag = false;
48 header.public_header.version_flag = false;
49 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER;
50 header.packet_sequence_number = num;
51 header.entropy_flag = false;
52 header.fec_flag = false;
53 header.fec_group = 0;
54
55 QuicConnectionCloseFrame close;
56 close.error_code = QUIC_CRYPTO_VERSION_NOT_SUPPORTED;
57 close.error_details = "Time to panic!";
58 return scoped_ptr<QuicEncryptedPacket>(MakePacket(header, QuicFrame(&close)));
59 }
60
61 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckPacket(
62 QuicPacketSequenceNumber sequence_number,
63 QuicPacketSequenceNumber largest_received,
64 QuicPacketSequenceNumber least_unacked,
65 bool send_feedback) {
66 QuicPacketHeader header;
67 header.public_header.guid = guid_;
68 header.public_header.reset_flag = false;
69 header.public_header.version_flag = false;
70 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER;
71 header.packet_sequence_number = sequence_number;
72 header.entropy_flag = false;
73 header.fec_flag = false;
74 header.fec_group = 0;
75
76 QuicAckFrame ack(largest_received, QuicTime::Zero(), least_unacked);
77
78 QuicCongestionFeedbackFrame feedback;
79 feedback.type = kTCP;
80 feedback.tcp.accumulated_number_of_lost_packets = 0;
81 feedback.tcp.receive_window = 256000;
82
83 QuicFramer framer(SupportedVersions(version_), QuicTime::Zero(), false);
84 QuicFrames frames;
85 frames.push_back(QuicFrame(&ack));
86 if (send_feedback) {
87 frames.push_back(QuicFrame(&feedback));
88 }
89 scoped_ptr<QuicPacket> packet(
90 framer.BuildUnsizedDataPacket(header, frames).packet);
91 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket(
92 ENCRYPTION_NONE, header.packet_sequence_number, *packet));
93 }
94
95 // Returns a newly created packet to send kData on stream 1.
96 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeDataPacket(
97 QuicPacketSequenceNumber sequence_number,
98 QuicStreamId stream_id,
99 bool should_include_version,
100 bool fin,
101 QuicStreamOffset offset,
102 base::StringPiece data) {
103 InitializeHeader(sequence_number, should_include_version);
104 QuicStreamFrame frame(stream_id, fin, offset, MakeIOVector(data));
105 return MakePacket(header_, QuicFrame(&frame));
106 }
107
108 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeRequestHeadersPacket(
109 QuicPacketSequenceNumber sequence_number,
110 QuicStreamId stream_id,
111 bool should_include_version,
112 bool fin,
113 const SpdyHeaderBlock& headers) {
114 EXPECT_LT(QUIC_VERSION_12, version_);
115 InitializeHeader(sequence_number, should_include_version);
116 SpdySynStreamIR syn_stream(stream_id);
117 *syn_stream.GetMutableNameValueBlock() = headers;
118 syn_stream.set_fin(fin);
119 syn_stream.set_priority(0);
120 scoped_ptr<SpdySerializedFrame> spdy_frame(
121 spdy_request_framer_.SerializeSynStream(syn_stream));
122 QuicStreamFrame frame(kHeadersStreamId, false, 0,
123 MakeIOVector(base::StringPiece(spdy_frame->data(),
124 spdy_frame->size())));
125 return MakePacket(header_, QuicFrame(&frame));
126 }
127
128 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeResponseHeadersPacket(
129 QuicPacketSequenceNumber sequence_number,
130 QuicStreamId stream_id,
131 bool should_include_version,
132 bool fin,
133 const SpdyHeaderBlock& headers) {
134 EXPECT_LT(QUIC_VERSION_12, version_);
135 InitializeHeader(sequence_number, should_include_version);
136 SpdySynReplyIR syn_reply(stream_id);
137 *syn_reply.GetMutableNameValueBlock() = headers;
138 syn_reply.set_fin(fin);
139 scoped_ptr<SpdySerializedFrame> spdy_frame(
140 spdy_response_framer_.SerializeSynReply(syn_reply));
141 QuicStreamFrame frame(kHeadersStreamId, false, 0,
142 MakeIOVector(base::StringPiece(spdy_frame->data(),
143 spdy_frame->size())));
144 return MakePacket(header_, QuicFrame(&frame));
145 }
146
147 SpdyHeaderBlock QuicTestPacketMaker::GetRequestHeaders(
148 const std::string& method,
149 const std::string& scheme,
150 const std::string& path) {
151 SpdyHeaderBlock headers;
152 headers[":method"] = method;
153 headers[":host"] = "www.google.com";
154 headers[":path"] = path;
155 headers[":scheme"] = scheme;
156 headers[":version"] = "HTTP/1.1";
157 return headers;
158 }
159
160 std::string QuicTestPacketMaker::GetRequestString(
161 const std::string& method,
162 const std::string& scheme,
163 const std::string& path) {
164 DCHECK_GE(QUIC_VERSION_12, version_);
165 return SerializeHeaderBlock(GetRequestHeaders(method, scheme, path));
166 }
167
168 SpdyHeaderBlock QuicTestPacketMaker::GetResponseHeaders(
169 const std::string& status) {
170 SpdyHeaderBlock headers;
171 headers[":status"] = status;
172 headers[":version"] = "HTTP/1.1";
173 headers["content-type"] = "text/plain";
174 return headers;
175 }
176
177 std::string QuicTestPacketMaker::GetResponseString(const std::string& status,
178 const std::string& body) {
179 DCHECK_GE(QUIC_VERSION_12, version_);
180 return compressor_.CompressHeaders(GetResponseHeaders(status)) + body;
181 }
182
183 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakePacket(
184 const QuicPacketHeader& header,
185 const QuicFrame& frame) {
186 QuicFramer framer(SupportedVersions(version_), QuicTime::Zero(), false);
187 QuicFrames frames;
188 frames.push_back(frame);
189 scoped_ptr<QuicPacket> packet(
190 framer.BuildUnsizedDataPacket(header, frames).packet);
191 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket(
192 ENCRYPTION_NONE, header.packet_sequence_number, *packet));
193 }
194
195 void QuicTestPacketMaker::InitializeHeader(
196 QuicPacketSequenceNumber sequence_number,
197 bool should_include_version) {
198 header_.public_header.guid = guid_;
199 header_.public_header.reset_flag = false;
200 header_.public_header.version_flag = should_include_version;
201 header_.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER;
202 header_.packet_sequence_number = sequence_number;
203 header_.fec_group = 0;
204 header_.entropy_flag = false;
205 header_.fec_flag = false;
206 }
207
208 std::string QuicTestPacketMaker::SerializeHeaderBlock(
209 const SpdyHeaderBlock& headers) {
210 QuicSpdyCompressor compressor;
211 return compressor.CompressHeadersWithPriority(
212 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY), headers);
213 }
214
215 } // namespace test
216 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/test_tools/quic_test_packet_maker.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698