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

Side by Side Diff: net/quic/quic_session.cc

Issue 667763003: Landing Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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
« no previous file with comments | « net/quic/quic_server_session.cc ('k') | net/quic/quic_session_test.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 #include "net/quic/quic_session.h" 5 #include "net/quic/quic_session.h"
6 6
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "net/quic/crypto/proof_verifier.h" 8 #include "net/quic/crypto/proof_verifier.h"
9 #include "net/quic/quic_connection.h" 9 #include "net/quic/quic_connection.h"
10 #include "net/quic/quic_flags.h" 10 #include "net/quic/quic_flags.h"
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 : connection_(connection), 104 : connection_(connection),
105 visitor_shim_(new VisitorShim(this)), 105 visitor_shim_(new VisitorShim(this)),
106 config_(config), 106 config_(config),
107 max_open_streams_(config_.MaxStreamsPerConnection()), 107 max_open_streams_(config_.MaxStreamsPerConnection()),
108 next_stream_id_(is_server() ? 2 : 5), 108 next_stream_id_(is_server() ? 2 : 5),
109 largest_peer_created_stream_id_(0), 109 largest_peer_created_stream_id_(0),
110 error_(QUIC_NO_ERROR), 110 error_(QUIC_NO_ERROR),
111 goaway_received_(false), 111 goaway_received_(false),
112 goaway_sent_(false), 112 goaway_sent_(false),
113 has_pending_handshake_(false) { 113 has_pending_handshake_(false) {
114 if (connection_->version() <= QUIC_VERSION_19) { 114 if (connection_->version() == QUIC_VERSION_19) {
115 flow_controller_.reset(new QuicFlowController( 115 flow_controller_.reset(new QuicFlowController(
116 connection_.get(), 0, is_server(), kDefaultFlowControlSendWindow, 116 connection_.get(), 0, is_server(), kDefaultFlowControlSendWindow,
117 config_.GetInitialFlowControlWindowToSend(), 117 config_.GetInitialFlowControlWindowToSend(),
118 config_.GetInitialFlowControlWindowToSend())); 118 config_.GetInitialFlowControlWindowToSend()));
119 } else { 119 } else {
120 flow_controller_.reset(new QuicFlowController( 120 flow_controller_.reset(new QuicFlowController(
121 connection_.get(), 0, is_server(), kDefaultFlowControlSendWindow, 121 connection_.get(), 0, is_server(), kDefaultFlowControlSendWindow,
122 config_.GetInitialSessionFlowControlWindowToSend(), 122 config_.GetInitialSessionFlowControlWindowToSend(),
123 config_.GetInitialSessionFlowControlWindowToSend())); 123 config_.GetInitialSessionFlowControlWindowToSend()));
124 } 124 }
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 // when FIN/RSTs for old streams are lost or arrive out of order. 480 // when FIN/RSTs for old streams are lost or arrive out of order.
481 // Use a minimum number of additional streams, or a percentage increase, 481 // Use a minimum number of additional streams, or a percentage increase,
482 // whichever is larger. 482 // whichever is larger.
483 max_streams = 483 max_streams =
484 max(max_streams + kMaxStreamsMinimumIncrement, 484 max(max_streams + kMaxStreamsMinimumIncrement,
485 static_cast<uint32>(max_streams * kMaxStreamsMultiplier)); 485 static_cast<uint32>(max_streams * kMaxStreamsMultiplier));
486 } 486 }
487 set_max_open_streams(max_streams); 487 set_max_open_streams(max_streams);
488 } 488 }
489 489
490 if (version <= QUIC_VERSION_19) { 490 if (version == QUIC_VERSION_19) {
491 // QUIC_VERSION_17,18,19 don't support independent stream/session flow 491 // QUIC_VERSION_19 doesn't support independent stream/session flow
492 // control windows. 492 // control windows.
493 if (config_.HasReceivedInitialFlowControlWindowBytes()) { 493 if (config_.HasReceivedInitialFlowControlWindowBytes()) {
494 // Streams which were created before the SHLO was received (0-RTT 494 // Streams which were created before the SHLO was received (0-RTT
495 // requests) are now informed of the peer's initial flow control window. 495 // requests) are now informed of the peer's initial flow control window.
496 uint32 new_window = config_.ReceivedInitialFlowControlWindowBytes(); 496 uint32 new_window = config_.ReceivedInitialFlowControlWindowBytes();
497 OnNewStreamFlowControlWindow(new_window); 497 OnNewStreamFlowControlWindow(new_window);
498 OnNewSessionFlowControlWindow(new_window); 498 OnNewSessionFlowControlWindow(new_window);
499 } 499 }
500 500
501 return; 501 return;
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
708 return false; 708 return false;
709 } 709 }
710 if (id % 2 == next_stream_id_ % 2) { 710 if (id % 2 == next_stream_id_ % 2) {
711 // Locally created streams are strictly in-order. If the id is in the 711 // Locally created streams are strictly in-order. If the id is in the
712 // range of created streams and it's not active, it must have been closed. 712 // range of created streams and it's not active, it must have been closed.
713 return id < next_stream_id_; 713 return id < next_stream_id_;
714 } 714 }
715 // For peer created streams, we also need to consider implicitly created 715 // For peer created streams, we also need to consider implicitly created
716 // streams. 716 // streams.
717 return id <= largest_peer_created_stream_id_ && 717 return id <= largest_peer_created_stream_id_ &&
718 implicitly_created_streams_.count(id) == 0; 718 !ContainsKey(implicitly_created_streams_, id);
719 } 719 }
720 720
721 size_t QuicSession::GetNumOpenStreams() const { 721 size_t QuicSession::GetNumOpenStreams() const {
722 return stream_map_.size() + implicitly_created_streams_.size(); 722 return stream_map_.size() + implicitly_created_streams_.size();
723 } 723 }
724 724
725 void QuicSession::MarkWriteBlocked(QuicStreamId id, QuicPriority priority) { 725 void QuicSession::MarkWriteBlocked(QuicStreamId id, QuicPriority priority) {
726 #ifndef NDEBUG 726 #ifndef NDEBUG
727 ReliableQuicStream* stream = GetStream(id); 727 ReliableQuicStream* stream = GetStream(id);
728 if (stream != nullptr) { 728 if (stream != nullptr) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
763 763
764 if (FLAGS_close_quic_connection_unfinished_streams_2 && 764 if (FLAGS_close_quic_connection_unfinished_streams_2 &&
765 connection()->connected() && 765 connection()->connected() &&
766 locally_closed_streams_highest_offset_.size() > max_open_streams_) { 766 locally_closed_streams_highest_offset_.size() > max_open_streams_) {
767 // A buggy client may fail to send FIN/RSTs. Don't tolerate this. 767 // A buggy client may fail to send FIN/RSTs. Don't tolerate this.
768 connection_->SendConnectionClose(QUIC_TOO_MANY_UNFINISHED_STREAMS); 768 connection_->SendConnectionClose(QUIC_TOO_MANY_UNFINISHED_STREAMS);
769 } 769 }
770 } 770 }
771 771
772 void QuicSession::OnSuccessfulVersionNegotiation(const QuicVersion& version) { 772 void QuicSession::OnSuccessfulVersionNegotiation(const QuicVersion& version) {
773 if (version < QUIC_VERSION_19) {
774 flow_controller_->Disable();
775 }
776
777 // Disable stream level flow control based on negotiated version. Streams may 773 // Disable stream level flow control based on negotiated version. Streams may
778 // have been created with a different version. 774 // have been created with a different version.
779 if (version < QUIC_VERSION_21) { 775 if (version < QUIC_VERSION_21) {
780 GetCryptoStream()->flow_controller()->Disable(); 776 GetCryptoStream()->flow_controller()->Disable();
781 headers_stream_->flow_controller()->Disable(); 777 headers_stream_->flow_controller()->Disable();
782 } 778 }
783 } 779 }
784 780
785 bool QuicSession::IsConnectionFlowControlBlocked() const { 781 bool QuicSession::IsConnectionFlowControlBlocked() const {
786 return flow_controller_->IsBlocked(); 782 return flow_controller_->IsBlocked();
787 } 783 }
788 784
789 bool QuicSession::IsStreamFlowControlBlocked() { 785 bool QuicSession::IsStreamFlowControlBlocked() {
790 if (headers_stream_->flow_controller()->IsBlocked() || 786 if (headers_stream_->flow_controller()->IsBlocked() ||
791 GetCryptoStream()->flow_controller()->IsBlocked()) { 787 GetCryptoStream()->flow_controller()->IsBlocked()) {
792 return true; 788 return true;
793 } 789 }
794 for (DataStreamMap::iterator it = stream_map_.begin(); 790 for (DataStreamMap::iterator it = stream_map_.begin();
795 it != stream_map_.end(); ++it) { 791 it != stream_map_.end(); ++it) {
796 if (it->second->flow_controller()->IsBlocked()) { 792 if (it->second->flow_controller()->IsBlocked()) {
797 return true; 793 return true;
798 } 794 }
799 } 795 }
800 return false; 796 return false;
801 } 797 }
802 798
803 } // namespace net 799 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_server_session.cc ('k') | net/quic/quic_session_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698