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

Side by Side Diff: net/quic/quic_protocol.h

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months 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
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 #ifndef NET_QUIC_QUIC_PROTOCOL_H_ 5 #ifndef NET_QUIC_QUIC_PROTOCOL_H_
6 #define NET_QUIC_QUIC_PROTOCOL_H_ 6 #define NET_QUIC_QUIC_PROTOCOL_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <limits> 9 #include <limits>
10 #include <map> 10 #include <map>
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 const QuicHeaderId kMaxHeaderIdDelta = 200; 96 const QuicHeaderId kMaxHeaderIdDelta = 200;
97 97
98 // Reserved ID for the crypto stream. 98 // Reserved ID for the crypto stream.
99 const QuicStreamId kCryptoStreamId = 1; 99 const QuicStreamId kCryptoStreamId = 1;
100 100
101 // Reserved ID for the headers stream. 101 // Reserved ID for the headers stream.
102 const QuicStreamId kHeadersStreamId = 3; 102 const QuicStreamId kHeadersStreamId = 3;
103 103
104 // This is the default network timeout a for connection till the crypto 104 // This is the default network timeout a for connection till the crypto
105 // handshake succeeds and the negotiated timeout from the handshake is received. 105 // handshake succeeds and the negotiated timeout from the handshake is received.
106 const int64 kDefaultInitialTimeoutSecs = 120; // 2 mins. 106 const int64 kDefaultInitialTimeoutSecs = 120; // 2 mins.
107 const int64 kDefaultTimeoutSecs = 60 * 10; // 10 minutes. 107 const int64 kDefaultTimeoutSecs = 60 * 10; // 10 minutes.
108 const int64 kDefaultMaxTimeForCryptoHandshakeSecs = 5; // 5 secs. 108 const int64 kDefaultMaxTimeForCryptoHandshakeSecs = 5; // 5 secs.
109 109
110 // Default ping timeout. 110 // Default ping timeout.
111 const int64 kPingTimeoutSecs = 15; // 15 secs. 111 const int64 kPingTimeoutSecs = 15; // 15 secs.
112 112
113 // We define an unsigned 16-bit floating point value, inspired by IEEE floats 113 // We define an unsigned 16-bit floating point value, inspired by IEEE floats
114 // (http://en.wikipedia.org/wiki/Half_precision_floating-point_format), 114 // (http://en.wikipedia.org/wiki/Half_precision_floating-point_format),
115 // with 5-bit exponent (bias 1), 11-bit mantissa (effective 12 with hidden 115 // with 5-bit exponent (bias 1), 11-bit mantissa (effective 12 with hidden
116 // bit) and denormals, but without signs, transfinites or fractions. Wire format 116 // bit) and denormals, but without signs, transfinites or fractions. Wire format
117 // 16 bits (little-endian byte order) are split into exponent (high 5) and 117 // 16 bits (little-endian byte order) are split into exponent (high 5) and
118 // mantissa (low 11) and decoded as: 118 // mantissa (low 11) and decoded as:
119 // uint64 value; 119 // uint64 value;
120 // if (exponent == 0) value = mantissa; 120 // if (exponent == 0) value = mantissa;
121 // else value = (mantissa | 1 << 11) << (exponent - 1) 121 // else value = (mantissa | 1 << 11) << (exponent - 1)
122 const int kUFloat16ExponentBits = 5; 122 const int kUFloat16ExponentBits = 5;
123 const int kUFloat16MaxExponent = (1 << kUFloat16ExponentBits) - 2; // 30 123 const int kUFloat16MaxExponent = (1 << kUFloat16ExponentBits) - 2; // 30
124 const int kUFloat16MantissaBits = 16 - kUFloat16ExponentBits; // 11 124 const int kUFloat16MantissaBits = 16 - kUFloat16ExponentBits; // 11
125 const int kUFloat16MantissaEffectiveBits = kUFloat16MantissaBits + 1; // 12 125 const int kUFloat16MantissaEffectiveBits = kUFloat16MantissaBits + 1; // 12
126 const uint64 kUFloat16MaxValue = // 0x3FFC0000000 126 const uint64 kUFloat16MaxValue = // 0x3FFC0000000
127 ((GG_UINT64_C(1) << kUFloat16MantissaEffectiveBits) - 1) << 127 ((GG_UINT64_C(1) << kUFloat16MantissaEffectiveBits) - 1)
128 kUFloat16MaxExponent; 128 << kUFloat16MaxExponent;
129 129
130 enum TransmissionType { 130 enum TransmissionType {
131 NOT_RETRANSMISSION, 131 NOT_RETRANSMISSION,
132 FIRST_TRANSMISSION_TYPE = NOT_RETRANSMISSION, 132 FIRST_TRANSMISSION_TYPE = NOT_RETRANSMISSION,
133 HANDSHAKE_RETRANSMISSION, // Retransmits due to handshake timeouts. 133 HANDSHAKE_RETRANSMISSION, // Retransmits due to handshake timeouts.
134 ALL_UNACKED_RETRANSMISSION, // Retransmits of all unacked packets. 134 ALL_UNACKED_RETRANSMISSION, // Retransmits of all unacked packets.
135 LOSS_RETRANSMISSION, // Retransmits due to loss detection. 135 LOSS_RETRANSMISSION, // Retransmits due to loss detection.
136 RTO_RETRANSMISSION, // Retransmits due to retransmit time out. 136 RTO_RETRANSMISSION, // Retransmits due to retransmit time out.
137 TLP_RETRANSMISSION, // Tail loss probes. 137 TLP_RETRANSMISSION, // Tail loss probes.
138 LAST_TRANSMISSION_TYPE = TLP_RETRANSMISSION, 138 LAST_TRANSMISSION_TYPE = TLP_RETRANSMISSION,
139 }; 139 };
140 140
141 enum RetransmissionType { 141 enum RetransmissionType { INITIAL_ENCRYPTION_ONLY, ALL_PACKETS };
142 INITIAL_ENCRYPTION_ONLY,
143 ALL_PACKETS
144 };
145 142
146 enum HasRetransmittableData { 143 enum HasRetransmittableData {
147 NO_RETRANSMITTABLE_DATA, 144 NO_RETRANSMITTABLE_DATA,
148 HAS_RETRANSMITTABLE_DATA, 145 HAS_RETRANSMITTABLE_DATA,
149 }; 146 };
150 147
151 enum IsHandshake { 148 enum IsHandshake { NOT_HANDSHAKE, IS_HANDSHAKE };
152 NOT_HANDSHAKE,
153 IS_HANDSHAKE
154 };
155 149
156 enum QuicFrameType { 150 enum QuicFrameType {
157 // Regular frame types. The values set here cannot change without the 151 // Regular frame types. The values set here cannot change without the
158 // introduction of a new QUIC version. 152 // introduction of a new QUIC version.
159 PADDING_FRAME = 0, 153 PADDING_FRAME = 0,
160 RST_STREAM_FRAME = 1, 154 RST_STREAM_FRAME = 1,
161 CONNECTION_CLOSE_FRAME = 2, 155 CONNECTION_CLOSE_FRAME = 2,
162 GOAWAY_FRAME = 3, 156 GOAWAY_FRAME = 3,
163 WINDOW_UPDATE_FRAME = 4, 157 WINDOW_UPDATE_FRAME = 4,
164 BLOCKED_FRAME = 5, 158 BLOCKED_FRAME = 5,
(...skipping 22 matching lines...) Expand all
187 181
188 enum QuicSequenceNumberLength { 182 enum QuicSequenceNumberLength {
189 PACKET_1BYTE_SEQUENCE_NUMBER = 1, 183 PACKET_1BYTE_SEQUENCE_NUMBER = 1,
190 PACKET_2BYTE_SEQUENCE_NUMBER = 2, 184 PACKET_2BYTE_SEQUENCE_NUMBER = 2,
191 PACKET_4BYTE_SEQUENCE_NUMBER = 4, 185 PACKET_4BYTE_SEQUENCE_NUMBER = 4,
192 PACKET_6BYTE_SEQUENCE_NUMBER = 6 186 PACKET_6BYTE_SEQUENCE_NUMBER = 6
193 }; 187 };
194 188
195 // Used to indicate a QuicSequenceNumberLength using two flag bits. 189 // Used to indicate a QuicSequenceNumberLength using two flag bits.
196 enum QuicSequenceNumberLengthFlags { 190 enum QuicSequenceNumberLengthFlags {
197 PACKET_FLAGS_1BYTE_SEQUENCE = 0, // 00 191 PACKET_FLAGS_1BYTE_SEQUENCE = 0, // 00
198 PACKET_FLAGS_2BYTE_SEQUENCE = 1, // 01 192 PACKET_FLAGS_2BYTE_SEQUENCE = 1, // 01
199 PACKET_FLAGS_4BYTE_SEQUENCE = 1 << 1, // 10 193 PACKET_FLAGS_4BYTE_SEQUENCE = 1 << 1, // 10
200 PACKET_FLAGS_6BYTE_SEQUENCE = 1 << 1 | 1, // 11 194 PACKET_FLAGS_6BYTE_SEQUENCE = 1 << 1 | 1, // 11
201 }; 195 };
202 196
203 // The public flags are specified in one byte. 197 // The public flags are specified in one byte.
204 enum QuicPacketPublicFlags { 198 enum QuicPacketPublicFlags {
205 PACKET_PUBLIC_FLAGS_NONE = 0, 199 PACKET_PUBLIC_FLAGS_NONE = 0,
206 200
207 // Bit 0: Does the packet header contains version info? 201 // Bit 0: Does the packet header contains version info?
208 PACKET_PUBLIC_FLAGS_VERSION = 1 << 0, 202 PACKET_PUBLIC_FLAGS_VERSION = 1 << 0,
209 203
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 247
254 // The available versions of QUIC. Guaranteed that the integer value of the enum 248 // The available versions of QUIC. Guaranteed that the integer value of the enum
255 // will match the version number. 249 // will match the version number.
256 // When adding a new version to this enum you should add it to 250 // When adding a new version to this enum you should add it to
257 // kSupportedQuicVersions (if appropriate), and also add a new case to the 251 // kSupportedQuicVersions (if appropriate), and also add a new case to the
258 // helper methods QuicVersionToQuicTag, QuicTagToQuicVersion, and 252 // helper methods QuicVersionToQuicTag, QuicTagToQuicVersion, and
259 // QuicVersionToString. 253 // QuicVersionToString.
260 enum QuicVersion { 254 enum QuicVersion {
261 // Special case to indicate unknown/unsupported QUIC version. 255 // Special case to indicate unknown/unsupported QUIC version.
262 QUIC_VERSION_UNSUPPORTED = 0, 256 QUIC_VERSION_UNSUPPORTED = 0,
263
264 QUIC_VERSION_15 = 15, 257 QUIC_VERSION_15 = 15,
265 QUIC_VERSION_16 = 16, 258 QUIC_VERSION_16 = 16,
266 QUIC_VERSION_17 = 17, 259 QUIC_VERSION_17 = 17,
267 QUIC_VERSION_18 = 18, // Current version. 260 QUIC_VERSION_18 = 18, // Current version.
268 }; 261 };
269 262
270 // This vector contains QUIC versions which we currently support. 263 // This vector contains QUIC versions which we currently support.
271 // This should be ordered such that the highest supported version is the first 264 // This should be ordered such that the highest supported version is the first
272 // element, with subsequent elements in descending order (versions can be 265 // element, with subsequent elements in descending order (versions can be
273 // skipped as necessary). 266 // skipped as necessary).
274 // 267 //
275 // IMPORTANT: if you are addding to this list, follow the instructions at 268 // IMPORTANT: if you are addding to this list, follow the instructions at
276 // http://sites/quic/adding-and-removing-versions 269 // http://sites/quic/adding-and-removing-versions
277 static const QuicVersion kSupportedQuicVersions[] = {QUIC_VERSION_18, 270 static const QuicVersion kSupportedQuicVersions[] = {
278 QUIC_VERSION_17, 271 QUIC_VERSION_18, QUIC_VERSION_17, QUIC_VERSION_16, QUIC_VERSION_15};
279 QUIC_VERSION_16,
280 QUIC_VERSION_15};
281 272
282 typedef std::vector<QuicVersion> QuicVersionVector; 273 typedef std::vector<QuicVersion> QuicVersionVector;
283 274
284 // Returns a vector of QUIC versions in kSupportedQuicVersions. 275 // Returns a vector of QUIC versions in kSupportedQuicVersions.
285 NET_EXPORT_PRIVATE QuicVersionVector QuicSupportedVersions(); 276 NET_EXPORT_PRIVATE QuicVersionVector QuicSupportedVersions();
286 277
287 // QuicTag is written to and read from the wire, but we prefer to use 278 // QuicTag is written to and read from the wire, but we prefer to use
288 // the more readable QuicVersion at other levels. 279 // the more readable QuicVersion at other levels.
289 // Helper function which translates from a QuicVersion to a QuicTag. Returns 0 280 // Helper function which translates from a QuicVersion to a QuicTag. Returns 0
290 // if QuicVersion is unsupported. 281 // if QuicVersion is unsupported.
(...skipping 19 matching lines...) Expand all
310 // stored in memory as a little endian uint32, we need 301 // stored in memory as a little endian uint32, we need
311 // to reverse the order of the bytes. 302 // to reverse the order of the bytes.
312 303
313 // MakeQuicTag returns a value given the four bytes. For example: 304 // MakeQuicTag returns a value given the four bytes. For example:
314 // MakeQuicTag('C', 'H', 'L', 'O'); 305 // MakeQuicTag('C', 'H', 'L', 'O');
315 NET_EXPORT_PRIVATE QuicTag MakeQuicTag(char a, char b, char c, char d); 306 NET_EXPORT_PRIVATE QuicTag MakeQuicTag(char a, char b, char c, char d);
316 307
317 // Size in bytes of the data or fec packet header. 308 // Size in bytes of the data or fec packet header.
318 NET_EXPORT_PRIVATE size_t GetPacketHeaderSize(const QuicPacketHeader& header); 309 NET_EXPORT_PRIVATE size_t GetPacketHeaderSize(const QuicPacketHeader& header);
319 310
320 NET_EXPORT_PRIVATE size_t GetPacketHeaderSize( 311 NET_EXPORT_PRIVATE size_t
321 QuicConnectionIdLength connection_id_length, 312 GetPacketHeaderSize(QuicConnectionIdLength connection_id_length,
322 bool include_version, 313 bool include_version,
323 QuicSequenceNumberLength sequence_number_length, 314 QuicSequenceNumberLength sequence_number_length,
324 InFecGroup is_in_fec_group); 315 InFecGroup is_in_fec_group);
325 316
326 // Index of the first byte in a QUIC packet of FEC protected data. 317 // Index of the first byte in a QUIC packet of FEC protected data.
327 NET_EXPORT_PRIVATE size_t GetStartOfFecProtectedData( 318 NET_EXPORT_PRIVATE size_t
328 QuicConnectionIdLength connection_id_length, 319 GetStartOfFecProtectedData(QuicConnectionIdLength connection_id_length,
329 bool include_version, 320 bool include_version,
330 QuicSequenceNumberLength sequence_number_length); 321 QuicSequenceNumberLength sequence_number_length);
331 // Index of the first byte in a QUIC packet of encrypted data. 322 // Index of the first byte in a QUIC packet of encrypted data.
332 NET_EXPORT_PRIVATE size_t GetStartOfEncryptedData( 323 NET_EXPORT_PRIVATE size_t
333 QuicConnectionIdLength connection_id_length, 324 GetStartOfEncryptedData(QuicConnectionIdLength connection_id_length,
334 bool include_version, 325 bool include_version,
335 QuicSequenceNumberLength sequence_number_length); 326 QuicSequenceNumberLength sequence_number_length);
336 327
337 enum QuicRstStreamErrorCode { 328 enum QuicRstStreamErrorCode {
338 QUIC_STREAM_NO_ERROR = 0, 329 QUIC_STREAM_NO_ERROR = 0,
339 330
340 // There was some error which halted stream processing. 331 // There was some error which halted stream processing.
341 QUIC_ERROR_PROCESSING_STREAM, 332 QUIC_ERROR_PROCESSING_STREAM,
342 // We got two fin or reset offsets which did not match. 333 // We got two fin or reset offsets which did not match.
343 QUIC_MULTIPLE_TERMINATION_OFFSETS, 334 QUIC_MULTIPLE_TERMINATION_OFFSETS,
344 // We got bad payload and can not respond to it at the protocol level. 335 // We got bad payload and can not respond to it at the protocol level.
345 QUIC_BAD_APPLICATION_PAYLOAD, 336 QUIC_BAD_APPLICATION_PAYLOAD,
346 // Stream closed due to connection error. No reset frame is sent when this 337 // Stream closed due to connection error. No reset frame is sent when this
347 // happens. 338 // happens.
348 QUIC_STREAM_CONNECTION_ERROR, 339 QUIC_STREAM_CONNECTION_ERROR,
349 // GoAway frame sent. No more stream can be created. 340 // GoAway frame sent. No more stream can be created.
350 QUIC_STREAM_PEER_GOING_AWAY, 341 QUIC_STREAM_PEER_GOING_AWAY,
351 // The stream has been cancelled. 342 // The stream has been cancelled.
352 QUIC_STREAM_CANCELLED, 343 QUIC_STREAM_CANCELLED,
353 // Sending a RST to allow for proper flow control accounting. 344 // Sending a RST to allow for proper flow control accounting.
354 QUIC_RST_FLOW_CONTROL_ACCOUNTING, 345 QUIC_RST_FLOW_CONTROL_ACCOUNTING,
355 346
356 // No error. Used as bound while iterating. 347 // No error. Used as bound while iterating.
357 QUIC_STREAM_LAST_ERROR, 348 QUIC_STREAM_LAST_ERROR,
358 }; 349 };
359 350
360 // Because receiving an unknown QuicRstStreamErrorCode results in connection 351 // Because receiving an unknown QuicRstStreamErrorCode results in connection
361 // teardown, we use this to make sure any errors predating a given version are 352 // teardown, we use this to make sure any errors predating a given version are
362 // downgraded to the most appropriate existing error. 353 // downgraded to the most appropriate existing error.
363 NET_EXPORT_PRIVATE QuicRstStreamErrorCode AdjustErrorForVersion( 354 NET_EXPORT_PRIVATE QuicRstStreamErrorCode
364 QuicRstStreamErrorCode error_code, 355 AdjustErrorForVersion(QuicRstStreamErrorCode error_code,
365 QuicVersion version); 356 QuicVersion version);
366 357
367 // These values must remain stable as they are uploaded to UMA histograms. 358 // These values must remain stable as they are uploaded to UMA histograms.
368 // To add a new error code, use the current value of QUIC_LAST_ERROR and 359 // To add a new error code, use the current value of QUIC_LAST_ERROR and
369 // increment QUIC_LAST_ERROR. 360 // increment QUIC_LAST_ERROR.
370 enum QuicErrorCode { 361 enum QuicErrorCode {
371 QUIC_NO_ERROR = 0, 362 QUIC_NO_ERROR = 0,
372 363
373 // Connection has reached an invalid state. 364 // Connection has reached an invalid state.
374 QUIC_INTERNAL_ERROR = 1, 365 QUIC_INTERNAL_ERROR = 1,
375 // There were data frames after the a fin or reset. 366 // There were data frames after the a fin or reset.
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 bool version_flag; 511 bool version_flag;
521 QuicSequenceNumberLength sequence_number_length; 512 QuicSequenceNumberLength sequence_number_length;
522 QuicVersionVector versions; 513 QuicVersionVector versions;
523 }; 514 };
524 515
525 // Header for Data or FEC packets. 516 // Header for Data or FEC packets.
526 struct NET_EXPORT_PRIVATE QuicPacketHeader { 517 struct NET_EXPORT_PRIVATE QuicPacketHeader {
527 QuicPacketHeader(); 518 QuicPacketHeader();
528 explicit QuicPacketHeader(const QuicPacketPublicHeader& header); 519 explicit QuicPacketHeader(const QuicPacketPublicHeader& header);
529 520
530 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 521 NET_EXPORT_PRIVATE friend std::ostream& operator<<(std::ostream& os,
531 std::ostream& os, const QuicPacketHeader& s); 522 const QuicPacketHeader& s);
532 523
533 QuicPacketPublicHeader public_header; 524 QuicPacketPublicHeader public_header;
534 bool fec_flag; 525 bool fec_flag;
535 bool entropy_flag; 526 bool entropy_flag;
536 QuicPacketEntropyHash entropy_hash; 527 QuicPacketEntropyHash entropy_hash;
537 QuicPacketSequenceNumber packet_sequence_number; 528 QuicPacketSequenceNumber packet_sequence_number;
538 InFecGroup is_in_fec_group; 529 InFecGroup is_in_fec_group;
539 QuicFecGroupNumber fec_group; 530 QuicFecGroupNumber fec_group;
540 }; 531 };
541 532
(...skipping 17 matching lines...) Expand all
559 NEGOTIATION_IN_PROGRESS, 550 NEGOTIATION_IN_PROGRESS,
560 // This indicates this endpoint has received a packet from the peer with a 551 // This indicates this endpoint has received a packet from the peer with a
561 // version this endpoint supports. Version negotiation is complete, and the 552 // version this endpoint supports. Version negotiation is complete, and the
562 // version number will no longer be sent with future packets. 553 // version number will no longer be sent with future packets.
563 NEGOTIATED_VERSION 554 NEGOTIATED_VERSION
564 }; 555 };
565 556
566 typedef QuicPacketPublicHeader QuicVersionNegotiationPacket; 557 typedef QuicPacketPublicHeader QuicVersionNegotiationPacket;
567 558
568 // A padding frame contains no payload. 559 // A padding frame contains no payload.
569 struct NET_EXPORT_PRIVATE QuicPaddingFrame { 560 struct NET_EXPORT_PRIVATE QuicPaddingFrame {};
570 };
571 561
572 // A ping frame contains no payload, though it is retransmittable, 562 // A ping frame contains no payload, though it is retransmittable,
573 // and ACK'd just like other normal frames. 563 // and ACK'd just like other normal frames.
574 struct NET_EXPORT_PRIVATE QuicPingFrame { 564 struct NET_EXPORT_PRIVATE QuicPingFrame {};
575 };
576 565
577 struct NET_EXPORT_PRIVATE QuicStreamFrame { 566 struct NET_EXPORT_PRIVATE QuicStreamFrame {
578 QuicStreamFrame(); 567 QuicStreamFrame();
579 QuicStreamFrame(const QuicStreamFrame& frame); 568 QuicStreamFrame(const QuicStreamFrame& frame);
580 QuicStreamFrame(QuicStreamId stream_id, 569 QuicStreamFrame(QuicStreamId stream_id,
581 bool fin, 570 bool fin,
582 QuicStreamOffset offset, 571 QuicStreamOffset offset,
583 IOVector data); 572 IOVector data);
584 573
585 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 574 NET_EXPORT_PRIVATE friend std::ostream& operator<<(std::ostream& os,
586 std::ostream& os, const QuicStreamFrame& s); 575 const QuicStreamFrame& s);
587 576
588 // Returns a copy of the IOVector |data| as a heap-allocated string. 577 // Returns a copy of the IOVector |data| as a heap-allocated string.
589 // Caller must take ownership of the returned string. 578 // Caller must take ownership of the returned string.
590 std::string* GetDataAsString() const; 579 std::string* GetDataAsString() const;
591 580
592 QuicStreamId stream_id; 581 QuicStreamId stream_id;
593 bool fin; 582 bool fin;
594 QuicStreamOffset offset; // Location of this data in the stream. 583 QuicStreamOffset offset; // Location of this data in the stream.
595 IOVector data; 584 IOVector data;
596 585
597 // If this is set, then when this packet is ACKed the AckNotifier will be 586 // If this is set, then when this packet is ACKed the AckNotifier will be
598 // informed. 587 // informed.
599 QuicAckNotifier* notifier; 588 QuicAckNotifier* notifier;
600 }; 589 };
601 590
602 // TODO(ianswett): Re-evaluate the trade-offs of hash_set vs set when framing 591 // TODO(ianswett): Re-evaluate the trade-offs of hash_set vs set when framing
603 // is finalized. 592 // is finalized.
604 typedef std::set<QuicPacketSequenceNumber> SequenceNumberSet; 593 typedef std::set<QuicPacketSequenceNumber> SequenceNumberSet;
605 // TODO(pwestin): Add a way to enforce the max size of this map. 594 // TODO(pwestin): Add a way to enforce the max size of this map.
606 typedef std::map<QuicPacketSequenceNumber, QuicTime> TimeMap; 595 typedef std::map<QuicPacketSequenceNumber, QuicTime> TimeMap;
607 596
608 struct NET_EXPORT_PRIVATE ReceivedPacketInfo { 597 struct NET_EXPORT_PRIVATE ReceivedPacketInfo {
609 ReceivedPacketInfo(); 598 ReceivedPacketInfo();
610 ~ReceivedPacketInfo(); 599 ~ReceivedPacketInfo();
611 600
612 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 601 NET_EXPORT_PRIVATE friend std::ostream& operator<<(
613 std::ostream& os, const ReceivedPacketInfo& s); 602 std::ostream& os,
603 const ReceivedPacketInfo& s);
614 604
615 // Entropy hash of all packets up to largest observed not including missing 605 // Entropy hash of all packets up to largest observed not including missing
616 // packets. 606 // packets.
617 QuicPacketEntropyHash entropy_hash; 607 QuicPacketEntropyHash entropy_hash;
618 608
619 // The highest packet sequence number we've observed from the peer. 609 // The highest packet sequence number we've observed from the peer.
620 // 610 //
621 // In general, this should be the largest packet number we've received. In 611 // In general, this should be the largest packet number we've received. In
622 // the case of truncated acks, we may have to advertise a lower "upper bound" 612 // the case of truncated acks, we may have to advertise a lower "upper bound"
623 // than largest received, to avoid implicitly acking missing packets that 613 // than largest received, to avoid implicitly acking missing packets that
(...skipping 15 matching lines...) Expand all
639 bool is_truncated; 629 bool is_truncated;
640 630
641 // Packets which have been revived via FEC. 631 // Packets which have been revived via FEC.
642 // All of these must also be in missing_packets. 632 // All of these must also be in missing_packets.
643 SequenceNumberSet revived_packets; 633 SequenceNumberSet revived_packets;
644 }; 634 };
645 635
646 // True if the sequence number is greater than largest_observed or is listed 636 // True if the sequence number is greater than largest_observed or is listed
647 // as missing. 637 // as missing.
648 // Always returns false for sequence numbers less than least_unacked. 638 // Always returns false for sequence numbers less than least_unacked.
649 bool NET_EXPORT_PRIVATE IsAwaitingPacket( 639 bool NET_EXPORT_PRIVATE
650 const ReceivedPacketInfo& received_info, 640 IsAwaitingPacket(const ReceivedPacketInfo& received_info,
651 QuicPacketSequenceNumber sequence_number); 641 QuicPacketSequenceNumber sequence_number);
652 642
653 // Inserts missing packets between [lower, higher). 643 // Inserts missing packets between [lower, higher).
654 void NET_EXPORT_PRIVATE InsertMissingPacketsBetween( 644 void NET_EXPORT_PRIVATE
655 ReceivedPacketInfo* received_info, 645 InsertMissingPacketsBetween(ReceivedPacketInfo* received_info,
656 QuicPacketSequenceNumber lower, 646 QuicPacketSequenceNumber lower,
657 QuicPacketSequenceNumber higher); 647 QuicPacketSequenceNumber higher);
658 648
659 struct NET_EXPORT_PRIVATE QuicStopWaitingFrame { 649 struct NET_EXPORT_PRIVATE QuicStopWaitingFrame {
660 QuicStopWaitingFrame(); 650 QuicStopWaitingFrame();
661 ~QuicStopWaitingFrame(); 651 ~QuicStopWaitingFrame();
662 652
663 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 653 NET_EXPORT_PRIVATE friend std::ostream& operator<<(
664 std::ostream& os, const QuicStopWaitingFrame& s); 654 std::ostream& os,
655 const QuicStopWaitingFrame& s);
665 656
666 // Entropy hash of all packets up to, but not including, the least unacked 657 // Entropy hash of all packets up to, but not including, the least unacked
667 // packet. 658 // packet.
668 QuicPacketEntropyHash entropy_hash; 659 QuicPacketEntropyHash entropy_hash;
669 // The lowest packet we've sent which is unacked, and we expect an ack for. 660 // The lowest packet we've sent which is unacked, and we expect an ack for.
670 QuicPacketSequenceNumber least_unacked; 661 QuicPacketSequenceNumber least_unacked;
671 }; 662 };
672 663
673 struct NET_EXPORT_PRIVATE QuicAckFrame { 664 struct NET_EXPORT_PRIVATE QuicAckFrame {
674 QuicAckFrame(); 665 QuicAckFrame();
675 666
676 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 667 NET_EXPORT_PRIVATE friend std::ostream& operator<<(std::ostream& os,
677 std::ostream& os, const QuicAckFrame& s); 668 const QuicAckFrame& s);
678 669
679 QuicStopWaitingFrame sent_info; 670 QuicStopWaitingFrame sent_info;
680 ReceivedPacketInfo received_info; 671 ReceivedPacketInfo received_info;
681 }; 672 };
682 673
683 // Defines for all types of congestion feedback that will be negotiated in QUIC, 674 // Defines for all types of congestion feedback that will be negotiated in QUIC,
684 // kTCP MUST be supported by all QUIC implementations to guarantee 100% 675 // kTCP MUST be supported by all QUIC implementations to guarantee 100%
685 // compatibility. 676 // compatibility.
686 enum CongestionFeedbackType { 677 enum CongestionFeedbackType {
687 kTCP, // Used to mimic TCP. 678 kTCP, // Used to mimic TCP.
688 kInterArrival, // Use additional inter arrival information. 679 kInterArrival, // Use additional inter arrival information.
689 kFixRate, // Provided for testing. 680 kFixRate, // Provided for testing.
690 }; 681 };
691 682
692 enum LossDetectionType { 683 enum LossDetectionType {
693 kNack, // Used to mimic TCP's loss detection. 684 kNack, // Used to mimic TCP's loss detection.
694 kTime, // Time based loss detection. 685 kTime, // Time based loss detection.
695 }; 686 };
696 687
697 struct NET_EXPORT_PRIVATE CongestionFeedbackMessageTCP { 688 struct NET_EXPORT_PRIVATE CongestionFeedbackMessageTCP {
698 CongestionFeedbackMessageTCP(); 689 CongestionFeedbackMessageTCP();
699 690
(...skipping 12 matching lines...) Expand all
712 struct NET_EXPORT_PRIVATE CongestionFeedbackMessageFixRate { 703 struct NET_EXPORT_PRIVATE CongestionFeedbackMessageFixRate {
713 CongestionFeedbackMessageFixRate(); 704 CongestionFeedbackMessageFixRate();
714 QuicBandwidth bitrate; 705 QuicBandwidth bitrate;
715 }; 706 };
716 707
717 struct NET_EXPORT_PRIVATE QuicCongestionFeedbackFrame { 708 struct NET_EXPORT_PRIVATE QuicCongestionFeedbackFrame {
718 QuicCongestionFeedbackFrame(); 709 QuicCongestionFeedbackFrame();
719 ~QuicCongestionFeedbackFrame(); 710 ~QuicCongestionFeedbackFrame();
720 711
721 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 712 NET_EXPORT_PRIVATE friend std::ostream& operator<<(
722 std::ostream& os, const QuicCongestionFeedbackFrame& c); 713 std::ostream& os,
714 const QuicCongestionFeedbackFrame& c);
723 715
724 CongestionFeedbackType type; 716 CongestionFeedbackType type;
725 // This should really be a union, but since the inter arrival struct 717 // This should really be a union, but since the inter arrival struct
726 // is non-trivial, C++ prohibits it. 718 // is non-trivial, C++ prohibits it.
727 CongestionFeedbackMessageTCP tcp; 719 CongestionFeedbackMessageTCP tcp;
728 CongestionFeedbackMessageInterArrival inter_arrival; 720 CongestionFeedbackMessageInterArrival inter_arrival;
729 CongestionFeedbackMessageFixRate fix_rate; 721 CongestionFeedbackMessageFixRate fix_rate;
730 }; 722 };
731 723
732 struct NET_EXPORT_PRIVATE QuicRstStreamFrame { 724 struct NET_EXPORT_PRIVATE QuicRstStreamFrame {
733 QuicRstStreamFrame(); 725 QuicRstStreamFrame();
734 QuicRstStreamFrame(QuicStreamId stream_id, 726 QuicRstStreamFrame(QuicStreamId stream_id,
735 QuicRstStreamErrorCode error_code, 727 QuicRstStreamErrorCode error_code,
736 QuicStreamOffset bytes_written); 728 QuicStreamOffset bytes_written);
737 729
738 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 730 NET_EXPORT_PRIVATE friend std::ostream& operator<<(
739 std::ostream& os, const QuicRstStreamFrame& r); 731 std::ostream& os,
732 const QuicRstStreamFrame& r);
740 733
741 QuicStreamId stream_id; 734 QuicStreamId stream_id;
742 QuicRstStreamErrorCode error_code; 735 QuicRstStreamErrorCode error_code;
743 std::string error_details; 736 std::string error_details;
744 737
745 // Used to update flow control windows. On termination of a stream, both 738 // Used to update flow control windows. On termination of a stream, both
746 // endpoints must inform the peer of the number of bytes they have sent on 739 // endpoints must inform the peer of the number of bytes they have sent on
747 // that stream. This can be done through normal termination (data packet with 740 // that stream. This can be done through normal termination (data packet with
748 // FIN) or through a RST. 741 // FIN) or through a RST.
749 QuicStreamOffset byte_offset; 742 QuicStreamOffset byte_offset;
750 }; 743 };
751 744
752 struct NET_EXPORT_PRIVATE QuicConnectionCloseFrame { 745 struct NET_EXPORT_PRIVATE QuicConnectionCloseFrame {
753 QuicConnectionCloseFrame(); 746 QuicConnectionCloseFrame();
754 747
755 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 748 NET_EXPORT_PRIVATE friend std::ostream& operator<<(
756 std::ostream& os, const QuicConnectionCloseFrame& c); 749 std::ostream& os,
750 const QuicConnectionCloseFrame& c);
757 751
758 QuicErrorCode error_code; 752 QuicErrorCode error_code;
759 std::string error_details; 753 std::string error_details;
760 }; 754 };
761 755
762 struct NET_EXPORT_PRIVATE QuicGoAwayFrame { 756 struct NET_EXPORT_PRIVATE QuicGoAwayFrame {
763 QuicGoAwayFrame(); 757 QuicGoAwayFrame();
764 QuicGoAwayFrame(QuicErrorCode error_code, 758 QuicGoAwayFrame(QuicErrorCode error_code,
765 QuicStreamId last_good_stream_id, 759 QuicStreamId last_good_stream_id,
766 const std::string& reason); 760 const std::string& reason);
767 761
768 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 762 NET_EXPORT_PRIVATE friend std::ostream& operator<<(std::ostream& os,
769 std::ostream& os, const QuicGoAwayFrame& g); 763 const QuicGoAwayFrame& g);
770 764
771 QuicErrorCode error_code; 765 QuicErrorCode error_code;
772 QuicStreamId last_good_stream_id; 766 QuicStreamId last_good_stream_id;
773 std::string reason_phrase; 767 std::string reason_phrase;
774 }; 768 };
775 769
776 // Flow control updates per-stream and at the connection levoel. 770 // Flow control updates per-stream and at the connection levoel.
777 // Based on SPDY's WINDOW_UPDATE frame, but uses an absolute byte offset rather 771 // Based on SPDY's WINDOW_UPDATE frame, but uses an absolute byte offset rather
778 // than a window delta. 772 // than a window delta.
779 // TODO(rjshade): A possible future optimization is to make stream_id and 773 // TODO(rjshade): A possible future optimization is to make stream_id and
780 // byte_offset variable length, similar to stream frames. 774 // byte_offset variable length, similar to stream frames.
781 struct NET_EXPORT_PRIVATE QuicWindowUpdateFrame { 775 struct NET_EXPORT_PRIVATE QuicWindowUpdateFrame {
782 QuicWindowUpdateFrame() {} 776 QuicWindowUpdateFrame() {}
783 QuicWindowUpdateFrame(QuicStreamId stream_id, QuicStreamOffset byte_offset); 777 QuicWindowUpdateFrame(QuicStreamId stream_id, QuicStreamOffset byte_offset);
784 778
785 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 779 NET_EXPORT_PRIVATE friend std::ostream& operator<<(
786 std::ostream& os, const QuicWindowUpdateFrame& w); 780 std::ostream& os,
781 const QuicWindowUpdateFrame& w);
787 782
788 // The stream this frame applies to. 0 is a special case meaning the overall 783 // The stream this frame applies to. 0 is a special case meaning the overall
789 // connection rather than a specific stream. 784 // connection rather than a specific stream.
790 QuicStreamId stream_id; 785 QuicStreamId stream_id;
791 786
792 // Byte offset in the stream or connection. The receiver of this frame must 787 // Byte offset in the stream or connection. The receiver of this frame must
793 // not send data which would result in this offset being exceeded. 788 // not send data which would result in this offset being exceeded.
794 QuicStreamOffset byte_offset; 789 QuicStreamOffset byte_offset;
795 }; 790 };
796 791
797 // The BLOCKED frame is used to indicate to the remote endpoint that this 792 // The BLOCKED frame is used to indicate to the remote endpoint that this
798 // endpoint believes itself to be flow-control blocked but otherwise ready to 793 // endpoint believes itself to be flow-control blocked but otherwise ready to
799 // send data. The BLOCKED frame is purely advisory and optional. 794 // send data. The BLOCKED frame is purely advisory and optional.
800 // Based on SPDY's BLOCKED frame (undocumented as of 2014-01-28). 795 // Based on SPDY's BLOCKED frame (undocumented as of 2014-01-28).
801 struct NET_EXPORT_PRIVATE QuicBlockedFrame { 796 struct NET_EXPORT_PRIVATE QuicBlockedFrame {
802 QuicBlockedFrame() {} 797 QuicBlockedFrame() {}
803 explicit QuicBlockedFrame(QuicStreamId stream_id); 798 explicit QuicBlockedFrame(QuicStreamId stream_id);
804 799
805 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 800 NET_EXPORT_PRIVATE friend std::ostream& operator<<(std::ostream& os,
806 std::ostream& os, const QuicBlockedFrame& b); 801 const QuicBlockedFrame& b);
807 802
808 // The stream this frame applies to. 0 is a special case meaning the overall 803 // The stream this frame applies to. 0 is a special case meaning the overall
809 // connection rather than a specific stream. 804 // connection rather than a specific stream.
810 QuicStreamId stream_id; 805 QuicStreamId stream_id;
811 }; 806 };
812 807
813 // EncryptionLevel enumerates the stages of encryption that a QUIC connection 808 // EncryptionLevel enumerates the stages of encryption that a QUIC connection
814 // progresses through. When retransmitting a packet, the encryption level needs 809 // progresses through. When retransmitting a packet, the encryption level needs
815 // to be specified so that it is retransmitted at a level which the peer can 810 // to be specified so that it is retransmitted at a level which the peer can
816 // understand. 811 // understand.
817 enum EncryptionLevel { 812 enum EncryptionLevel {
818 ENCRYPTION_NONE = 0, 813 ENCRYPTION_NONE = 0,
819 ENCRYPTION_INITIAL = 1, 814 ENCRYPTION_INITIAL = 1,
820 ENCRYPTION_FORWARD_SECURE = 2, 815 ENCRYPTION_FORWARD_SECURE = 2,
821
822 NUM_ENCRYPTION_LEVELS, 816 NUM_ENCRYPTION_LEVELS,
823 }; 817 };
824 818
825 struct NET_EXPORT_PRIVATE QuicFrame { 819 struct NET_EXPORT_PRIVATE QuicFrame {
826 QuicFrame(); 820 QuicFrame();
827 explicit QuicFrame(QuicPaddingFrame* padding_frame); 821 explicit QuicFrame(QuicPaddingFrame* padding_frame);
828 explicit QuicFrame(QuicStreamFrame* stream_frame); 822 explicit QuicFrame(QuicStreamFrame* stream_frame);
829 explicit QuicFrame(QuicAckFrame* frame); 823 explicit QuicFrame(QuicAckFrame* frame);
830 explicit QuicFrame(QuicCongestionFeedbackFrame* frame); 824 explicit QuicFrame(QuicCongestionFeedbackFrame* frame);
831 explicit QuicFrame(QuicRstStreamFrame* frame); 825 explicit QuicFrame(QuicRstStreamFrame* frame);
832 explicit QuicFrame(QuicConnectionCloseFrame* frame); 826 explicit QuicFrame(QuicConnectionCloseFrame* frame);
833 explicit QuicFrame(QuicStopWaitingFrame* frame); 827 explicit QuicFrame(QuicStopWaitingFrame* frame);
834 explicit QuicFrame(QuicPingFrame* frame); 828 explicit QuicFrame(QuicPingFrame* frame);
835 explicit QuicFrame(QuicGoAwayFrame* frame); 829 explicit QuicFrame(QuicGoAwayFrame* frame);
836 explicit QuicFrame(QuicWindowUpdateFrame* frame); 830 explicit QuicFrame(QuicWindowUpdateFrame* frame);
837 explicit QuicFrame(QuicBlockedFrame* frame); 831 explicit QuicFrame(QuicBlockedFrame* frame);
838 832
839 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 833 NET_EXPORT_PRIVATE friend std::ostream& operator<<(std::ostream& os,
840 std::ostream& os, const QuicFrame& frame); 834 const QuicFrame& frame);
841 835
842 QuicFrameType type; 836 QuicFrameType type;
843 union { 837 union {
844 QuicPaddingFrame* padding_frame; 838 QuicPaddingFrame* padding_frame;
845 QuicStreamFrame* stream_frame; 839 QuicStreamFrame* stream_frame;
846 QuicAckFrame* ack_frame; 840 QuicAckFrame* ack_frame;
847 QuicCongestionFeedbackFrame* congestion_feedback_frame; 841 QuicCongestionFeedbackFrame* congestion_feedback_frame;
848 QuicStopWaitingFrame* stop_waiting_frame; 842 QuicStopWaitingFrame* stop_waiting_frame;
849 QuicPingFrame* ping_frame; 843 QuicPingFrame* ping_frame;
850 QuicRstStreamFrame* rst_stream_frame; 844 QuicRstStreamFrame* rst_stream_frame;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 884
891 class NET_EXPORT_PRIVATE QuicPacket : public QuicData { 885 class NET_EXPORT_PRIVATE QuicPacket : public QuicData {
892 public: 886 public:
893 static QuicPacket* NewDataPacket( 887 static QuicPacket* NewDataPacket(
894 char* buffer, 888 char* buffer,
895 size_t length, 889 size_t length,
896 bool owns_buffer, 890 bool owns_buffer,
897 QuicConnectionIdLength connection_id_length, 891 QuicConnectionIdLength connection_id_length,
898 bool includes_version, 892 bool includes_version,
899 QuicSequenceNumberLength sequence_number_length) { 893 QuicSequenceNumberLength sequence_number_length) {
900 return new QuicPacket(buffer, length, owns_buffer, connection_id_length, 894 return new QuicPacket(buffer,
901 includes_version, sequence_number_length, false); 895 length,
896 owns_buffer,
897 connection_id_length,
898 includes_version,
899 sequence_number_length,
900 false);
902 } 901 }
903 902
904 static QuicPacket* NewFecPacket( 903 static QuicPacket* NewFecPacket(
905 char* buffer, 904 char* buffer,
906 size_t length, 905 size_t length,
907 bool owns_buffer, 906 bool owns_buffer,
908 QuicConnectionIdLength connection_id_length, 907 QuicConnectionIdLength connection_id_length,
909 bool includes_version, 908 bool includes_version,
910 QuicSequenceNumberLength sequence_number_length) { 909 QuicSequenceNumberLength sequence_number_length) {
911 return new QuicPacket(buffer, length, owns_buffer, connection_id_length, 910 return new QuicPacket(buffer,
912 includes_version, sequence_number_length, true); 911 length,
912 owns_buffer,
913 connection_id_length,
914 includes_version,
915 sequence_number_length,
916 true);
913 } 917 }
914 918
915 base::StringPiece FecProtectedData() const; 919 base::StringPiece FecProtectedData() const;
916 base::StringPiece AssociatedData() const; 920 base::StringPiece AssociatedData() const;
917 base::StringPiece BeforePlaintext() const; 921 base::StringPiece BeforePlaintext() const;
918 base::StringPiece Plaintext() const; 922 base::StringPiece Plaintext() const;
919 923
920 bool is_fec_packet() const { return is_fec_packet_; } 924 bool is_fec_packet() const { return is_fec_packet_; }
921 925
922 char* mutable_data() { return buffer_; } 926 char* mutable_data() { return buffer_; }
(...skipping 22 matching lines...) Expand all
945 QuicEncryptedPacket(char* buffer, size_t length, bool owns_buffer); 949 QuicEncryptedPacket(char* buffer, size_t length, bool owns_buffer);
946 950
947 // Clones the packet into a new packet which owns the buffer. 951 // Clones the packet into a new packet which owns the buffer.
948 QuicEncryptedPacket* Clone() const; 952 QuicEncryptedPacket* Clone() const;
949 953
950 // By default, gtest prints the raw bytes of an object. The bool data 954 // By default, gtest prints the raw bytes of an object. The bool data
951 // member (in the base class QuicData) causes this object to have padding 955 // member (in the base class QuicData) causes this object to have padding
952 // bytes, which causes the default gtest object printer to read 956 // bytes, which causes the default gtest object printer to read
953 // uninitialize memory. So we need to teach gtest how to print this object. 957 // uninitialize memory. So we need to teach gtest how to print this object.
954 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 958 NET_EXPORT_PRIVATE friend std::ostream& operator<<(
955 std::ostream& os, const QuicEncryptedPacket& s); 959 std::ostream& os,
960 const QuicEncryptedPacket& s);
956 961
957 private: 962 private:
958 DISALLOW_COPY_AND_ASSIGN(QuicEncryptedPacket); 963 DISALLOW_COPY_AND_ASSIGN(QuicEncryptedPacket);
959 }; 964 };
960 965
961 class NET_EXPORT_PRIVATE RetransmittableFrames { 966 class NET_EXPORT_PRIVATE RetransmittableFrames {
962 public: 967 public:
963 RetransmittableFrames(); 968 RetransmittableFrames();
964 ~RetransmittableFrames(); 969 ~RetransmittableFrames();
965 970
966 // Allocates a local copy of the referenced StringPiece has QuicStreamFrame 971 // Allocates a local copy of the referenced StringPiece has QuicStreamFrame
967 // use it. 972 // use it.
968 // Takes ownership of |stream_frame|. 973 // Takes ownership of |stream_frame|.
969 const QuicFrame& AddStreamFrame(QuicStreamFrame* stream_frame); 974 const QuicFrame& AddStreamFrame(QuicStreamFrame* stream_frame);
970 // Takes ownership of the frame inside |frame|. 975 // Takes ownership of the frame inside |frame|.
971 const QuicFrame& AddNonStreamFrame(const QuicFrame& frame); 976 const QuicFrame& AddNonStreamFrame(const QuicFrame& frame);
972 const QuicFrames& frames() const { return frames_; } 977 const QuicFrames& frames() const { return frames_; }
973 978
974 IsHandshake HasCryptoHandshake() const; 979 IsHandshake HasCryptoHandshake() const;
975 980
976 void set_encryption_level(EncryptionLevel level); 981 void set_encryption_level(EncryptionLevel level);
977 EncryptionLevel encryption_level() const { 982 EncryptionLevel encryption_level() const { return encryption_level_; }
978 return encryption_level_;
979 }
980 983
981 private: 984 private:
982 QuicFrames frames_; 985 QuicFrames frames_;
983 EncryptionLevel encryption_level_; 986 EncryptionLevel encryption_level_;
984 // Data referenced by the StringPiece of a QuicStreamFrame. 987 // Data referenced by the StringPiece of a QuicStreamFrame.
985 std::vector<std::string*> stream_data_; 988 std::vector<std::string*> stream_data_;
986 989
987 DISALLOW_COPY_AND_ASSIGN(RetransmittableFrames); 990 DISALLOW_COPY_AND_ASSIGN(RetransmittableFrames);
988 }; 991 };
989 992
(...skipping 16 matching lines...) Expand all
1006 }; 1009 };
1007 1010
1008 // A struct for functions which consume data payloads and fins. 1011 // A struct for functions which consume data payloads and fins.
1009 struct NET_EXPORT_PRIVATE QuicConsumedData { 1012 struct NET_EXPORT_PRIVATE QuicConsumedData {
1010 QuicConsumedData(size_t bytes_consumed, bool fin_consumed); 1013 QuicConsumedData(size_t bytes_consumed, bool fin_consumed);
1011 1014
1012 // By default, gtest prints the raw bytes of an object. The bool data 1015 // By default, gtest prints the raw bytes of an object. The bool data
1013 // member causes this object to have padding bytes, which causes the 1016 // member causes this object to have padding bytes, which causes the
1014 // default gtest object printer to read uninitialize memory. So we need 1017 // default gtest object printer to read uninitialize memory. So we need
1015 // to teach gtest how to print this object. 1018 // to teach gtest how to print this object.
1016 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 1019 NET_EXPORT_PRIVATE friend std::ostream& operator<<(std::ostream& os,
1017 std::ostream& os, const QuicConsumedData& s); 1020 const QuicConsumedData& s);
1018 1021
1019 // How many bytes were consumed. 1022 // How many bytes were consumed.
1020 size_t bytes_consumed; 1023 size_t bytes_consumed;
1021 1024
1022 // True if an incoming fin was consumed. 1025 // True if an incoming fin was consumed.
1023 bool fin_consumed; 1026 bool fin_consumed;
1024 }; 1027 };
1025 1028
1026 enum WriteStatus { 1029 enum WriteStatus {
1027 WRITE_STATUS_OK, 1030 WRITE_STATUS_OK,
1028 WRITE_STATUS_BLOCKED, 1031 WRITE_STATUS_BLOCKED,
1029 WRITE_STATUS_ERROR, 1032 WRITE_STATUS_ERROR,
1030 }; 1033 };
1031 1034
1032 // A struct used to return the result of write calls including either the number 1035 // A struct used to return the result of write calls including either the number
1033 // of bytes written or the error code, depending upon the status. 1036 // of bytes written or the error code, depending upon the status.
1034 struct NET_EXPORT_PRIVATE WriteResult { 1037 struct NET_EXPORT_PRIVATE WriteResult {
1035 WriteResult(WriteStatus status, int bytes_written_or_error_code); 1038 WriteResult(WriteStatus status, int bytes_written_or_error_code);
1036 WriteResult(); 1039 WriteResult();
1037 1040
1038 WriteStatus status; 1041 WriteStatus status;
1039 union { 1042 union {
1040 int bytes_written; // only valid when status is OK 1043 int bytes_written; // only valid when status is OK
1041 int error_code; // only valid when status is ERROR 1044 int error_code; // only valid when status is ERROR
1042 }; 1045 };
1043 }; 1046 };
1044 1047
1045 } // namespace net 1048 } // namespace net
1046 1049
1047 #endif // NET_QUIC_QUIC_PROTOCOL_H_ 1050 #endif // NET_QUIC_QUIC_PROTOCOL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698