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

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

Issue 2229393003: net: Use stl utilities from the base namespace (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 4 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/core/quic_sent_packet_manager_test.cc ('k') | net/quic/core/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/core/quic_session.h" 5 #include "net/quic/core/quic_session.h"
6 6
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "base/strings/string_number_conversions.h" 8 #include "base/strings/string_number_conversions.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "net/quic/core/crypto/proof_verifier.h" 10 #include "net/quic/core/crypto/proof_verifier.h"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 50
51 void QuicSession::Initialize() { 51 void QuicSession::Initialize() {
52 connection_->set_visitor(this); 52 connection_->set_visitor(this);
53 connection_->SetFromConfig(config_); 53 connection_->SetFromConfig(config_);
54 54
55 DCHECK_EQ(kCryptoStreamId, GetCryptoStream()->id()); 55 DCHECK_EQ(kCryptoStreamId, GetCryptoStream()->id());
56 static_stream_map_[kCryptoStreamId] = GetCryptoStream(); 56 static_stream_map_[kCryptoStreamId] = GetCryptoStream();
57 } 57 }
58 58
59 QuicSession::~QuicSession() { 59 QuicSession::~QuicSession() {
60 STLDeleteElements(&closed_streams_); 60 base::STLDeleteElements(&closed_streams_);
61 STLDeleteValues(&dynamic_stream_map_); 61 base::STLDeleteValues(&dynamic_stream_map_);
62 62
63 DLOG_IF(WARNING, num_locally_closed_incoming_streams_highest_offset() > 63 DLOG_IF(WARNING, num_locally_closed_incoming_streams_highest_offset() >
64 max_open_incoming_streams_) 64 max_open_incoming_streams_)
65 << "Surprisingly high number of locally closed peer initiated streams" 65 << "Surprisingly high number of locally closed peer initiated streams"
66 "still waiting for final byte offset: " 66 "still waiting for final byte offset: "
67 << num_locally_closed_incoming_streams_highest_offset(); 67 << num_locally_closed_incoming_streams_highest_offset();
68 DLOG_IF(WARNING, GetNumLocallyClosedOutgoingStreamsHighestOffset() > 68 DLOG_IF(WARNING, GetNumLocallyClosedOutgoingStreamsHighestOffset() >
69 max_open_outgoing_streams_) 69 max_open_outgoing_streams_)
70 << "Surprisingly high number of locally closed self initiated streams" 70 << "Surprisingly high number of locally closed self initiated streams"
71 "still waiting for final byte offset: " 71 "still waiting for final byte offset: "
(...skipping 11 matching lines...) Expand all
83 if (frame.fin) { 83 if (frame.fin) {
84 QuicStreamOffset final_byte_offset = frame.offset + frame.data_length; 84 QuicStreamOffset final_byte_offset = frame.offset + frame.data_length;
85 UpdateFlowControlOnFinalReceivedByteOffset(stream_id, final_byte_offset); 85 UpdateFlowControlOnFinalReceivedByteOffset(stream_id, final_byte_offset);
86 } 86 }
87 return; 87 return;
88 } 88 }
89 stream->OnStreamFrame(frame); 89 stream->OnStreamFrame(frame);
90 } 90 }
91 91
92 void QuicSession::OnRstStream(const QuicRstStreamFrame& frame) { 92 void QuicSession::OnRstStream(const QuicRstStreamFrame& frame) {
93 if (ContainsKey(static_stream_map_, frame.stream_id)) { 93 if (base::ContainsKey(static_stream_map_, frame.stream_id)) {
94 connection()->CloseConnection( 94 connection()->CloseConnection(
95 QUIC_INVALID_STREAM_ID, "Attempt to reset a static stream", 95 QUIC_INVALID_STREAM_ID, "Attempt to reset a static stream",
96 ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET); 96 ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
97 return; 97 return;
98 } 98 }
99 99
100 ReliableQuicStream* stream = GetOrCreateDynamicStream(frame.stream_id); 100 ReliableQuicStream* stream = GetOrCreateDynamicStream(frame.stream_id);
101 if (!stream) { 101 if (!stream) {
102 HandleRstOnValidNonexistentStream(frame); 102 HandleRstOnValidNonexistentStream(frame);
103 return; // Errors are handled by GetOrCreateStream. 103 return; // Errors are handled by GetOrCreateStream.
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 } 263 }
264 QuicConsumedData data = 264 QuicConsumedData data =
265 connection_->SendStreamData(id, iov, offset, fin, ack_notifier_delegate); 265 connection_->SendStreamData(id, iov, offset, fin, ack_notifier_delegate);
266 write_blocked_streams_.UpdateBytesForStream(id, data.bytes_consumed); 266 write_blocked_streams_.UpdateBytesForStream(id, data.bytes_consumed);
267 return data; 267 return data;
268 } 268 }
269 269
270 void QuicSession::SendRstStream(QuicStreamId id, 270 void QuicSession::SendRstStream(QuicStreamId id,
271 QuicRstStreamErrorCode error, 271 QuicRstStreamErrorCode error,
272 QuicStreamOffset bytes_written) { 272 QuicStreamOffset bytes_written) {
273 if (ContainsKey(static_stream_map_, id)) { 273 if (base::ContainsKey(static_stream_map_, id)) {
274 QUIC_BUG << "Cannot send RST for a static stream with ID " << id; 274 QUIC_BUG << "Cannot send RST for a static stream with ID " << id;
275 return; 275 return;
276 } 276 }
277 277
278 if (connection()->connected()) { 278 if (connection()->connected()) {
279 // Only send a RST_STREAM frame if still connected. 279 // Only send a RST_STREAM frame if still connected.
280 connection_->SendRstStream(id, error, bytes_written); 280 connection_->SendRstStream(id, error, bytes_written);
281 } 281 }
282 CloseStreamInner(id, true); 282 CloseStreamInner(id, true);
283 } 283 }
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 void QuicSession::OnCryptoHandshakeMessageReceived( 528 void QuicSession::OnCryptoHandshakeMessageReceived(
529 const CryptoHandshakeMessage& /*message*/) {} 529 const CryptoHandshakeMessage& /*message*/) {}
530 530
531 QuicConfig* QuicSession::config() { 531 QuicConfig* QuicSession::config() {
532 return &config_; 532 return &config_;
533 } 533 }
534 534
535 void QuicSession::ActivateStream(ReliableQuicStream* stream) { 535 void QuicSession::ActivateStream(ReliableQuicStream* stream) {
536 DVLOG(1) << ENDPOINT << "num_streams: " << dynamic_stream_map_.size() 536 DVLOG(1) << ENDPOINT << "num_streams: " << dynamic_stream_map_.size()
537 << ". activating " << stream->id(); 537 << ". activating " << stream->id();
538 DCHECK(!ContainsKey(dynamic_stream_map_, stream->id())); 538 DCHECK(!base::ContainsKey(dynamic_stream_map_, stream->id()));
539 DCHECK(!ContainsKey(static_stream_map_, stream->id())); 539 DCHECK(!base::ContainsKey(static_stream_map_, stream->id()));
540 dynamic_stream_map_[stream->id()] = stream; 540 dynamic_stream_map_[stream->id()] = stream;
541 if (IsIncomingStream(stream->id())) { 541 if (IsIncomingStream(stream->id())) {
542 ++num_dynamic_incoming_streams_; 542 ++num_dynamic_incoming_streams_;
543 } 543 }
544 // Increase the number of streams being emulated when a new one is opened. 544 // Increase the number of streams being emulated when a new one is opened.
545 connection_->SetNumOpenStreams(dynamic_stream_map_.size()); 545 connection_->SetNumOpenStreams(dynamic_stream_map_.size());
546 } 546 }
547 547
548 QuicStreamId QuicSession::GetNextOutgoingStreamId() { 548 QuicStreamId QuicSession::GetNextOutgoingStreamId() {
549 QuicStreamId id = next_outgoing_stream_id_; 549 QuicStreamId id = next_outgoing_stream_id_;
550 next_outgoing_stream_id_ += 2; 550 next_outgoing_stream_id_ += 2;
551 return id; 551 return id;
552 } 552 }
553 553
554 ReliableQuicStream* QuicSession::GetOrCreateStream( 554 ReliableQuicStream* QuicSession::GetOrCreateStream(
555 const QuicStreamId stream_id) { 555 const QuicStreamId stream_id) {
556 StaticStreamMap::iterator it = static_stream_map_.find(stream_id); 556 StaticStreamMap::iterator it = static_stream_map_.find(stream_id);
557 if (it != static_stream_map_.end()) { 557 if (it != static_stream_map_.end()) {
558 return it->second; 558 return it->second;
559 } 559 }
560 return GetOrCreateDynamicStream(stream_id); 560 return GetOrCreateDynamicStream(stream_id);
561 } 561 }
562 562
563 void QuicSession::StreamDraining(QuicStreamId stream_id) { 563 void QuicSession::StreamDraining(QuicStreamId stream_id) {
564 DCHECK(ContainsKey(dynamic_stream_map_, stream_id)); 564 DCHECK(base::ContainsKey(dynamic_stream_map_, stream_id));
565 if (!ContainsKey(draining_streams_, stream_id)) { 565 if (!base::ContainsKey(draining_streams_, stream_id)) {
566 draining_streams_.insert(stream_id); 566 draining_streams_.insert(stream_id);
567 if (IsIncomingStream(stream_id)) { 567 if (IsIncomingStream(stream_id)) {
568 ++num_draining_incoming_streams_; 568 ++num_draining_incoming_streams_;
569 } 569 }
570 } 570 }
571 } 571 }
572 572
573 bool QuicSession::MaybeIncreaseLargestPeerStreamId( 573 bool QuicSession::MaybeIncreaseLargestPeerStreamId(
574 const QuicStreamId stream_id) { 574 const QuicStreamId stream_id) {
575 if (stream_id <= largest_peer_created_stream_id_) { 575 if (stream_id <= largest_peer_created_stream_id_) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 607
608 bool QuicSession::ShouldYield(QuicStreamId stream_id) { 608 bool QuicSession::ShouldYield(QuicStreamId stream_id) {
609 if (stream_id == currently_writing_stream_id_) { 609 if (stream_id == currently_writing_stream_id_) {
610 return false; 610 return false;
611 } 611 }
612 return write_blocked_streams()->ShouldYield(stream_id); 612 return write_blocked_streams()->ShouldYield(stream_id);
613 } 613 }
614 614
615 ReliableQuicStream* QuicSession::GetOrCreateDynamicStream( 615 ReliableQuicStream* QuicSession::GetOrCreateDynamicStream(
616 const QuicStreamId stream_id) { 616 const QuicStreamId stream_id) {
617 DCHECK(!ContainsKey(static_stream_map_, stream_id)) 617 DCHECK(!base::ContainsKey(static_stream_map_, stream_id))
618 << "Attempt to call GetOrCreateDynamicStream for a static stream"; 618 << "Attempt to call GetOrCreateDynamicStream for a static stream";
619 619
620 DynamicStreamMap::iterator it = dynamic_stream_map_.find(stream_id); 620 DynamicStreamMap::iterator it = dynamic_stream_map_.find(stream_id);
621 if (it != dynamic_stream_map_.end()) { 621 if (it != dynamic_stream_map_.end()) {
622 return it->second; 622 return it->second;
623 } 623 }
624 624
625 if (IsClosedStream(stream_id)) { 625 if (IsClosedStream(stream_id)) {
626 return nullptr; 626 return nullptr;
627 } 627 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 // Stream is active 676 // Stream is active
677 return false; 677 return false;
678 } 678 }
679 if (!IsIncomingStream(id)) { 679 if (!IsIncomingStream(id)) {
680 // Locally created streams are strictly in-order. If the id is in the 680 // Locally created streams are strictly in-order. If the id is in the
681 // range of created streams and it's not active, it must have been closed. 681 // range of created streams and it's not active, it must have been closed.
682 return id < next_outgoing_stream_id_; 682 return id < next_outgoing_stream_id_;
683 } 683 }
684 // For peer created streams, we also need to consider available streams. 684 // For peer created streams, we also need to consider available streams.
685 return id <= largest_peer_created_stream_id_ && 685 return id <= largest_peer_created_stream_id_ &&
686 !ContainsKey(available_streams_, id); 686 !base::ContainsKey(available_streams_, id);
687 } 687 }
688 688
689 bool QuicSession::IsOpenStream(QuicStreamId id) { 689 bool QuicSession::IsOpenStream(QuicStreamId id) {
690 DCHECK_NE(0u, id); 690 DCHECK_NE(0u, id);
691 if (ContainsKey(static_stream_map_, id) || 691 if (base::ContainsKey(static_stream_map_, id) ||
692 ContainsKey(dynamic_stream_map_, id)) { 692 base::ContainsKey(dynamic_stream_map_, id)) {
693 // Stream is active 693 // Stream is active
694 return true; 694 return true;
695 } 695 }
696 return false; 696 return false;
697 } 697 }
698 698
699 size_t QuicSession::GetNumOpenIncomingStreams() const { 699 size_t QuicSession::GetNumOpenIncomingStreams() const {
700 return num_dynamic_incoming_streams_ - num_draining_incoming_streams_ + 700 return num_dynamic_incoming_streams_ - num_draining_incoming_streams_ +
701 num_locally_closed_incoming_streams_highest_offset_; 701 num_locally_closed_incoming_streams_highest_offset_;
702 } 702 }
(...skipping 18 matching lines...) Expand all
721 write_blocked_streams_.AddStream(id); 721 write_blocked_streams_.AddStream(id);
722 } 722 }
723 723
724 bool QuicSession::HasDataToWrite() const { 724 bool QuicSession::HasDataToWrite() const {
725 return write_blocked_streams_.HasWriteBlockedCryptoOrHeadersStream() || 725 return write_blocked_streams_.HasWriteBlockedCryptoOrHeadersStream() ||
726 write_blocked_streams_.HasWriteBlockedDataStreams() || 726 write_blocked_streams_.HasWriteBlockedDataStreams() ||
727 connection_->HasQueuedData(); 727 connection_->HasQueuedData();
728 } 728 }
729 729
730 void QuicSession::PostProcessAfterData() { 730 void QuicSession::PostProcessAfterData() {
731 STLDeleteElements(&closed_streams_); 731 base::STLDeleteElements(&closed_streams_);
732 closed_streams_.clear(); 732 closed_streams_.clear();
733 } 733 }
734 734
735 size_t QuicSession::GetNumDynamicOutgoingStreams() const { 735 size_t QuicSession::GetNumDynamicOutgoingStreams() const {
736 return dynamic_stream_map_.size() - num_dynamic_incoming_streams_; 736 return dynamic_stream_map_.size() - num_dynamic_incoming_streams_;
737 } 737 }
738 738
739 size_t QuicSession::GetNumDrainingOutgoingStreams() const { 739 size_t QuicSession::GetNumDrainingOutgoingStreams() const {
740 return draining_streams_.size() - num_draining_incoming_streams_; 740 return draining_streams_.size() - num_draining_incoming_streams_;
741 } 741 }
(...skipping 23 matching lines...) Expand all
765 765
766 size_t QuicSession::MaxAvailableStreams() const { 766 size_t QuicSession::MaxAvailableStreams() const {
767 return max_open_incoming_streams_ * kMaxAvailableStreamsMultiplier; 767 return max_open_incoming_streams_ * kMaxAvailableStreamsMultiplier;
768 } 768 }
769 769
770 bool QuicSession::IsIncomingStream(QuicStreamId id) const { 770 bool QuicSession::IsIncomingStream(QuicStreamId id) const {
771 return id % 2 != next_outgoing_stream_id_ % 2; 771 return id % 2 != next_outgoing_stream_id_ % 2;
772 } 772 }
773 773
774 } // namespace net 774 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_sent_packet_manager_test.cc ('k') | net/quic/core/quic_session_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698