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> |
| 8 |
7 #include "net/quic/quic_framer.h" | 9 #include "net/quic/quic_framer.h" |
8 #include "net/quic/quic_http_utils.h" | 10 #include "net/quic/quic_http_utils.h" |
9 #include "net/quic/quic_utils.h" | 11 #include "net/quic/quic_utils.h" |
10 #include "net/quic/test_tools/quic_test_utils.h" | 12 #include "net/quic/test_tools/quic_test_utils.h" |
11 | 13 |
| 14 using std::make_pair; |
| 15 |
12 namespace net { | 16 namespace net { |
13 namespace test { | 17 namespace test { |
14 | 18 |
15 QuicTestPacketMaker::QuicTestPacketMaker(QuicVersion version, | 19 QuicTestPacketMaker::QuicTestPacketMaker(QuicVersion version, |
16 QuicConnectionId connection_id) | 20 QuicConnectionId connection_id) |
17 : version_(version), | 21 : version_(version), |
18 connection_id_(connection_id), | 22 connection_id_(connection_id), |
19 spdy_request_framer_(SPDY3), | 23 spdy_request_framer_(SPDY3), |
20 spdy_response_framer_(SPDY3) { | 24 spdy_response_framer_(SPDY3) { |
21 } | 25 } |
(...skipping 20 matching lines...) Expand all Loading... |
42 return scoped_ptr<QuicEncryptedPacket>(MakePacket(header, QuicFrame(&rst))); | 46 return scoped_ptr<QuicEncryptedPacket>(MakePacket(header, QuicFrame(&rst))); |
43 } | 47 } |
44 | 48 |
45 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckAndRstPacket( | 49 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckAndRstPacket( |
46 QuicPacketSequenceNumber num, | 50 QuicPacketSequenceNumber num, |
47 bool include_version, | 51 bool include_version, |
48 QuicStreamId stream_id, | 52 QuicStreamId stream_id, |
49 QuicRstStreamErrorCode error_code, | 53 QuicRstStreamErrorCode error_code, |
50 QuicPacketSequenceNumber largest_received, | 54 QuicPacketSequenceNumber largest_received, |
51 QuicPacketSequenceNumber least_unacked, | 55 QuicPacketSequenceNumber least_unacked, |
52 bool send_feedback) { | 56 bool send_feedback, |
| 57 QuicTime timestamp) { |
53 | 58 |
54 QuicPacketHeader header; | 59 QuicPacketHeader header; |
55 header.public_header.connection_id = connection_id_; | 60 header.public_header.connection_id = connection_id_; |
56 header.public_header.reset_flag = false; | 61 header.public_header.reset_flag = false; |
57 header.public_header.version_flag = include_version; | 62 header.public_header.version_flag = include_version; |
58 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | 63 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
59 header.packet_sequence_number = num; | 64 header.packet_sequence_number = num; |
60 header.entropy_flag = false; | 65 header.entropy_flag = false; |
61 header.fec_flag = false; | 66 header.fec_flag = false; |
62 header.fec_group = 0; | 67 header.fec_group = 0; |
63 | 68 |
64 QuicAckFrame ack(MakeAckFrame(largest_received)); | 69 QuicAckFrame ack(MakeAckFrame(largest_received)); |
65 ack.delta_time_largest_observed = QuicTime::Delta::Zero(); | 70 ack.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 71 if (version_ > QUIC_VERSION_22) { |
| 72 for (QuicPacketSequenceNumber i = least_unacked; i <= largest_received; |
| 73 ++i) { |
| 74 ack.received_packet_times.push_back(make_pair(i, timestamp)); |
| 75 } |
| 76 } |
66 QuicFrames frames; | 77 QuicFrames frames; |
67 frames.push_back(QuicFrame(&ack)); | 78 frames.push_back(QuicFrame(&ack)); |
68 QuicCongestionFeedbackFrame feedback; | 79 QuicCongestionFeedbackFrame feedback; |
69 if (send_feedback) { | 80 if (send_feedback && version_ <= QUIC_VERSION_22) { |
70 feedback.type = kTCP; | 81 feedback.type = kTCP; |
71 feedback.tcp.receive_window = 256000; | 82 feedback.tcp.receive_window = 256000; |
72 | 83 |
73 frames.push_back(QuicFrame(&feedback)); | 84 frames.push_back(QuicFrame(&feedback)); |
74 } | 85 } |
75 | 86 |
76 QuicStopWaitingFrame stop_waiting; | 87 QuicStopWaitingFrame stop_waiting; |
77 stop_waiting.least_unacked = least_unacked; | 88 stop_waiting.least_unacked = least_unacked; |
78 frames.push_back(QuicFrame(&stop_waiting)); | 89 frames.push_back(QuicFrame(&stop_waiting)); |
79 | 90 |
80 QuicRstStreamFrame rst(stream_id, error_code, 0); | 91 QuicRstStreamFrame rst(stream_id, error_code, 0); |
81 frames.push_back(QuicFrame(&rst)); | 92 frames.push_back(QuicFrame(&rst)); |
82 | 93 |
83 QuicFramer framer(SupportedVersions(version_), QuicTime::Zero(), false); | 94 QuicFramer framer(SupportedVersions(version_), timestamp, false); |
84 scoped_ptr<QuicPacket> packet( | 95 scoped_ptr<QuicPacket> packet( |
85 BuildUnsizedDataPacket(&framer, header, frames).packet); | 96 BuildUnsizedDataPacket(&framer, header, frames).packet); |
86 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket( | 97 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket( |
87 ENCRYPTION_NONE, header.packet_sequence_number, *packet)); | 98 ENCRYPTION_NONE, header.packet_sequence_number, *packet)); |
88 } | 99 } |
89 | 100 |
90 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeConnectionClosePacket( | 101 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeConnectionClosePacket( |
91 QuicPacketSequenceNumber num) { | 102 QuicPacketSequenceNumber num) { |
92 QuicPacketHeader header; | 103 QuicPacketHeader header; |
93 header.public_header.connection_id = connection_id_; | 104 header.public_header.connection_id = connection_id_; |
94 header.public_header.reset_flag = false; | 105 header.public_header.reset_flag = false; |
95 header.public_header.version_flag = false; | 106 header.public_header.version_flag = false; |
96 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | 107 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
97 header.packet_sequence_number = num; | 108 header.packet_sequence_number = num; |
98 header.entropy_flag = false; | 109 header.entropy_flag = false; |
99 header.fec_flag = false; | 110 header.fec_flag = false; |
100 header.fec_group = 0; | 111 header.fec_group = 0; |
101 | 112 |
102 QuicConnectionCloseFrame close; | 113 QuicConnectionCloseFrame close; |
103 close.error_code = QUIC_CRYPTO_VERSION_NOT_SUPPORTED; | 114 close.error_code = QUIC_CRYPTO_VERSION_NOT_SUPPORTED; |
104 close.error_details = "Time to panic!"; | 115 close.error_details = "Time to panic!"; |
105 return scoped_ptr<QuicEncryptedPacket>(MakePacket(header, QuicFrame(&close))); | 116 return scoped_ptr<QuicEncryptedPacket>(MakePacket(header, QuicFrame(&close))); |
106 } | 117 } |
107 | 118 |
108 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckPacket( | 119 scoped_ptr<QuicEncryptedPacket> QuicTestPacketMaker::MakeAckPacket( |
109 QuicPacketSequenceNumber sequence_number, | 120 QuicPacketSequenceNumber sequence_number, |
110 QuicPacketSequenceNumber largest_received, | 121 QuicPacketSequenceNumber largest_received, |
111 QuicPacketSequenceNumber least_unacked, | 122 QuicPacketSequenceNumber least_unacked, |
112 bool send_feedback) { | 123 bool send_feedback, |
| 124 QuicTime timestamp) { |
113 QuicPacketHeader header; | 125 QuicPacketHeader header; |
114 header.public_header.connection_id = connection_id_; | 126 header.public_header.connection_id = connection_id_; |
115 header.public_header.reset_flag = false; | 127 header.public_header.reset_flag = false; |
116 header.public_header.version_flag = false; | 128 header.public_header.version_flag = false; |
117 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | 129 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
118 header.packet_sequence_number = sequence_number; | 130 header.packet_sequence_number = sequence_number; |
119 header.entropy_flag = false; | 131 header.entropy_flag = false; |
120 header.fec_flag = false; | 132 header.fec_flag = false; |
121 header.fec_group = 0; | 133 header.fec_group = 0; |
122 | 134 |
123 QuicAckFrame ack(MakeAckFrame(largest_received)); | 135 QuicAckFrame ack(MakeAckFrame(largest_received)); |
124 ack.delta_time_largest_observed = QuicTime::Delta::Zero(); | 136 ack.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 137 if (version_ > QUIC_VERSION_22) { |
| 138 for (QuicPacketSequenceNumber i = least_unacked; i <= largest_received; |
| 139 ++i) { |
| 140 ack.received_packet_times.push_back(make_pair(i, timestamp)); |
| 141 } |
| 142 } |
125 | 143 |
126 QuicCongestionFeedbackFrame feedback; | 144 QuicFramer framer(SupportedVersions(version_), timestamp, false); |
127 feedback.type = kTCP; | |
128 feedback.tcp.receive_window = 256000; | |
129 | |
130 QuicFramer framer(SupportedVersions(version_), QuicTime::Zero(), false); | |
131 QuicFrames frames; | 145 QuicFrames frames; |
132 frames.push_back(QuicFrame(&ack)); | 146 frames.push_back(QuicFrame(&ack)); |
133 if (send_feedback) { | 147 QuicCongestionFeedbackFrame feedback; |
| 148 if (send_feedback && version_ <= QUIC_VERSION_22) { |
| 149 feedback.type = kTCP; |
| 150 feedback.tcp.receive_window = 256000; |
134 frames.push_back(QuicFrame(&feedback)); | 151 frames.push_back(QuicFrame(&feedback)); |
135 } | 152 } |
136 | 153 |
137 QuicStopWaitingFrame stop_waiting; | 154 QuicStopWaitingFrame stop_waiting; |
138 stop_waiting.least_unacked = least_unacked; | 155 stop_waiting.least_unacked = least_unacked; |
139 frames.push_back(QuicFrame(&stop_waiting)); | 156 frames.push_back(QuicFrame(&stop_waiting)); |
140 | 157 |
141 scoped_ptr<QuicPacket> packet( | 158 scoped_ptr<QuicPacket> packet( |
142 BuildUnsizedDataPacket(&framer, header, frames).packet); | 159 BuildUnsizedDataPacket(&framer, header, frames).packet); |
143 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket( | 160 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket( |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 header_.public_header.version_flag = should_include_version; | 253 header_.public_header.version_flag = should_include_version; |
237 header_.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | 254 header_.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
238 header_.packet_sequence_number = sequence_number; | 255 header_.packet_sequence_number = sequence_number; |
239 header_.fec_group = 0; | 256 header_.fec_group = 0; |
240 header_.entropy_flag = false; | 257 header_.entropy_flag = false; |
241 header_.fec_flag = false; | 258 header_.fec_flag = false; |
242 } | 259 } |
243 | 260 |
244 } // namespace test | 261 } // namespace test |
245 } // namespace net | 262 } // namespace net |
OLD | NEW |