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

Side by Side Diff: net/quic/core/quic_stream.cc

Issue 2589983002: Create a QUIC wrapper around scoped_refptr. (Closed)
Patch Set: rm = nullptr Created 4 years 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/core/quic_stream.h ('k') | net/quic/core/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/core/quic_stream.h" 5 #include "net/quic/core/quic_stream.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "net/quic/core/quic_bug_tracker.h" 8 #include "net/quic/core/quic_bug_tracker.h"
9 #include "net/quic/core/quic_flags.h" 9 #include "net/quic/core/quic_flags.h"
10 #include "net/quic/core/quic_flow_controller.h" 10 #include "net/quic/core/quic_flow_controller.h"
(...skipping 25 matching lines...) Expand all
36 return session->config()->ReceivedInitialStreamFlowControlWindowBytes(); 36 return session->config()->ReceivedInitialStreamFlowControlWindowBytes();
37 } 37 }
38 38
39 return kMinimumFlowControlSendWindow; 39 return kMinimumFlowControlSendWindow;
40 } 40 }
41 41
42 } // namespace 42 } // namespace
43 43
44 QuicStream::PendingData::PendingData( 44 QuicStream::PendingData::PendingData(
45 string data_in, 45 string data_in,
46 scoped_refptr<QuicAckListenerInterface> ack_listener_in) 46 QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener_in)
47 : data(std::move(data_in)), 47 : data(std::move(data_in)),
48 offset(0), 48 offset(0),
49 ack_listener(std::move(ack_listener_in)) {} 49 ack_listener(std::move(ack_listener_in)) {}
50 50
51 QuicStream::PendingData::~PendingData() {} 51 QuicStream::PendingData::~PendingData() {}
52 52
53 QuicStream::QuicStream(QuicStreamId id, QuicSession* session) 53 QuicStream::QuicStream(QuicStreamId id, QuicSession* session)
54 : queued_data_bytes_(0), 54 : queued_data_bytes_(0),
55 sequencer_(this, session->connection()->clock()), 55 sequencer_(this, session->connection()->clock()),
56 id_(id), 56 id_(id),
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 175
176 void QuicStream::CloseConnectionWithDetails(QuicErrorCode error, 176 void QuicStream::CloseConnectionWithDetails(QuicErrorCode error,
177 const string& details) { 177 const string& details) {
178 session()->connection()->CloseConnection( 178 session()->connection()->CloseConnection(
179 error, details, ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET); 179 error, details, ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
180 } 180 }
181 181
182 void QuicStream::WriteOrBufferData( 182 void QuicStream::WriteOrBufferData(
183 StringPiece data, 183 StringPiece data,
184 bool fin, 184 bool fin,
185 scoped_refptr<QuicAckListenerInterface> ack_listener) { 185 QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) {
186 if (data.empty() && !fin) { 186 if (data.empty() && !fin) {
187 QUIC_BUG << "data.empty() && !fin"; 187 QUIC_BUG << "data.empty() && !fin";
188 return; 188 return;
189 } 189 }
190 190
191 if (fin_buffered_) { 191 if (fin_buffered_) {
192 QUIC_BUG << "Fin already buffered"; 192 QUIC_BUG << "Fin already buffered";
193 return; 193 return;
194 } 194 }
195 if (write_side_closed_) { 195 if (write_side_closed_) {
(...skipping 16 matching lines...) Expand all
212 StringPiece remainder(data.substr(consumed_data.bytes_consumed)); 212 StringPiece remainder(data.substr(consumed_data.bytes_consumed));
213 queued_data_bytes_ += remainder.size(); 213 queued_data_bytes_ += remainder.size();
214 queued_data_.emplace_back(remainder.as_string(), ack_listener); 214 queued_data_.emplace_back(remainder.as_string(), ack_listener);
215 } 215 }
216 } 216 }
217 217
218 void QuicStream::OnCanWrite() { 218 void QuicStream::OnCanWrite() {
219 bool fin = false; 219 bool fin = false;
220 while (!queued_data_.empty()) { 220 while (!queued_data_.empty()) {
221 PendingData* pending_data = &queued_data_.front(); 221 PendingData* pending_data = &queued_data_.front();
222 scoped_refptr<QuicAckListenerInterface> ack_listener = 222 QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener =
223 pending_data->ack_listener; 223 pending_data->ack_listener;
224 if (queued_data_.size() == 1 && fin_buffered_) { 224 if (queued_data_.size() == 1 && fin_buffered_) {
225 fin = true; 225 fin = true;
226 } 226 }
227 if (pending_data->offset > 0 && 227 if (pending_data->offset > 0 &&
228 pending_data->offset >= pending_data->data.size()) { 228 pending_data->offset >= pending_data->data.size()) {
229 // This should be impossible because offset tracks the amount of 229 // This should be impossible because offset tracks the amount of
230 // pending_data written thus far. 230 // pending_data written thus far.
231 QUIC_BUG << "Pending offset is beyond available data. offset: " 231 QUIC_BUG << "Pending offset is beyond available data. offset: "
232 << pending_data->offset << " vs: " << pending_data->data.size(); 232 << pending_data->offset << " vs: " << pending_data->data.size();
(...skipping 30 matching lines...) Expand all
263 if (connection_flow_controller_->IsBlocked() && 263 if (connection_flow_controller_->IsBlocked() &&
264 !flow_controller_.IsBlocked()) { 264 !flow_controller_.IsBlocked()) {
265 session_->MarkConnectionLevelWriteBlocked(id()); 265 session_->MarkConnectionLevelWriteBlocked(id());
266 } 266 }
267 } 267 }
268 268
269 QuicConsumedData QuicStream::WritevData( 269 QuicConsumedData QuicStream::WritevData(
270 const struct iovec* iov, 270 const struct iovec* iov,
271 int iov_count, 271 int iov_count,
272 bool fin, 272 bool fin,
273 scoped_refptr<QuicAckListenerInterface> ack_listener) { 273 QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) {
274 if (write_side_closed_) { 274 if (write_side_closed_) {
275 DLOG(ERROR) << ENDPOINT << "Attempt to write when the write side is closed"; 275 DLOG(ERROR) << ENDPOINT << "Attempt to write when the write side is closed";
276 return QuicConsumedData(0, false); 276 return QuicConsumedData(0, false);
277 } 277 }
278 278
279 // How much data was provided. 279 // How much data was provided.
280 size_t write_length = 0; 280 size_t write_length = 0;
281 if (iov != nullptr) { 281 if (iov != nullptr) {
282 for (int i = 0; i < iov_count; ++i) { 282 for (int i = 0; i < iov_count; ++i) {
283 write_length += iov[i].iov_len; 283 write_length += iov[i].iov_len;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 } else { 344 } else {
345 session_->MarkConnectionLevelWriteBlocked(id()); 345 session_->MarkConnectionLevelWriteBlocked(id());
346 } 346 }
347 return consumed_data; 347 return consumed_data;
348 } 348 }
349 349
350 QuicConsumedData QuicStream::WritevDataInner( 350 QuicConsumedData QuicStream::WritevDataInner(
351 QuicIOVector iov, 351 QuicIOVector iov,
352 QuicStreamOffset offset, 352 QuicStreamOffset offset,
353 bool fin, 353 bool fin,
354 scoped_refptr<QuicAckListenerInterface> ack_notifier_delegate) { 354 QuicReferenceCountedPointer<QuicAckListenerInterface>
355 ack_notifier_delegate) {
355 return session()->WritevData(this, id(), iov, offset, fin, 356 return session()->WritevData(this, id(), iov, offset, fin,
356 std::move(ack_notifier_delegate)); 357 std::move(ack_notifier_delegate));
357 } 358 }
358 359
359 void QuicStream::CloseReadSide() { 360 void QuicStream::CloseReadSide() {
360 if (read_side_closed_) { 361 if (read_side_closed_) {
361 return; 362 return;
362 } 363 }
363 DVLOG(1) << ENDPOINT << "Done reading from stream " << id(); 364 DVLOG(1) << ENDPOINT << "Done reading from stream " << id();
364 365
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 } 474 }
474 } 475 }
475 476
476 void QuicStream::UpdateSendWindowOffset(QuicStreamOffset new_window) { 477 void QuicStream::UpdateSendWindowOffset(QuicStreamOffset new_window) {
477 if (flow_controller_.UpdateSendWindowOffset(new_window)) { 478 if (flow_controller_.UpdateSendWindowOffset(new_window)) {
478 OnCanWrite(); 479 OnCanWrite();
479 } 480 }
480 } 481 }
481 482
482 } // namespace net 483 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_stream.h ('k') | net/quic/core/quic_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698