| Index: net/quic/core/quic_session.cc
|
| diff --git a/net/quic/core/quic_session.cc b/net/quic/core/quic_session.cc
|
| index 453d3b78473ba828130c92403ee1d86b7b49b9a0..9508fe39524d94d1f6603cf49a52a2503eccc917 100644
|
| --- a/net/quic/core/quic_session.cc
|
| +++ b/net/quic/core/quic_session.cc
|
| @@ -8,9 +8,9 @@
|
| #include <utility>
|
|
|
| #include "net/quic/core/quic_connection.h"
|
| -#include "net/quic/core/quic_flags.h"
|
| #include "net/quic/core/quic_flow_controller.h"
|
| #include "net/quic/platform/api/quic_bug_tracker.h"
|
| +#include "net/quic/platform/api/quic_flags.h"
|
| #include "net/quic/platform/api/quic_logging.h"
|
| #include "net/quic/platform/api/quic_map_util.h"
|
| #include "net/quic/platform/api/quic_str_cat.h"
|
| @@ -50,8 +50,8 @@ void QuicSession::Initialize() {
|
| connection_->set_visitor(this);
|
| connection_->SetFromConfig(config_);
|
|
|
| - DCHECK_EQ(kCryptoStreamId, GetCryptoStream()->id());
|
| - static_stream_map_[kCryptoStreamId] = GetCryptoStream();
|
| + DCHECK_EQ(kCryptoStreamId, GetMutableCryptoStream()->id());
|
| + static_stream_map_[kCryptoStreamId] = GetMutableCryptoStream();
|
| }
|
|
|
| QuicSession::~QuicSession() {
|
| @@ -288,14 +288,14 @@ QuicConsumedData QuicSession::WritevData(
|
| QuicStreamId id,
|
| QuicIOVector iov,
|
| QuicStreamOffset offset,
|
| - bool fin,
|
| + StreamSendingState state,
|
| QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) {
|
| // This check is an attempt to deal with potential memory corruption
|
| // in which |id| ends up set to 1 (the crypto stream id). If this happen
|
| // it might end up resulting in unencrypted stream data being sent.
|
| // While this is impossible to avoid given sufficient corruption, this
|
| // seems like a reasonable mitigation.
|
| - if (id == kCryptoStreamId && stream != GetCryptoStream()) {
|
| + if (id == kCryptoStreamId && stream != GetMutableCryptoStream()) {
|
| QUIC_BUG << "Stream id mismatch";
|
| connection_->CloseConnection(
|
| QUIC_INTERNAL_ERROR,
|
| @@ -308,7 +308,7 @@ QuicConsumedData QuicSession::WritevData(
|
| // up write blocked until OnCanWrite is next called.
|
| return QuicConsumedData(0, false);
|
| }
|
| - QuicConsumedData data = connection_->SendStreamData(id, iov, offset, fin,
|
| + QuicConsumedData data = connection_->SendStreamData(id, iov, offset, state,
|
| std::move(ack_listener));
|
| write_blocked_streams_.UpdateBytesForStream(id, data.bytes_consumed);
|
| return data;
|
| @@ -425,28 +425,25 @@ void QuicSession::UpdateFlowControlOnFinalReceivedByteOffset(
|
| }
|
| }
|
|
|
| -bool QuicSession::IsEncryptionEstablished() {
|
| +bool QuicSession::IsEncryptionEstablished() const {
|
| return GetCryptoStream()->encryption_established();
|
| }
|
|
|
| -bool QuicSession::IsCryptoHandshakeConfirmed() {
|
| +bool QuicSession::IsCryptoHandshakeConfirmed() const {
|
| return GetCryptoStream()->handshake_confirmed();
|
| }
|
|
|
| void QuicSession::OnConfigNegotiated() {
|
| connection_->SetFromConfig(config_);
|
|
|
| - const QuicVersion version = connection()->version();
|
| uint32_t max_streams = 0;
|
| - if (version > QUIC_VERSION_34 &&
|
| - config_.HasReceivedMaxIncomingDynamicStreams()) {
|
| + if (config_.HasReceivedMaxIncomingDynamicStreams()) {
|
| max_streams = config_.ReceivedMaxIncomingDynamicStreams();
|
| } else {
|
| max_streams = config_.MaxStreamsPerConnection();
|
| }
|
| set_max_open_outgoing_streams(max_streams);
|
| - if (FLAGS_quic_reloadable_flag_quic_large_ifw_options &&
|
| - perspective() == Perspective::IS_SERVER) {
|
| + if (perspective() == Perspective::IS_SERVER) {
|
| if (config_.HasReceivedConnectionOptions()) {
|
| // The following variations change the initial receive flow control
|
| // window sizes.
|
| @@ -468,25 +465,18 @@ void QuicSession::OnConfigNegotiated() {
|
| }
|
| }
|
|
|
| - if (version <= QUIC_VERSION_34) {
|
| - // A small number of additional incoming streams beyond the limit should be
|
| - // allowed. This helps avoid early connection termination when FIN/RSTs for
|
| - // old streams are lost or arrive out of order.
|
| - // Use a minimum number of additional streams, or a percentage increase,
|
| - // whichever is larger.
|
| - uint32_t max_incoming_streams =
|
| - std::max(max_streams + kMaxStreamsMinimumIncrement,
|
| - static_cast<uint32_t>(max_streams * kMaxStreamsMultiplier));
|
| - set_max_open_incoming_streams(max_incoming_streams);
|
| - } else {
|
| - uint32_t max_incoming_streams_to_send =
|
| - config_.GetMaxIncomingDynamicStreamsToSend();
|
| - uint32_t max_incoming_streams =
|
| - std::max(max_incoming_streams_to_send + kMaxStreamsMinimumIncrement,
|
| - static_cast<uint32_t>(max_incoming_streams_to_send *
|
| - kMaxStreamsMultiplier));
|
| - set_max_open_incoming_streams(max_incoming_streams);
|
| - }
|
| + // A small number of additional incoming streams beyond the limit should be
|
| + // allowed. This helps avoid early connection termination when FIN/RSTs for
|
| + // old streams are lost or arrive out of order.
|
| + // Use a minimum number of additional streams, or a percentage increase,
|
| + // whichever is larger.
|
| + uint32_t max_incoming_streams_to_send =
|
| + config_.GetMaxIncomingDynamicStreamsToSend();
|
| + uint32_t max_incoming_streams =
|
| + std::max(max_incoming_streams_to_send + kMaxStreamsMinimumIncrement,
|
| + static_cast<uint32_t>(max_incoming_streams_to_send *
|
| + kMaxStreamsMultiplier));
|
| + set_max_open_incoming_streams(max_incoming_streams);
|
|
|
| if (config_.HasReceivedInitialStreamFlowControlWindowBytes()) {
|
| // Streams which were created before the SHLO was received (0-RTT
|
|
|