| 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 |