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_stream_sequencer.h" | 5 #include "net/quic/quic_stream_sequencer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 } | 153 } |
154 return index; | 154 return index; |
155 } | 155 } |
156 | 156 |
157 int QuicStreamSequencer::Readv(const struct iovec* iov, size_t iov_len) { | 157 int QuicStreamSequencer::Readv(const struct iovec* iov, size_t iov_len) { |
158 DCHECK(!blocked_); | 158 DCHECK(!blocked_); |
159 FrameMap::iterator it = buffered_frames_.begin(); | 159 FrameMap::iterator it = buffered_frames_.begin(); |
160 size_t iov_index = 0; | 160 size_t iov_index = 0; |
161 size_t iov_offset = 0; | 161 size_t iov_offset = 0; |
162 size_t frame_offset = 0; | 162 size_t frame_offset = 0; |
163 size_t initial_bytes_consumed = num_bytes_consumed_; | 163 QuicStreamOffset initial_bytes_consumed = num_bytes_consumed_; |
164 | 164 |
165 while (iov_index < iov_len && | 165 while (iov_index < iov_len && |
166 it != buffered_frames_.end() && | 166 it != buffered_frames_.end() && |
167 it->first == num_bytes_consumed_) { | 167 it->first == num_bytes_consumed_) { |
168 int bytes_to_read = min(iov[iov_index].iov_len - iov_offset, | 168 int bytes_to_read = min(iov[iov_index].iov_len - iov_offset, |
169 it->second.size() - frame_offset); | 169 it->second.size() - frame_offset); |
170 | 170 |
171 char* iov_ptr = static_cast<char*>(iov[iov_index].iov_base) + iov_offset; | 171 char* iov_ptr = static_cast<char*>(iov[iov_index].iov_base) + iov_offset; |
172 memcpy(iov_ptr, | 172 memcpy(iov_ptr, |
173 it->second.data() + frame_offset, bytes_to_read); | 173 it->second.data() + frame_offset, bytes_to_read); |
(...skipping 13 matching lines...) Expand all Loading... |
187 frame_offset = 0; | 187 frame_offset = 0; |
188 } | 188 } |
189 } | 189 } |
190 // We've finished copying. If we have a partial frame, update it. | 190 // We've finished copying. If we have a partial frame, update it. |
191 if (frame_offset != 0) { | 191 if (frame_offset != 0) { |
192 buffered_frames_.insert( | 192 buffered_frames_.insert( |
193 make_pair(it->first + frame_offset, it->second.substr(frame_offset))); | 193 make_pair(it->first + frame_offset, it->second.substr(frame_offset))); |
194 buffered_frames_.erase(buffered_frames_.begin()); | 194 buffered_frames_.erase(buffered_frames_.begin()); |
195 RecordBytesConsumed(frame_offset); | 195 RecordBytesConsumed(frame_offset); |
196 } | 196 } |
197 return num_bytes_consumed_ - initial_bytes_consumed; | 197 return static_cast<int>(num_bytes_consumed_ - initial_bytes_consumed); |
198 } | 198 } |
199 | 199 |
200 bool QuicStreamSequencer::HasBytesToRead() const { | 200 bool QuicStreamSequencer::HasBytesToRead() const { |
201 FrameMap::const_iterator it = buffered_frames_.begin(); | 201 FrameMap::const_iterator it = buffered_frames_.begin(); |
202 | 202 |
203 return it != buffered_frames_.end() && it->first == num_bytes_consumed_; | 203 return it != buffered_frames_.end() && it->first == num_bytes_consumed_; |
204 } | 204 } |
205 | 205 |
206 bool QuicStreamSequencer::IsClosed() const { | 206 bool QuicStreamSequencer::IsClosed() const { |
207 return num_bytes_consumed_ >= close_offset_; | 207 return num_bytes_consumed_ >= close_offset_; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 } | 285 } |
286 | 286 |
287 void QuicStreamSequencer::RecordBytesConsumed(size_t bytes_consumed) { | 287 void QuicStreamSequencer::RecordBytesConsumed(size_t bytes_consumed) { |
288 num_bytes_consumed_ += bytes_consumed; | 288 num_bytes_consumed_ += bytes_consumed; |
289 num_bytes_buffered_ -= bytes_consumed; | 289 num_bytes_buffered_ -= bytes_consumed; |
290 | 290 |
291 stream_->AddBytesConsumed(bytes_consumed); | 291 stream_->AddBytesConsumed(bytes_consumed); |
292 } | 292 } |
293 | 293 |
294 } // namespace net | 294 } // namespace net |
OLD | NEW |