OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/quic_protocol.h" | 5 #include "net/quic/quic_protocol.h" |
6 | 6 |
7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
8 #include "net/quic/quic_utils.h" | 8 #include "net/quic/quic_utils.h" |
9 | 9 |
10 using base::StringPiece; | 10 using base::StringPiece; |
11 using std::map; | 11 using std::map; |
12 using std::numeric_limits; | 12 using std::numeric_limits; |
13 using std::ostream; | 13 using std::ostream; |
14 using std::string; | 14 using std::string; |
15 | 15 |
16 namespace net { | 16 namespace net { |
17 | 17 |
18 size_t GetPacketHeaderSize(const QuicPacketHeader& header) { | 18 size_t GetPacketHeaderSize(const QuicPacketHeader& header) { |
19 return GetPacketHeaderSize(header.public_header.connection_id_length, | 19 return GetPacketHeaderSize(header.public_header.connection_id_length, |
20 header.public_header.version_flag, | 20 header.public_header.version_flag, |
21 header.public_header.sequence_number_length, | 21 header.public_header.sequence_number_length, |
22 header.is_in_fec_group); | 22 header.is_in_fec_group); |
23 } | 23 } |
24 | 24 |
25 size_t GetPacketHeaderSize(QuicConnectionIdLength connection_id_length, | 25 size_t GetPacketHeaderSize(QuicConnectionIdLength connection_id_length, |
26 bool include_version, | 26 bool include_version, |
27 QuicSequenceNumberLength sequence_number_length, | 27 QuicSequenceNumberLength sequence_number_length, |
28 InFecGroup is_in_fec_group) { | 28 InFecGroup is_in_fec_group) { |
29 return kPublicFlagsSize + connection_id_length + | 29 return kPublicFlagsSize + connection_id_length + |
30 (include_version ? kQuicVersionSize : 0) + sequence_number_length + | 30 (include_version ? kQuicVersionSize : 0) + sequence_number_length + |
31 kPrivateFlagsSize + (is_in_fec_group == IN_FEC_GROUP ? kFecGroupSize : 0); | 31 kPrivateFlagsSize + |
| 32 (is_in_fec_group == IN_FEC_GROUP ? kFecGroupSize : 0); |
32 } | 33 } |
33 | 34 |
34 size_t GetStartOfFecProtectedData( | 35 size_t GetStartOfFecProtectedData( |
35 QuicConnectionIdLength connection_id_length, | 36 QuicConnectionIdLength connection_id_length, |
36 bool include_version, | 37 bool include_version, |
37 QuicSequenceNumberLength sequence_number_length) { | 38 QuicSequenceNumberLength sequence_number_length) { |
38 return GetPacketHeaderSize(connection_id_length, | 39 return GetPacketHeaderSize(connection_id_length, |
39 include_version, | 40 include_version, |
40 sequence_number_length, | 41 sequence_number_length, |
41 IN_FEC_GROUP); | 42 IN_FEC_GROUP); |
42 } | 43 } |
43 | 44 |
44 size_t GetStartOfEncryptedData( | 45 size_t GetStartOfEncryptedData( |
45 QuicConnectionIdLength connection_id_length, | 46 QuicConnectionIdLength connection_id_length, |
46 bool include_version, | 47 bool include_version, |
47 QuicSequenceNumberLength sequence_number_length) { | 48 QuicSequenceNumberLength sequence_number_length) { |
48 // Don't include the fec size, since encryption starts before private flags. | 49 // Don't include the fec size, since encryption starts before private flags. |
49 return GetPacketHeaderSize(connection_id_length, | 50 return GetPacketHeaderSize(connection_id_length, |
50 include_version, | 51 include_version, |
51 sequence_number_length, | 52 sequence_number_length, |
52 NOT_IN_FEC_GROUP) - kPrivateFlagsSize; | 53 NOT_IN_FEC_GROUP) - |
| 54 kPrivateFlagsSize; |
53 } | 55 } |
54 | 56 |
55 QuicPacketPublicHeader::QuicPacketPublicHeader() | 57 QuicPacketPublicHeader::QuicPacketPublicHeader() |
56 : connection_id(0), | 58 : connection_id(0), |
57 connection_id_length(PACKET_8BYTE_CONNECTION_ID), | 59 connection_id_length(PACKET_8BYTE_CONNECTION_ID), |
58 reset_flag(false), | 60 reset_flag(false), |
59 version_flag(false), | 61 version_flag(false), |
60 sequence_number_length(PACKET_6BYTE_SEQUENCE_NUMBER) { | 62 sequence_number_length(PACKET_6BYTE_SEQUENCE_NUMBER) { |
61 } | 63 } |
62 | 64 |
63 QuicPacketPublicHeader::QuicPacketPublicHeader( | 65 QuicPacketPublicHeader::QuicPacketPublicHeader( |
64 const QuicPacketPublicHeader& other) | 66 const QuicPacketPublicHeader& other) |
65 : connection_id(other.connection_id), | 67 : connection_id(other.connection_id), |
66 connection_id_length(other.connection_id_length), | 68 connection_id_length(other.connection_id_length), |
67 reset_flag(other.reset_flag), | 69 reset_flag(other.reset_flag), |
68 version_flag(other.version_flag), | 70 version_flag(other.version_flag), |
69 sequence_number_length(other.sequence_number_length), | 71 sequence_number_length(other.sequence_number_length), |
70 versions(other.versions) { | 72 versions(other.versions) { |
71 } | 73 } |
72 | 74 |
73 QuicPacketPublicHeader::~QuicPacketPublicHeader() {} | 75 QuicPacketPublicHeader::~QuicPacketPublicHeader() { |
| 76 } |
74 | 77 |
75 QuicPacketHeader::QuicPacketHeader() | 78 QuicPacketHeader::QuicPacketHeader() |
76 : fec_flag(false), | 79 : fec_flag(false), |
77 entropy_flag(false), | 80 entropy_flag(false), |
78 entropy_hash(0), | 81 entropy_hash(0), |
79 packet_sequence_number(0), | 82 packet_sequence_number(0), |
80 is_in_fec_group(NOT_IN_FEC_GROUP), | 83 is_in_fec_group(NOT_IN_FEC_GROUP), |
81 fec_group(0) { | 84 fec_group(0) { |
82 } | 85 } |
83 | 86 |
84 QuicPacketHeader::QuicPacketHeader(const QuicPacketPublicHeader& header) | 87 QuicPacketHeader::QuicPacketHeader(const QuicPacketPublicHeader& header) |
85 : public_header(header), | 88 : public_header(header), |
86 fec_flag(false), | 89 fec_flag(false), |
87 entropy_flag(false), | 90 entropy_flag(false), |
88 entropy_hash(0), | 91 entropy_hash(0), |
89 packet_sequence_number(0), | 92 packet_sequence_number(0), |
90 is_in_fec_group(NOT_IN_FEC_GROUP), | 93 is_in_fec_group(NOT_IN_FEC_GROUP), |
91 fec_group(0) { | 94 fec_group(0) { |
92 } | 95 } |
93 | 96 |
94 QuicPublicResetPacket::QuicPublicResetPacket() | 97 QuicPublicResetPacket::QuicPublicResetPacket() |
95 : nonce_proof(0), | 98 : nonce_proof(0), rejected_sequence_number(0) { |
96 rejected_sequence_number(0) {} | 99 } |
97 | 100 |
98 QuicPublicResetPacket::QuicPublicResetPacket( | 101 QuicPublicResetPacket::QuicPublicResetPacket( |
99 const QuicPacketPublicHeader& header) | 102 const QuicPacketPublicHeader& header) |
100 : public_header(header), | 103 : public_header(header), nonce_proof(0), rejected_sequence_number(0) { |
101 nonce_proof(0), | 104 } |
102 rejected_sequence_number(0) {} | |
103 | 105 |
104 QuicStreamFrame::QuicStreamFrame() | 106 QuicStreamFrame::QuicStreamFrame() |
105 : stream_id(0), | 107 : stream_id(0), fin(false), offset(0), notifier(NULL) { |
106 fin(false), | 108 } |
107 offset(0), | |
108 notifier(NULL) {} | |
109 | 109 |
110 QuicStreamFrame::QuicStreamFrame(const QuicStreamFrame& frame) | 110 QuicStreamFrame::QuicStreamFrame(const QuicStreamFrame& frame) |
111 : stream_id(frame.stream_id), | 111 : stream_id(frame.stream_id), |
112 fin(frame.fin), | 112 fin(frame.fin), |
113 offset(frame.offset), | 113 offset(frame.offset), |
114 data(frame.data), | 114 data(frame.data), |
115 notifier(frame.notifier) { | 115 notifier(frame.notifier) { |
116 } | 116 } |
117 | 117 |
118 QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id, | 118 QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id, |
(...skipping 12 matching lines...) Expand all Loading... |
131 data_string->reserve(data.TotalBufferSize()); | 131 data_string->reserve(data.TotalBufferSize()); |
132 for (size_t i = 0; i < data.Size(); ++i) { | 132 for (size_t i = 0; i < data.Size(); ++i) { |
133 data_string->append(static_cast<char*>(data.iovec()[i].iov_base), | 133 data_string->append(static_cast<char*>(data.iovec()[i].iov_base), |
134 data.iovec()[i].iov_len); | 134 data.iovec()[i].iov_len); |
135 } | 135 } |
136 DCHECK_EQ(data_string->size(), data.TotalBufferSize()); | 136 DCHECK_EQ(data_string->size(), data.TotalBufferSize()); |
137 return data_string; | 137 return data_string; |
138 } | 138 } |
139 | 139 |
140 uint32 MakeQuicTag(char a, char b, char c, char d) { | 140 uint32 MakeQuicTag(char a, char b, char c, char d) { |
141 return static_cast<uint32>(a) | | 141 return static_cast<uint32>(a) | static_cast<uint32>(b) << 8 | |
142 static_cast<uint32>(b) << 8 | | 142 static_cast<uint32>(c) << 16 | static_cast<uint32>(d) << 24; |
143 static_cast<uint32>(c) << 16 | | |
144 static_cast<uint32>(d) << 24; | |
145 } | 143 } |
146 | 144 |
147 QuicVersionVector QuicSupportedVersions() { | 145 QuicVersionVector QuicSupportedVersions() { |
148 QuicVersionVector supported_versions; | 146 QuicVersionVector supported_versions; |
149 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { | 147 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { |
150 supported_versions.push_back(kSupportedQuicVersions[i]); | 148 supported_versions.push_back(kSupportedQuicVersions[i]); |
151 } | 149 } |
152 return supported_versions; | 150 return supported_versions; |
153 } | 151 } |
154 | 152 |
(...skipping 21 matching lines...) Expand all Loading... |
176 return kSupportedQuicVersions[i]; | 174 return kSupportedQuicVersions[i]; |
177 } | 175 } |
178 } | 176 } |
179 // Reading from the client so this should not be considered an ERROR. | 177 // Reading from the client so this should not be considered an ERROR. |
180 DVLOG(1) << "Unsupported QuicTag version: " | 178 DVLOG(1) << "Unsupported QuicTag version: " |
181 << QuicUtils::TagToString(version_tag); | 179 << QuicUtils::TagToString(version_tag); |
182 return QUIC_VERSION_UNSUPPORTED; | 180 return QUIC_VERSION_UNSUPPORTED; |
183 } | 181 } |
184 | 182 |
185 #define RETURN_STRING_LITERAL(x) \ | 183 #define RETURN_STRING_LITERAL(x) \ |
186 case x: \ | 184 case x: \ |
187 return #x | 185 return #x |
188 | 186 |
189 string QuicVersionToString(const QuicVersion version) { | 187 string QuicVersionToString(const QuicVersion version) { |
190 switch (version) { | 188 switch (version) { |
191 RETURN_STRING_LITERAL(QUIC_VERSION_15); | 189 RETURN_STRING_LITERAL(QUIC_VERSION_15); |
192 RETURN_STRING_LITERAL(QUIC_VERSION_16); | 190 RETURN_STRING_LITERAL(QUIC_VERSION_16); |
193 RETURN_STRING_LITERAL(QUIC_VERSION_17); | 191 RETURN_STRING_LITERAL(QUIC_VERSION_17); |
194 RETURN_STRING_LITERAL(QUIC_VERSION_18); | 192 RETURN_STRING_LITERAL(QUIC_VERSION_18); |
195 default: | 193 default: |
196 return "QUIC_VERSION_UNSUPPORTED"; | 194 return "QUIC_VERSION_UNSUPPORTED"; |
197 } | 195 } |
(...skipping 21 matching lines...) Expand all Loading... |
219 os << " version: "; | 217 os << " version: "; |
220 for (size_t i = 0; i < header.public_header.versions.size(); ++i) { | 218 for (size_t i = 0; i < header.public_header.versions.size(); ++i) { |
221 os << header.public_header.versions[0] << " "; | 219 os << header.public_header.versions[0] << " "; |
222 } | 220 } |
223 } | 221 } |
224 os << ", fec_flag: " << header.fec_flag | 222 os << ", fec_flag: " << header.fec_flag |
225 << ", entropy_flag: " << header.entropy_flag | 223 << ", entropy_flag: " << header.entropy_flag |
226 << ", entropy hash: " << static_cast<int>(header.entropy_hash) | 224 << ", entropy hash: " << static_cast<int>(header.entropy_hash) |
227 << ", sequence_number: " << header.packet_sequence_number | 225 << ", sequence_number: " << header.packet_sequence_number |
228 << ", is_in_fec_group:" << header.is_in_fec_group | 226 << ", is_in_fec_group:" << header.is_in_fec_group |
229 << ", fec_group: " << header.fec_group<< "}\n"; | 227 << ", fec_group: " << header.fec_group << "}\n"; |
230 return os; | 228 return os; |
231 } | 229 } |
232 | 230 |
233 ReceivedPacketInfo::ReceivedPacketInfo() | 231 ReceivedPacketInfo::ReceivedPacketInfo() |
234 : entropy_hash(0), | 232 : entropy_hash(0), |
235 largest_observed(0), | 233 largest_observed(0), |
236 delta_time_largest_observed(QuicTime::Delta::Infinite()), | 234 delta_time_largest_observed(QuicTime::Delta::Infinite()), |
237 is_truncated(false) {} | 235 is_truncated(false) { |
| 236 } |
238 | 237 |
239 ReceivedPacketInfo::~ReceivedPacketInfo() {} | 238 ReceivedPacketInfo::~ReceivedPacketInfo() { |
| 239 } |
240 | 240 |
241 bool IsAwaitingPacket(const ReceivedPacketInfo& received_info, | 241 bool IsAwaitingPacket(const ReceivedPacketInfo& received_info, |
242 QuicPacketSequenceNumber sequence_number) { | 242 QuicPacketSequenceNumber sequence_number) { |
243 return sequence_number > received_info.largest_observed || | 243 return sequence_number > received_info.largest_observed || |
244 ContainsKey(received_info.missing_packets, sequence_number); | 244 ContainsKey(received_info.missing_packets, sequence_number); |
245 } | 245 } |
246 | 246 |
247 void InsertMissingPacketsBetween(ReceivedPacketInfo* received_info, | 247 void InsertMissingPacketsBetween(ReceivedPacketInfo* received_info, |
248 QuicPacketSequenceNumber lower, | 248 QuicPacketSequenceNumber lower, |
249 QuicPacketSequenceNumber higher) { | 249 QuicPacketSequenceNumber higher) { |
250 for (QuicPacketSequenceNumber i = lower; i < higher; ++i) { | 250 for (QuicPacketSequenceNumber i = lower; i < higher; ++i) { |
251 received_info->missing_packets.insert(i); | 251 received_info->missing_packets.insert(i); |
252 } | 252 } |
253 } | 253 } |
254 | 254 |
255 QuicStopWaitingFrame::QuicStopWaitingFrame() | 255 QuicStopWaitingFrame::QuicStopWaitingFrame() |
256 : entropy_hash(0), | 256 : entropy_hash(0), least_unacked(0) { |
257 least_unacked(0) { | |
258 } | 257 } |
259 | 258 |
260 QuicStopWaitingFrame::~QuicStopWaitingFrame() {} | 259 QuicStopWaitingFrame::~QuicStopWaitingFrame() { |
| 260 } |
261 | 261 |
262 QuicAckFrame::QuicAckFrame() {} | 262 QuicAckFrame::QuicAckFrame() { |
| 263 } |
263 | 264 |
264 CongestionFeedbackMessageTCP::CongestionFeedbackMessageTCP() | 265 CongestionFeedbackMessageTCP::CongestionFeedbackMessageTCP() |
265 : receive_window(0) { | 266 : receive_window(0) { |
266 } | 267 } |
267 | 268 |
268 CongestionFeedbackMessageInterArrival::CongestionFeedbackMessageInterArrival() { | 269 CongestionFeedbackMessageInterArrival::CongestionFeedbackMessageInterArrival() { |
269 } | 270 } |
270 | 271 |
271 CongestionFeedbackMessageInterArrival:: | 272 CongestionFeedbackMessageInterArrival:: |
272 ~CongestionFeedbackMessageInterArrival() {} | 273 ~CongestionFeedbackMessageInterArrival() { |
| 274 } |
273 | 275 |
274 QuicCongestionFeedbackFrame::QuicCongestionFeedbackFrame() : type(kTCP) {} | 276 QuicCongestionFeedbackFrame::QuicCongestionFeedbackFrame() : type(kTCP) { |
| 277 } |
275 | 278 |
276 QuicCongestionFeedbackFrame::~QuicCongestionFeedbackFrame() {} | 279 QuicCongestionFeedbackFrame::~QuicCongestionFeedbackFrame() { |
| 280 } |
277 | 281 |
278 QuicRstStreamErrorCode AdjustErrorForVersion( | 282 QuicRstStreamErrorCode AdjustErrorForVersion(QuicRstStreamErrorCode error_code, |
279 QuicRstStreamErrorCode error_code, | 283 QuicVersion version) { |
280 QuicVersion version) { | |
281 switch (error_code) { | 284 switch (error_code) { |
282 case QUIC_RST_FLOW_CONTROL_ACCOUNTING: | 285 case QUIC_RST_FLOW_CONTROL_ACCOUNTING: |
283 if (version <= QUIC_VERSION_17) { | 286 if (version <= QUIC_VERSION_17) { |
284 return QUIC_STREAM_NO_ERROR; | 287 return QUIC_STREAM_NO_ERROR; |
285 } | 288 } |
286 break; | 289 break; |
287 default: | 290 default: |
288 return error_code; | 291 return error_code; |
289 } | 292 } |
290 return error_code; | 293 return error_code; |
291 } | 294 } |
292 | 295 |
293 QuicRstStreamFrame::QuicRstStreamFrame() | 296 QuicRstStreamFrame::QuicRstStreamFrame() |
294 : stream_id(0), | 297 : stream_id(0), error_code(QUIC_STREAM_NO_ERROR) { |
295 error_code(QUIC_STREAM_NO_ERROR) { | |
296 } | 298 } |
297 | 299 |
298 QuicRstStreamFrame::QuicRstStreamFrame(QuicStreamId stream_id, | 300 QuicRstStreamFrame::QuicRstStreamFrame(QuicStreamId stream_id, |
299 QuicRstStreamErrorCode error_code, | 301 QuicRstStreamErrorCode error_code, |
300 QuicStreamOffset bytes_written) | 302 QuicStreamOffset bytes_written) |
301 : stream_id(stream_id), | 303 : stream_id(stream_id), error_code(error_code), byte_offset(bytes_written) { |
302 error_code(error_code), | |
303 byte_offset(bytes_written) { | |
304 DCHECK_LE(error_code, numeric_limits<uint8>::max()); | 304 DCHECK_LE(error_code, numeric_limits<uint8>::max()); |
305 } | 305 } |
306 | 306 |
307 QuicConnectionCloseFrame::QuicConnectionCloseFrame() | 307 QuicConnectionCloseFrame::QuicConnectionCloseFrame() |
308 : error_code(QUIC_NO_ERROR) { | 308 : error_code(QUIC_NO_ERROR) { |
309 } | 309 } |
310 | 310 |
311 QuicFrame::QuicFrame() {} | 311 QuicFrame::QuicFrame() { |
| 312 } |
312 | 313 |
313 QuicFrame::QuicFrame(QuicPaddingFrame* padding_frame) | 314 QuicFrame::QuicFrame(QuicPaddingFrame* padding_frame) |
314 : type(PADDING_FRAME), | 315 : type(PADDING_FRAME), padding_frame(padding_frame) { |
315 padding_frame(padding_frame) { | |
316 } | 316 } |
317 | 317 |
318 QuicFrame::QuicFrame(QuicStreamFrame* stream_frame) | 318 QuicFrame::QuicFrame(QuicStreamFrame* stream_frame) |
319 : type(STREAM_FRAME), | 319 : type(STREAM_FRAME), stream_frame(stream_frame) { |
320 stream_frame(stream_frame) { | |
321 } | 320 } |
322 | 321 |
323 QuicFrame::QuicFrame(QuicAckFrame* frame) | 322 QuicFrame::QuicFrame(QuicAckFrame* frame) : type(ACK_FRAME), ack_frame(frame) { |
324 : type(ACK_FRAME), | |
325 ack_frame(frame) { | |
326 } | 323 } |
327 | 324 |
328 QuicFrame::QuicFrame(QuicCongestionFeedbackFrame* frame) | 325 QuicFrame::QuicFrame(QuicCongestionFeedbackFrame* frame) |
329 : type(CONGESTION_FEEDBACK_FRAME), | 326 : type(CONGESTION_FEEDBACK_FRAME), congestion_feedback_frame(frame) { |
330 congestion_feedback_frame(frame) { | |
331 } | 327 } |
332 | 328 |
333 QuicFrame::QuicFrame(QuicStopWaitingFrame* frame) | 329 QuicFrame::QuicFrame(QuicStopWaitingFrame* frame) |
334 : type(STOP_WAITING_FRAME), | 330 : type(STOP_WAITING_FRAME), stop_waiting_frame(frame) { |
335 stop_waiting_frame(frame) { | |
336 } | 331 } |
337 | 332 |
338 QuicFrame::QuicFrame(QuicPingFrame* frame) | 333 QuicFrame::QuicFrame(QuicPingFrame* frame) |
339 : type(PING_FRAME), | 334 : type(PING_FRAME), ping_frame(frame) { |
340 ping_frame(frame) { | |
341 } | 335 } |
342 | 336 |
343 QuicFrame::QuicFrame(QuicRstStreamFrame* frame) | 337 QuicFrame::QuicFrame(QuicRstStreamFrame* frame) |
344 : type(RST_STREAM_FRAME), | 338 : type(RST_STREAM_FRAME), rst_stream_frame(frame) { |
345 rst_stream_frame(frame) { | |
346 } | 339 } |
347 | 340 |
348 QuicFrame::QuicFrame(QuicConnectionCloseFrame* frame) | 341 QuicFrame::QuicFrame(QuicConnectionCloseFrame* frame) |
349 : type(CONNECTION_CLOSE_FRAME), | 342 : type(CONNECTION_CLOSE_FRAME), connection_close_frame(frame) { |
350 connection_close_frame(frame) { | |
351 } | 343 } |
352 | 344 |
353 QuicFrame::QuicFrame(QuicGoAwayFrame* frame) | 345 QuicFrame::QuicFrame(QuicGoAwayFrame* frame) |
354 : type(GOAWAY_FRAME), | 346 : type(GOAWAY_FRAME), goaway_frame(frame) { |
355 goaway_frame(frame) { | |
356 } | 347 } |
357 | 348 |
358 QuicFrame::QuicFrame(QuicWindowUpdateFrame* frame) | 349 QuicFrame::QuicFrame(QuicWindowUpdateFrame* frame) |
359 : type(WINDOW_UPDATE_FRAME), | 350 : type(WINDOW_UPDATE_FRAME), window_update_frame(frame) { |
360 window_update_frame(frame) { | |
361 } | 351 } |
362 | 352 |
363 QuicFrame::QuicFrame(QuicBlockedFrame* frame) | 353 QuicFrame::QuicFrame(QuicBlockedFrame* frame) |
364 : type(BLOCKED_FRAME), | 354 : type(BLOCKED_FRAME), blocked_frame(frame) { |
365 blocked_frame(frame) { | |
366 } | 355 } |
367 | 356 |
368 QuicFecData::QuicFecData() : fec_group(0) {} | 357 QuicFecData::QuicFecData() : fec_group(0) { |
| 358 } |
369 | 359 |
370 ostream& operator<<(ostream& os, const QuicStopWaitingFrame& sent_info) { | 360 ostream& operator<<(ostream& os, const QuicStopWaitingFrame& sent_info) { |
371 os << "entropy_hash: " << static_cast<int>(sent_info.entropy_hash) | 361 os << "entropy_hash: " << static_cast<int>(sent_info.entropy_hash) |
372 << " least_unacked: " << sent_info.least_unacked; | 362 << " least_unacked: " << sent_info.least_unacked; |
373 return os; | 363 return os; |
374 } | 364 } |
375 | 365 |
376 ostream& operator<<(ostream& os, const ReceivedPacketInfo& received_info) { | 366 ostream& operator<<(ostream& os, const ReceivedPacketInfo& received_info) { |
377 os << "entropy_hash: " << static_cast<int>(received_info.entropy_hash) | 367 os << "entropy_hash: " << static_cast<int>(received_info.entropy_hash) |
378 << " is_truncated: " << received_info.is_truncated | 368 << " is_truncated: " << received_info.is_truncated |
379 << " largest_observed: " << received_info.largest_observed | 369 << " largest_observed: " << received_info.largest_observed |
380 << " delta_time_largest_observed: " | 370 << " delta_time_largest_observed: " |
381 << received_info.delta_time_largest_observed.ToMicroseconds() | 371 << received_info.delta_time_largest_observed.ToMicroseconds() |
382 << " missing_packets: [ "; | 372 << " missing_packets: [ "; |
383 for (SequenceNumberSet::const_iterator it = | 373 for (SequenceNumberSet::const_iterator it = |
384 received_info.missing_packets.begin(); | 374 received_info.missing_packets.begin(); |
385 it != received_info.missing_packets.end(); ++it) { | 375 it != received_info.missing_packets.end(); |
| 376 ++it) { |
386 os << *it << " "; | 377 os << *it << " "; |
387 } | 378 } |
388 os << " ] revived_packets: [ "; | 379 os << " ] revived_packets: [ "; |
389 for (SequenceNumberSet::const_iterator it = | 380 for (SequenceNumberSet::const_iterator it = |
390 received_info.revived_packets.begin(); | 381 received_info.revived_packets.begin(); |
391 it != received_info.revived_packets.end(); ++it) { | 382 it != received_info.revived_packets.end(); |
| 383 ++it) { |
392 os << *it << " "; | 384 os << *it << " "; |
393 } | 385 } |
394 os << " ]"; | 386 os << " ]"; |
395 return os; | 387 return os; |
396 } | 388 } |
397 | 389 |
398 ostream& operator<<(ostream& os, const QuicFrame& frame) { | 390 ostream& operator<<(ostream& os, const QuicFrame& frame) { |
399 switch (frame.type) { | 391 switch (frame.type) { |
400 case PADDING_FRAME: { | 392 case PADDING_FRAME: { |
401 os << "type { PADDING_FRAME } "; | 393 os << "type { PADDING_FRAME } "; |
402 break; | 394 break; |
403 } | 395 } |
404 case RST_STREAM_FRAME: { | 396 case RST_STREAM_FRAME: { |
405 os << "type { " << RST_STREAM_FRAME << " } " << *(frame.rst_stream_frame); | 397 os << "type { " << RST_STREAM_FRAME << " } " << *(frame.rst_stream_frame); |
406 break; | 398 break; |
407 } | 399 } |
408 case CONNECTION_CLOSE_FRAME: { | 400 case CONNECTION_CLOSE_FRAME: { |
409 os << "type { CONNECTION_CLOSE_FRAME } " | 401 os << "type { CONNECTION_CLOSE_FRAME } " |
410 << *(frame.connection_close_frame); | 402 << *(frame.connection_close_frame); |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 ostream& operator<<(ostream& os, | 491 ostream& operator<<(ostream& os, |
500 const QuicCongestionFeedbackFrame& congestion_frame) { | 492 const QuicCongestionFeedbackFrame& congestion_frame) { |
501 os << "type: " << congestion_frame.type; | 493 os << "type: " << congestion_frame.type; |
502 switch (congestion_frame.type) { | 494 switch (congestion_frame.type) { |
503 case kInterArrival: { | 495 case kInterArrival: { |
504 const CongestionFeedbackMessageInterArrival& inter_arrival = | 496 const CongestionFeedbackMessageInterArrival& inter_arrival = |
505 congestion_frame.inter_arrival; | 497 congestion_frame.inter_arrival; |
506 os << " received packets: [ "; | 498 os << " received packets: [ "; |
507 for (TimeMap::const_iterator it = | 499 for (TimeMap::const_iterator it = |
508 inter_arrival.received_packet_times.begin(); | 500 inter_arrival.received_packet_times.begin(); |
509 it != inter_arrival.received_packet_times.end(); ++it) { | 501 it != inter_arrival.received_packet_times.end(); |
| 502 ++it) { |
510 os << it->first << "@" << it->second.ToDebuggingValue() << " "; | 503 os << it->first << "@" << it->second.ToDebuggingValue() << " "; |
511 } | 504 } |
512 os << "]"; | 505 os << "]"; |
513 break; | 506 break; |
514 } | 507 } |
515 case kFixRate: { | 508 case kFixRate: { |
516 os << " bitrate_in_bytes_per_second: " | 509 os << " bitrate_in_bytes_per_second: " |
517 << congestion_frame.fix_rate.bitrate.ToBytesPerSecond(); | 510 << congestion_frame.fix_rate.bitrate.ToBytesPerSecond(); |
518 break; | 511 break; |
519 } | 512 } |
520 case kTCP: { | 513 case kTCP: { |
521 const CongestionFeedbackMessageTCP& tcp = congestion_frame.tcp; | 514 const CongestionFeedbackMessageTCP& tcp = congestion_frame.tcp; |
522 os << " receive_window: " << tcp.receive_window; | 515 os << " receive_window: " << tcp.receive_window; |
523 break; | 516 break; |
524 } | 517 } |
525 } | 518 } |
526 return os; | 519 return os; |
527 } | 520 } |
528 | 521 |
529 CongestionFeedbackMessageFixRate::CongestionFeedbackMessageFixRate() | 522 CongestionFeedbackMessageFixRate::CongestionFeedbackMessageFixRate() |
530 : bitrate(QuicBandwidth::Zero()) { | 523 : bitrate(QuicBandwidth::Zero()) { |
531 } | 524 } |
532 | 525 |
533 QuicGoAwayFrame::QuicGoAwayFrame() | 526 QuicGoAwayFrame::QuicGoAwayFrame() |
534 : error_code(QUIC_NO_ERROR), | 527 : error_code(QUIC_NO_ERROR), last_good_stream_id(0) { |
535 last_good_stream_id(0) { | |
536 } | 528 } |
537 | 529 |
538 QuicGoAwayFrame::QuicGoAwayFrame(QuicErrorCode error_code, | 530 QuicGoAwayFrame::QuicGoAwayFrame(QuicErrorCode error_code, |
539 QuicStreamId last_good_stream_id, | 531 QuicStreamId last_good_stream_id, |
540 const string& reason) | 532 const string& reason) |
541 : error_code(error_code), | 533 : error_code(error_code), |
542 last_good_stream_id(last_good_stream_id), | 534 last_good_stream_id(last_good_stream_id), |
543 reason_phrase(reason) { | 535 reason_phrase(reason) { |
544 DCHECK_LE(error_code, numeric_limits<uint8>::max()); | 536 DCHECK_LE(error_code, numeric_limits<uint8>::max()); |
545 } | 537 } |
546 | 538 |
547 QuicData::QuicData(const char* buffer, | 539 QuicData::QuicData(const char* buffer, size_t length) |
548 size_t length) | 540 : buffer_(buffer), length_(length), owns_buffer_(false) { |
549 : buffer_(buffer), | |
550 length_(length), | |
551 owns_buffer_(false) { | |
552 } | 541 } |
553 | 542 |
554 QuicData::QuicData(char* buffer, | 543 QuicData::QuicData(char* buffer, size_t length, bool owns_buffer) |
555 size_t length, | 544 : buffer_(buffer), length_(length), owns_buffer_(owns_buffer) { |
556 bool owns_buffer) | |
557 : buffer_(buffer), | |
558 length_(length), | |
559 owns_buffer_(owns_buffer) { | |
560 } | 545 } |
561 | 546 |
562 QuicData::~QuicData() { | 547 QuicData::~QuicData() { |
563 if (owns_buffer_) { | 548 if (owns_buffer_) { |
564 delete [] const_cast<char*>(buffer_); | 549 delete[] const_cast<char*>(buffer_); |
565 } | 550 } |
566 } | 551 } |
567 | 552 |
568 QuicWindowUpdateFrame::QuicWindowUpdateFrame(QuicStreamId stream_id, | 553 QuicWindowUpdateFrame::QuicWindowUpdateFrame(QuicStreamId stream_id, |
569 QuicStreamOffset byte_offset) | 554 QuicStreamOffset byte_offset) |
570 : stream_id(stream_id), | 555 : stream_id(stream_id), byte_offset(byte_offset) { |
571 byte_offset(byte_offset) {} | 556 } |
572 | 557 |
573 QuicBlockedFrame::QuicBlockedFrame(QuicStreamId stream_id) | 558 QuicBlockedFrame::QuicBlockedFrame(QuicStreamId stream_id) |
574 : stream_id(stream_id) {} | 559 : stream_id(stream_id) { |
| 560 } |
575 | 561 |
576 QuicPacket::QuicPacket(char* buffer, | 562 QuicPacket::QuicPacket(char* buffer, |
577 size_t length, | 563 size_t length, |
578 bool owns_buffer, | 564 bool owns_buffer, |
579 QuicConnectionIdLength connection_id_length, | 565 QuicConnectionIdLength connection_id_length, |
580 bool includes_version, | 566 bool includes_version, |
581 QuicSequenceNumberLength sequence_number_length, | 567 QuicSequenceNumberLength sequence_number_length, |
582 bool is_fec_packet) | 568 bool is_fec_packet) |
583 : QuicData(buffer, length, owns_buffer), | 569 : QuicData(buffer, length, owns_buffer), |
584 buffer_(buffer), | 570 buffer_(buffer), |
585 is_fec_packet_(is_fec_packet), | 571 is_fec_packet_(is_fec_packet), |
586 connection_id_length_(connection_id_length), | 572 connection_id_length_(connection_id_length), |
587 includes_version_(includes_version), | 573 includes_version_(includes_version), |
588 sequence_number_length_(sequence_number_length) { | 574 sequence_number_length_(sequence_number_length) { |
589 } | 575 } |
590 | 576 |
591 QuicEncryptedPacket::QuicEncryptedPacket(const char* buffer, | 577 QuicEncryptedPacket::QuicEncryptedPacket(const char* buffer, size_t length) |
592 size_t length) | |
593 : QuicData(buffer, length) { | 578 : QuicData(buffer, length) { |
594 } | 579 } |
595 | 580 |
596 QuicEncryptedPacket::QuicEncryptedPacket(char* buffer, | 581 QuicEncryptedPacket::QuicEncryptedPacket(char* buffer, |
597 size_t length, | 582 size_t length, |
598 bool owns_buffer) | 583 bool owns_buffer) |
599 : QuicData(buffer, length, owns_buffer) { | 584 : QuicData(buffer, length, owns_buffer) { |
600 } | 585 } |
601 | 586 |
602 StringPiece QuicPacket::FecProtectedData() const { | 587 StringPiece QuicPacket::FecProtectedData() const { |
603 const size_t start_of_fec = GetStartOfFecProtectedData( | 588 const size_t start_of_fec = GetStartOfFecProtectedData( |
604 connection_id_length_, includes_version_, sequence_number_length_); | 589 connection_id_length_, includes_version_, sequence_number_length_); |
605 return StringPiece(data() + start_of_fec, length() - start_of_fec); | 590 return StringPiece(data() + start_of_fec, length() - start_of_fec); |
606 } | 591 } |
607 | 592 |
608 StringPiece QuicPacket::AssociatedData() const { | 593 StringPiece QuicPacket::AssociatedData() const { |
609 return StringPiece( | 594 return StringPiece( |
610 data() + kStartOfHashData, | 595 data() + kStartOfHashData, |
611 GetStartOfEncryptedData( | 596 GetStartOfEncryptedData( |
612 connection_id_length_, includes_version_, sequence_number_length_) - | 597 connection_id_length_, includes_version_, sequence_number_length_) - |
613 kStartOfHashData); | 598 kStartOfHashData); |
614 } | 599 } |
615 | 600 |
616 StringPiece QuicPacket::BeforePlaintext() const { | 601 StringPiece QuicPacket::BeforePlaintext() const { |
617 return StringPiece(data(), GetStartOfEncryptedData(connection_id_length_, | 602 return StringPiece( |
618 includes_version_, | 603 data(), |
619 sequence_number_length_)); | 604 GetStartOfEncryptedData( |
| 605 connection_id_length_, includes_version_, sequence_number_length_)); |
620 } | 606 } |
621 | 607 |
622 StringPiece QuicPacket::Plaintext() const { | 608 StringPiece QuicPacket::Plaintext() const { |
623 const size_t start_of_encrypted_data = | 609 const size_t start_of_encrypted_data = GetStartOfEncryptedData( |
624 GetStartOfEncryptedData( | 610 connection_id_length_, includes_version_, sequence_number_length_); |
625 connection_id_length_, includes_version_, sequence_number_length_); | |
626 return StringPiece(data() + start_of_encrypted_data, | 611 return StringPiece(data() + start_of_encrypted_data, |
627 length() - start_of_encrypted_data); | 612 length() - start_of_encrypted_data); |
628 } | 613 } |
629 | 614 |
630 RetransmittableFrames::RetransmittableFrames() | 615 RetransmittableFrames::RetransmittableFrames() |
631 : encryption_level_(NUM_ENCRYPTION_LEVELS) { | 616 : encryption_level_(NUM_ENCRYPTION_LEVELS) { |
632 } | 617 } |
633 | 618 |
634 RetransmittableFrames::~RetransmittableFrames() { | 619 RetransmittableFrames::~RetransmittableFrames() { |
635 for (QuicFrames::iterator it = frames_.begin(); it != frames_.end(); ++it) { | 620 for (QuicFrames::iterator it = frames_.begin(); it != frames_.end(); ++it) { |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 QuicPacket* packet, | 698 QuicPacket* packet, |
714 QuicPacketEntropyHash entropy_hash, | 699 QuicPacketEntropyHash entropy_hash, |
715 RetransmittableFrames* retransmittable_frames) | 700 RetransmittableFrames* retransmittable_frames) |
716 : sequence_number(sequence_number), | 701 : sequence_number(sequence_number), |
717 sequence_number_length(sequence_number_length), | 702 sequence_number_length(sequence_number_length), |
718 packet(packet), | 703 packet(packet), |
719 entropy_hash(entropy_hash), | 704 entropy_hash(entropy_hash), |
720 retransmittable_frames(retransmittable_frames) { | 705 retransmittable_frames(retransmittable_frames) { |
721 } | 706 } |
722 | 707 |
723 SerializedPacket::~SerializedPacket() {} | 708 SerializedPacket::~SerializedPacket() { |
| 709 } |
724 | 710 |
725 QuicEncryptedPacket* QuicEncryptedPacket::Clone() const { | 711 QuicEncryptedPacket* QuicEncryptedPacket::Clone() const { |
726 char* buffer = new char[this->length()]; | 712 char* buffer = new char[this->length()]; |
727 memcpy(buffer, this->data(), this->length()); | 713 memcpy(buffer, this->data(), this->length()); |
728 return new QuicEncryptedPacket(buffer, this->length(), true); | 714 return new QuicEncryptedPacket(buffer, this->length(), true); |
729 } | 715 } |
730 | 716 |
731 ostream& operator<<(ostream& os, const QuicEncryptedPacket& s) { | 717 ostream& operator<<(ostream& os, const QuicEncryptedPacket& s) { |
732 os << s.length() << "-byte data"; | 718 os << s.length() << "-byte data"; |
733 return os; | 719 return os; |
734 } | 720 } |
735 | 721 |
736 QuicConsumedData::QuicConsumedData(size_t bytes_consumed, | 722 QuicConsumedData::QuicConsumedData(size_t bytes_consumed, bool fin_consumed) |
737 bool fin_consumed) | 723 : bytes_consumed(bytes_consumed), fin_consumed(fin_consumed) { |
738 : bytes_consumed(bytes_consumed), | |
739 fin_consumed(fin_consumed) { | |
740 } | 724 } |
741 | 725 |
742 ostream& operator<<(ostream& os, const QuicConsumedData& s) { | 726 ostream& operator<<(ostream& os, const QuicConsumedData& s) { |
743 os << "bytes_consumed: " << s.bytes_consumed | 727 os << "bytes_consumed: " << s.bytes_consumed |
744 << " fin_consumed: " << s.fin_consumed; | 728 << " fin_consumed: " << s.fin_consumed; |
745 return os; | 729 return os; |
746 } | 730 } |
747 | 731 |
748 WriteResult::WriteResult() | 732 WriteResult::WriteResult() : status(WRITE_STATUS_ERROR), bytes_written(0) { |
749 : status(WRITE_STATUS_ERROR), | |
750 bytes_written(0) { | |
751 } | 733 } |
752 | 734 |
753 WriteResult::WriteResult(WriteStatus status, | 735 WriteResult::WriteResult(WriteStatus status, int bytes_written_or_error_code) |
754 int bytes_written_or_error_code) | 736 : status(status), bytes_written(bytes_written_or_error_code) { |
755 : status(status), | |
756 bytes_written(bytes_written_or_error_code) { | |
757 } | 737 } |
758 | 738 |
759 } // namespace net | 739 } // namespace net |
OLD | NEW |