| OLD | NEW |
| 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_flow_controller.h" | 10 #include "net/quic/quic_flow_controller.h" |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 STLDeleteElements(&closed_streams_); | 127 STLDeleteElements(&closed_streams_); |
| 128 STLDeleteValues(&stream_map_); | 128 STLDeleteValues(&stream_map_); |
| 129 | 129 |
| 130 DLOG_IF(WARNING, | 130 DLOG_IF(WARNING, |
| 131 locally_closed_streams_highest_offset_.size() > max_open_streams_) | 131 locally_closed_streams_highest_offset_.size() > max_open_streams_) |
| 132 << "Surprisingly high number of locally closed streams still waiting for " | 132 << "Surprisingly high number of locally closed streams still waiting for " |
| 133 "final byte offset: " << locally_closed_streams_highest_offset_.size(); | 133 "final byte offset: " << locally_closed_streams_highest_offset_.size(); |
| 134 } | 134 } |
| 135 | 135 |
| 136 void QuicSession::OnStreamFrames(const vector<QuicStreamFrame>& frames) { | 136 void QuicSession::OnStreamFrames(const vector<QuicStreamFrame>& frames) { |
| 137 for (size_t i = 0; i < frames.size(); ++i) { | 137 for (size_t i = 0; i < frames.size() && connection_->connected(); ++i) { |
| 138 // TODO(rch) deal with the error case of stream id 0. | 138 // TODO(rch) deal with the error case of stream id 0. |
| 139 const QuicStreamFrame& frame = frames[i]; | 139 const QuicStreamFrame& frame = frames[i]; |
| 140 QuicStreamId stream_id = frame.stream_id; | 140 QuicStreamId stream_id = frame.stream_id; |
| 141 ReliableQuicStream* stream = GetStream(stream_id); | 141 ReliableQuicStream* stream = GetStream(stream_id); |
| 142 if (!stream) { | 142 if (!stream) { |
| 143 // The stream no longer exists, but we may still be interested in the | 143 // The stream no longer exists, but we may still be interested in the |
| 144 // final stream byte offset sent by the peer. A frame with a FIN can give | 144 // final stream byte offset sent by the peer. A frame with a FIN can give |
| 145 // us this offset. | 145 // us this offset. |
| 146 if (frame.fin) { | 146 if (frame.fin) { |
| 147 QuicStreamOffset final_byte_offset = | 147 QuicStreamOffset final_byte_offset = |
| 148 frame.offset + frame.data.TotalBufferSize(); | 148 frame.offset + frame.data.TotalBufferSize(); |
| 149 UpdateFlowControlOnFinalReceivedByteOffset(stream_id, | 149 UpdateFlowControlOnFinalReceivedByteOffset(stream_id, |
| 150 final_byte_offset); | 150 final_byte_offset); |
| 151 } | 151 } |
| 152 | 152 |
| 153 continue; | 153 continue; |
| 154 } | 154 } |
| 155 stream->OnStreamFrame(frames[i]); | 155 stream->OnStreamFrame(frames[i]); |
| 156 if (!connection_->connected()) { |
| 157 return; |
| 158 } |
| 156 } | 159 } |
| 157 } | 160 } |
| 158 | 161 |
| 159 void QuicSession::OnStreamHeaders(QuicStreamId stream_id, | 162 void QuicSession::OnStreamHeaders(QuicStreamId stream_id, |
| 160 StringPiece headers_data) { | 163 StringPiece headers_data) { |
| 161 QuicDataStream* stream = GetDataStream(stream_id); | 164 QuicDataStream* stream = GetDataStream(stream_id); |
| 162 if (!stream) { | 165 if (!stream) { |
| 163 // It's quite possible to receive headers after a stream has been reset. | 166 // It's quite possible to receive headers after a stream has been reset. |
| 164 return; | 167 return; |
| 165 } | 168 } |
| (...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 737 for (DataStreamMap::iterator it = stream_map_.begin(); | 740 for (DataStreamMap::iterator it = stream_map_.begin(); |
| 738 it != stream_map_.end(); ++it) { | 741 it != stream_map_.end(); ++it) { |
| 739 if (it->second->flow_controller()->IsBlocked()) { | 742 if (it->second->flow_controller()->IsBlocked()) { |
| 740 return true; | 743 return true; |
| 741 } | 744 } |
| 742 } | 745 } |
| 743 return false; | 746 return false; |
| 744 } | 747 } |
| 745 | 748 |
| 746 } // namespace net | 749 } // namespace net |
| OLD | NEW |