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

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

Issue 180723003: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix unintialized memory error Created 6 years, 10 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
« no previous file with comments | « net/quic/quic_packet_generator_test.cc ('k') | net/quic/quic_protocol.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 // Default and initial maximum size in bytes of a QUIC packet. 53 // Default and initial maximum size in bytes of a QUIC packet.
54 const QuicByteCount kDefaultMaxPacketSize = 1200; 54 const QuicByteCount kDefaultMaxPacketSize = 1200;
55 // The maximum packet size of any QUIC packet, based on ethernet's max size, 55 // The maximum packet size of any QUIC packet, based on ethernet's max size,
56 // minus the IP and UDP headers. IPv6 has a 40 byte header, UPD adds an 56 // minus the IP and UDP headers. IPv6 has a 40 byte header, UPD adds an
57 // additional 8 bytes. This is a total overhead of 48 bytes. Ethernet's 57 // additional 8 bytes. This is a total overhead of 48 bytes. Ethernet's
58 // max packet size is 1500 bytes, 1500 - 48 = 1452. 58 // max packet size is 1500 bytes, 1500 - 48 = 1452.
59 const QuicByteCount kMaxPacketSize = 1452; 59 const QuicByteCount kMaxPacketSize = 1452;
60 60
61 // Maximum size of the initial congestion window in packets. 61 // Maximum size of the initial congestion window in packets.
62 const size_t kDefaultInitialWindow = 10; 62 const size_t kDefaultInitialWindow = 10;
63 // TODO(ianswett): Temporarily changed to 10 due to a large number of clients 63 const size_t kMaxInitialWindow = 100;
64 // mistakenly negotiating 100 initially and suffering the consequences.
65 const size_t kMaxInitialWindow = 10;
66 64
67 // Maximum size of the congestion window, in packets, for TCP congestion control 65 // Maximum size of the congestion window, in packets, for TCP congestion control
68 // algorithms. 66 // algorithms.
69 const size_t kMaxTcpCongestionWindow = 200; 67 const size_t kMaxTcpCongestionWindow = 200;
70 68
71 // Don't allow a client to suggest an RTT longer than 15 seconds. 69 // Don't allow a client to suggest an RTT longer than 15 seconds.
72 const size_t kMaxInitialRoundTripTimeUs = 15 * kNumMicrosPerSecond; 70 const size_t kMaxInitialRoundTripTimeUs = 15 * kNumMicrosPerSecond;
73 71
74 // Maximum number of open streams per connection. 72 // Maximum number of open streams per connection.
75 const size_t kDefaultMaxStreamsPerConnection = 100; 73 const size_t kDefaultMaxStreamsPerConnection = 100;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 148
151 enum QuicFrameType { 149 enum QuicFrameType {
152 // Regular frame types. The values set here cannot change without the 150 // Regular frame types. The values set here cannot change without the
153 // introduction of a new QUIC version. 151 // introduction of a new QUIC version.
154 PADDING_FRAME = 0, 152 PADDING_FRAME = 0,
155 RST_STREAM_FRAME = 1, 153 RST_STREAM_FRAME = 1,
156 CONNECTION_CLOSE_FRAME = 2, 154 CONNECTION_CLOSE_FRAME = 2,
157 GOAWAY_FRAME = 3, 155 GOAWAY_FRAME = 3,
158 WINDOW_UPDATE_FRAME = 4, 156 WINDOW_UPDATE_FRAME = 4,
159 BLOCKED_FRAME = 5, 157 BLOCKED_FRAME = 5,
158 STOP_WAITING_FRAME = 6,
160 159
161 // STREAM, ACK, and CONGESTION_FEEDBACK frames are special frames. They are 160 // STREAM, ACK, and CONGESTION_FEEDBACK frames are special frames. They are
162 // encoded differently on the wire and their values do not need to be stable. 161 // encoded differently on the wire and their values do not need to be stable.
163 STREAM_FRAME, 162 STREAM_FRAME,
164 ACK_FRAME, 163 ACK_FRAME,
165 CONGESTION_FEEDBACK_FRAME, 164 CONGESTION_FEEDBACK_FRAME,
166 NUM_FRAME_TYPES 165 NUM_FRAME_TYPES
167 }; 166 };
168 167
169 enum QuicGuidLength { 168 enum QuicGuidLength {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 // kSupportedQuicVersions (if appropriate), and also add a new case to the 249 // kSupportedQuicVersions (if appropriate), and also add a new case to the
251 // helper methods QuicVersionToQuicTag, QuicTagToQuicVersion, and 250 // helper methods QuicVersionToQuicTag, QuicTagToQuicVersion, and
252 // QuicVersionToString. 251 // QuicVersionToString.
253 enum QuicVersion { 252 enum QuicVersion {
254 // Special case to indicate unknown/unsupported QUIC version. 253 // Special case to indicate unknown/unsupported QUIC version.
255 QUIC_VERSION_UNSUPPORTED = 0, 254 QUIC_VERSION_UNSUPPORTED = 0,
256 255
257 QUIC_VERSION_12 = 12, 256 QUIC_VERSION_12 = 12,
258 QUIC_VERSION_13 = 13, 257 QUIC_VERSION_13 = 13,
259 QUIC_VERSION_14 = 14, 258 QUIC_VERSION_14 = 14,
260 QUIC_VERSION_15 = 15, // Current version. 259 QUIC_VERSION_15 = 15,
260 QUIC_VERSION_16 = 16, // Current version.
261 }; 261 };
262 262
263 // This vector contains QUIC versions which we currently support. 263 // This vector contains QUIC versions which we currently support.
264 // 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
265 // element, with subsequent elements in descending order (versions can be 265 // element, with subsequent elements in descending order (versions can be
266 // skipped as necessary). 266 // skipped as necessary).
267 // 267 //
268 // 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
269 // http://sites/quic/adding-and-removing-versions 269 // http://sites/quic/adding-and-removing-versions
270 static const QuicVersion kSupportedQuicVersions[] = {QUIC_VERSION_15, 270 static const QuicVersion kSupportedQuicVersions[] = {QUIC_VERSION_16,
271 QUIC_VERSION_15,
271 QUIC_VERSION_14, 272 QUIC_VERSION_14,
272 QUIC_VERSION_13, 273 QUIC_VERSION_13,
273 QUIC_VERSION_12}; 274 QUIC_VERSION_12};
274 275
275 typedef std::vector<QuicVersion> QuicVersionVector; 276 typedef std::vector<QuicVersion> QuicVersionVector;
276 277
277 // Returns a vector of QUIC versions in kSupportedQuicVersions. 278 // Returns a vector of QUIC versions in kSupportedQuicVersions.
278 NET_EXPORT_PRIVATE QuicVersionVector QuicSupportedVersions(); 279 NET_EXPORT_PRIVATE QuicVersionVector QuicSupportedVersions();
279 280
280 // QuicTag is written to and read from the wire, but we prefer to use 281 // QuicTag is written to and read from the wire, but we prefer to use
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 // RST_STREAM frame data is malformed. 372 // RST_STREAM frame data is malformed.
372 QUIC_INVALID_RST_STREAM_DATA = 6, 373 QUIC_INVALID_RST_STREAM_DATA = 6,
373 // CONNECTION_CLOSE frame data is malformed. 374 // CONNECTION_CLOSE frame data is malformed.
374 QUIC_INVALID_CONNECTION_CLOSE_DATA = 7, 375 QUIC_INVALID_CONNECTION_CLOSE_DATA = 7,
375 // GOAWAY frame data is malformed. 376 // GOAWAY frame data is malformed.
376 QUIC_INVALID_GOAWAY_DATA = 8, 377 QUIC_INVALID_GOAWAY_DATA = 8,
377 // WINDOW_UPDATE frame data is malformed. 378 // WINDOW_UPDATE frame data is malformed.
378 QUIC_INVALID_WINDOW_UPDATE_DATA = 57, 379 QUIC_INVALID_WINDOW_UPDATE_DATA = 57,
379 // BLOCKED frame data is malformed. 380 // BLOCKED frame data is malformed.
380 QUIC_INVALID_BLOCKED_DATA = 58, 381 QUIC_INVALID_BLOCKED_DATA = 58,
382 // STOP_WAITING frame data is malformed.
383 QUIC_INVALID_STOP_WAITING_DATA = 60,
381 // ACK frame data is malformed. 384 // ACK frame data is malformed.
382 QUIC_INVALID_ACK_DATA = 9, 385 QUIC_INVALID_ACK_DATA = 9,
383 // CONGESTION_FEEDBACK frame data is malformed. 386 // CONGESTION_FEEDBACK frame data is malformed.
384 QUIC_INVALID_CONGESTION_FEEDBACK_DATA = 47, 387 QUIC_INVALID_CONGESTION_FEEDBACK_DATA = 47,
385 // Version negotiation packet is malformed. 388 // Version negotiation packet is malformed.
386 QUIC_INVALID_VERSION_NEGOTIATION_PACKET = 10, 389 QUIC_INVALID_VERSION_NEGOTIATION_PACKET = 10,
387 // Public RST packet is malformed. 390 // Public RST packet is malformed.
388 QUIC_INVALID_PUBLIC_RST_PACKET = 11, 391 QUIC_INVALID_PUBLIC_RST_PACKET = 11,
389 // There was an error decrypting. 392 // There was an error decrypting.
390 QUIC_DECRYPTION_FAILURE = 12, 393 QUIC_DECRYPTION_FAILURE = 12,
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 // We failed to setup the symmetric keys for a connection. 479 // We failed to setup the symmetric keys for a connection.
477 QUIC_CRYPTO_SYMMETRIC_KEY_SETUP_FAILED = 53, 480 QUIC_CRYPTO_SYMMETRIC_KEY_SETUP_FAILED = 53,
478 // A handshake message arrived, but we are still validating the 481 // A handshake message arrived, but we are still validating the
479 // previous handshake message. 482 // previous handshake message.
480 QUIC_CRYPTO_MESSAGE_WHILE_VALIDATING_CLIENT_HELLO = 54, 483 QUIC_CRYPTO_MESSAGE_WHILE_VALIDATING_CLIENT_HELLO = 54,
481 // This connection involved a version negotiation which appears to have been 484 // This connection involved a version negotiation which appears to have been
482 // tampered with. 485 // tampered with.
483 QUIC_VERSION_NEGOTIATION_MISMATCH = 55, 486 QUIC_VERSION_NEGOTIATION_MISMATCH = 55,
484 487
485 // No error. Used as bound while iterating. 488 // No error. Used as bound while iterating.
486 QUIC_LAST_ERROR = 60, 489 QUIC_LAST_ERROR = 61,
487 }; 490 };
488 491
489 struct NET_EXPORT_PRIVATE QuicPacketPublicHeader { 492 struct NET_EXPORT_PRIVATE QuicPacketPublicHeader {
490 QuicPacketPublicHeader(); 493 QuicPacketPublicHeader();
491 explicit QuicPacketPublicHeader(const QuicPacketPublicHeader& other); 494 explicit QuicPacketPublicHeader(const QuicPacketPublicHeader& other);
492 ~QuicPacketPublicHeader(); 495 ~QuicPacketPublicHeader();
493 496
494 // Universal header. All QuicPacket headers will have a guid and public flags. 497 // Universal header. All QuicPacket headers will have a guid and public flags.
495 QuicGuid guid; 498 QuicGuid guid;
496 QuicGuidLength guid_length; 499 QuicGuidLength guid_length;
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 bool NET_EXPORT_PRIVATE IsAwaitingPacket( 625 bool NET_EXPORT_PRIVATE IsAwaitingPacket(
623 const ReceivedPacketInfo& received_info, 626 const ReceivedPacketInfo& received_info,
624 QuicPacketSequenceNumber sequence_number); 627 QuicPacketSequenceNumber sequence_number);
625 628
626 // Inserts missing packets between [lower, higher). 629 // Inserts missing packets between [lower, higher).
627 void NET_EXPORT_PRIVATE InsertMissingPacketsBetween( 630 void NET_EXPORT_PRIVATE InsertMissingPacketsBetween(
628 ReceivedPacketInfo* received_info, 631 ReceivedPacketInfo* received_info,
629 QuicPacketSequenceNumber lower, 632 QuicPacketSequenceNumber lower,
630 QuicPacketSequenceNumber higher); 633 QuicPacketSequenceNumber higher);
631 634
632 struct NET_EXPORT_PRIVATE SentPacketInfo { 635 struct NET_EXPORT_PRIVATE QuicStopWaitingFrame {
633 SentPacketInfo(); 636 QuicStopWaitingFrame();
634 ~SentPacketInfo(); 637 ~QuicStopWaitingFrame();
635 638
636 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 639 NET_EXPORT_PRIVATE friend std::ostream& operator<<(
637 std::ostream& os, const SentPacketInfo& s); 640 std::ostream& os, const QuicStopWaitingFrame& s);
641
638 // Entropy hash of all packets up to, but not including, the least unacked 642 // Entropy hash of all packets up to, but not including, the least unacked
639 // packet. 643 // packet.
640 QuicPacketEntropyHash entropy_hash; 644 QuicPacketEntropyHash entropy_hash;
641 // The lowest packet we've sent which is unacked, and we expect an ack for. 645 // The lowest packet we've sent which is unacked, and we expect an ack for.
642 QuicPacketSequenceNumber least_unacked; 646 QuicPacketSequenceNumber least_unacked;
643 }; 647 };
644 648
645 struct NET_EXPORT_PRIVATE QuicAckFrame { 649 struct NET_EXPORT_PRIVATE QuicAckFrame {
646 QuicAckFrame(); 650 QuicAckFrame();
647 // Testing convenience method to construct a QuicAckFrame with all packets 651 // Testing convenience method to construct a QuicAckFrame with all packets
648 // from least_unacked to largest_observed acked. 652 // from least_unacked to largest_observed acked.
649 QuicAckFrame(QuicPacketSequenceNumber largest_observed, 653 QuicAckFrame(QuicPacketSequenceNumber largest_observed,
650 QuicTime largest_observed_receive_time, 654 QuicTime largest_observed_receive_time,
651 QuicPacketSequenceNumber least_unacked); 655 QuicPacketSequenceNumber least_unacked);
652 656
653 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 657 NET_EXPORT_PRIVATE friend std::ostream& operator<<(
654 std::ostream& os, const QuicAckFrame& s); 658 std::ostream& os, const QuicAckFrame& s);
655 659
656 SentPacketInfo sent_info; 660 QuicStopWaitingFrame sent_info;
657 ReceivedPacketInfo received_info; 661 ReceivedPacketInfo received_info;
658 }; 662 };
659 663
660 // Defines for all types of congestion feedback that will be negotiated in QUIC, 664 // Defines for all types of congestion feedback that will be negotiated in QUIC,
661 // kTCP MUST be supported by all QUIC implementations to guarantee 100% 665 // kTCP MUST be supported by all QUIC implementations to guarantee 100%
662 // compatibility. 666 // compatibility.
663 enum CongestionFeedbackType { 667 enum CongestionFeedbackType {
664 kTCP, // Used to mimic TCP. 668 kTCP, // Used to mimic TCP.
665 kInterArrival, // Use additional inter arrival information. 669 kInterArrival, // Use additional inter arrival information.
666 kFixRate, // Provided for testing. 670 kFixRate, // Provided for testing.
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 }; 799 };
796 800
797 struct NET_EXPORT_PRIVATE QuicFrame { 801 struct NET_EXPORT_PRIVATE QuicFrame {
798 QuicFrame(); 802 QuicFrame();
799 explicit QuicFrame(QuicPaddingFrame* padding_frame); 803 explicit QuicFrame(QuicPaddingFrame* padding_frame);
800 explicit QuicFrame(QuicStreamFrame* stream_frame); 804 explicit QuicFrame(QuicStreamFrame* stream_frame);
801 explicit QuicFrame(QuicAckFrame* frame); 805 explicit QuicFrame(QuicAckFrame* frame);
802 explicit QuicFrame(QuicCongestionFeedbackFrame* frame); 806 explicit QuicFrame(QuicCongestionFeedbackFrame* frame);
803 explicit QuicFrame(QuicRstStreamFrame* frame); 807 explicit QuicFrame(QuicRstStreamFrame* frame);
804 explicit QuicFrame(QuicConnectionCloseFrame* frame); 808 explicit QuicFrame(QuicConnectionCloseFrame* frame);
809 explicit QuicFrame(QuicStopWaitingFrame* frame);
805 explicit QuicFrame(QuicGoAwayFrame* frame); 810 explicit QuicFrame(QuicGoAwayFrame* frame);
806 explicit QuicFrame(QuicWindowUpdateFrame* frame); 811 explicit QuicFrame(QuicWindowUpdateFrame* frame);
807 explicit QuicFrame(QuicBlockedFrame* frame); 812 explicit QuicFrame(QuicBlockedFrame* frame);
808 813
809 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 814 NET_EXPORT_PRIVATE friend std::ostream& operator<<(
810 std::ostream& os, const QuicFrame& frame); 815 std::ostream& os, const QuicFrame& frame);
811 816
812 QuicFrameType type; 817 QuicFrameType type;
813 union { 818 union {
814 QuicPaddingFrame* padding_frame; 819 QuicPaddingFrame* padding_frame;
815 QuicStreamFrame* stream_frame; 820 QuicStreamFrame* stream_frame;
816 QuicAckFrame* ack_frame; 821 QuicAckFrame* ack_frame;
817 QuicCongestionFeedbackFrame* congestion_feedback_frame; 822 QuicCongestionFeedbackFrame* congestion_feedback_frame;
823 QuicStopWaitingFrame* stop_waiting_frame;
818 QuicRstStreamFrame* rst_stream_frame; 824 QuicRstStreamFrame* rst_stream_frame;
819 QuicConnectionCloseFrame* connection_close_frame; 825 QuicConnectionCloseFrame* connection_close_frame;
820 QuicGoAwayFrame* goaway_frame; 826 QuicGoAwayFrame* goaway_frame;
821 QuicWindowUpdateFrame* window_update_frame; 827 QuicWindowUpdateFrame* window_update_frame;
822 QuicBlockedFrame* blocked_frame; 828 QuicBlockedFrame* blocked_frame;
823 }; 829 };
824 }; 830 };
825 831
826 typedef std::vector<QuicFrame> QuicFrames; 832 typedef std::vector<QuicFrame> QuicFrames;
827 833
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
1005 WriteStatus status; 1011 WriteStatus status;
1006 union { 1012 union {
1007 int bytes_written; // only valid when status is OK 1013 int bytes_written; // only valid when status is OK
1008 int error_code; // only valid when status is ERROR 1014 int error_code; // only valid when status is ERROR
1009 }; 1015 };
1010 }; 1016 };
1011 1017
1012 } // namespace net 1018 } // namespace net
1013 1019
1014 #endif // NET_QUIC_QUIC_PROTOCOL_H_ 1020 #endif // NET_QUIC_QUIC_PROTOCOL_H_
OLDNEW
« no previous file with comments | « net/quic/quic_packet_generator_test.cc ('k') | net/quic/quic_protocol.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698