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

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

Issue 339803004: Introduce QUIC_VERSION_20: allowing endpoints to set different (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 6 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_stream_factory.cc ('k') | net/quic/reliable_quic_stream_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/reliable_quic_stream.h" 5 #include "net/quic/reliable_quic_stream.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "net/quic/iovector.h" 8 #include "net/quic/iovector.h"
9 #include "net/quic/quic_flow_controller.h" 9 #include "net/quic/quic_flow_controller.h"
10 #include "net/quic/quic_session.h" 10 #include "net/quic/quic_session.h"
11 #include "net/quic/quic_write_blocked_list.h" 11 #include "net/quic/quic_write_blocked_list.h"
12 12
13 using base::StringPiece; 13 using base::StringPiece;
14 using std::min; 14 using std::min;
15 15
16 namespace net { 16 namespace net {
17 17
18 #define ENDPOINT (is_server_ ? "Server: " : " Client: ") 18 #define ENDPOINT (is_server_ ? "Server: " : " Client: ")
19 19
20 namespace { 20 namespace {
21 21
22 struct iovec MakeIovec(StringPiece data) { 22 struct iovec MakeIovec(StringPiece data) {
23 struct iovec iov = {const_cast<char*>(data.data()), 23 struct iovec iov = {const_cast<char*>(data.data()),
24 static_cast<size_t>(data.size())}; 24 static_cast<size_t>(data.size())};
25 return iov; 25 return iov;
26 } 26 }
27 27
28 size_t GetInitialStreamFlowControlWindowToSend(QuicSession* session) {
29 QuicVersion version = session->connection()->version();
30 if (version <= QUIC_VERSION_19) {
31 return session->config()->GetInitialFlowControlWindowToSend();
32 }
33
34 return session->config()->GetInitialStreamFlowControlWindowToSend();
35 }
36
37 size_t GetReceivedFlowControlWindow(QuicSession* session) {
38 QuicVersion version = session->connection()->version();
39 if (version <= QUIC_VERSION_19) {
40 if (session->config()->HasReceivedInitialFlowControlWindowBytes()) {
41 return session->config()->ReceivedInitialFlowControlWindowBytes();
42 }
43
44 return kDefaultFlowControlSendWindow;
45 }
46
47 // Version must be >= QUIC_VERSION_20, so we check for stream specific flow
48 // control window.
49 if (session->config()->HasReceivedInitialStreamFlowControlWindowBytes()) {
50 return session->config()->ReceivedInitialStreamFlowControlWindowBytes();
51 }
52
53 return kDefaultFlowControlSendWindow;
54 }
55
28 } // namespace 56 } // namespace
29 57
30 // Wrapper that aggregates OnAckNotifications for packets sent using 58 // Wrapper that aggregates OnAckNotifications for packets sent using
31 // WriteOrBufferData and delivers them to the original 59 // WriteOrBufferData and delivers them to the original
32 // QuicAckNotifier::DelegateInterface after all bytes written using 60 // QuicAckNotifier::DelegateInterface after all bytes written using
33 // WriteOrBufferData are acked. This level of indirection is 61 // WriteOrBufferData are acked. This level of indirection is
34 // necessary because the delegate interface provides no mechanism that 62 // necessary because the delegate interface provides no mechanism that
35 // WriteOrBufferData can use to inform it that the write required 63 // WriteOrBufferData can use to inform it that the write required
36 // multiple WritevData calls or that only part of the data has been 64 // multiple WritevData calls or that only part of the data has been
37 // sent out by the time ACKs start arriving. 65 // sent out by the time ACKs start arriving.
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 read_side_closed_(false), 148 read_side_closed_(false),
121 write_side_closed_(false), 149 write_side_closed_(false),
122 fin_buffered_(false), 150 fin_buffered_(false),
123 fin_sent_(false), 151 fin_sent_(false),
124 fin_received_(false), 152 fin_received_(false),
125 rst_sent_(false), 153 rst_sent_(false),
126 rst_received_(false), 154 rst_received_(false),
127 fec_policy_(FEC_PROTECT_OPTIONAL), 155 fec_policy_(FEC_PROTECT_OPTIONAL),
128 is_server_(session_->is_server()), 156 is_server_(session_->is_server()),
129 flow_controller_( 157 flow_controller_(
130 session_->connection(), 158 session_->connection(), id_, is_server_,
131 id_, 159 GetReceivedFlowControlWindow(session),
132 is_server_, 160 GetInitialStreamFlowControlWindowToSend(session),
133 session_->config()->HasReceivedInitialFlowControlWindowBytes() ? 161 GetInitialStreamFlowControlWindowToSend(session)),
134 session_->config()->ReceivedInitialFlowControlWindowBytes() :
135 kDefaultFlowControlSendWindow,
136 session_->config()->GetInitialFlowControlWindowToSend(),
137 session_->config()->GetInitialFlowControlWindowToSend()),
138 connection_flow_controller_(session_->flow_controller()) { 162 connection_flow_controller_(session_->flow_controller()) {
139 } 163 }
140 164
141 ReliableQuicStream::~ReliableQuicStream() { 165 ReliableQuicStream::~ReliableQuicStream() {
142 } 166 }
143 167
144 bool ReliableQuicStream::OnStreamFrame(const QuicStreamFrame& frame) { 168 bool ReliableQuicStream::OnStreamFrame(const QuicStreamFrame& frame) {
145 if (read_side_closed_) { 169 if (read_side_closed_) {
146 DVLOG(1) << ENDPOINT << "Ignoring frame " << frame.stream_id; 170 DVLOG(1) << ENDPOINT << "Ignoring frame " << frame.stream_id;
147 // We don't want to be reading: blackhole the data. 171 // We don't want to be reading: blackhole the data.
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 connection_flow_controller_->AddBytesConsumed(bytes); 516 connection_flow_controller_->AddBytesConsumed(bytes);
493 } 517 }
494 } 518 }
495 519
496 bool ReliableQuicStream::IsFlowControlBlocked() { 520 bool ReliableQuicStream::IsFlowControlBlocked() {
497 return flow_controller_.IsBlocked() || 521 return flow_controller_.IsBlocked() ||
498 connection_flow_controller_->IsBlocked(); 522 connection_flow_controller_->IsBlocked();
499 } 523 }
500 524
501 } // namespace net 525 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_stream_factory.cc ('k') | net/quic/reliable_quic_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698