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

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: cleanup 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
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 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
OLDNEW
« net/quic/test_tools/quic_test_packet_maker.h ('K') | « 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