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

Side by Side Diff: net/http/http_byte_range.cc

Issue 92006: Implement a parser that parses the "Range" HTTP header... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « net/http/http_byte_range.h ('k') | net/http/http_byte_range_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <algorithm>
6
7 #include "net/http/http_byte_range.h"
8
9 namespace {
10
11 const int64 kPositionNotSpecified = -1;
12
13 } // namespace
14
15 namespace net {
16
17 HttpByteRange::HttpByteRange()
18 : first_byte_position_(kPositionNotSpecified),
19 last_byte_position_(kPositionNotSpecified),
20 suffix_length_(kPositionNotSpecified),
21 has_computed_bounds_(false) {
22 }
23
24 bool HttpByteRange::IsSuffixByteRange() const {
25 return suffix_length_ != kPositionNotSpecified;
26 }
27
28 bool HttpByteRange::HasFirstBytePosition() const {
29 return first_byte_position_ != kPositionNotSpecified;
30 }
31
32 bool HttpByteRange::HasLastBytePosition() const {
33 return last_byte_position_ != kPositionNotSpecified;
34 }
35
36 bool HttpByteRange::IsValid() const {
37 if (suffix_length_ > 0)
38 return true;
39 return first_byte_position_ >= 0 &&
40 (last_byte_position_ == kPositionNotSpecified ||
41 last_byte_position_ >= first_byte_position_);
42 }
43
44 bool HttpByteRange::ComputeBounds(int64 size) {
45 if (size < 0)
46 return false;
47 if (has_computed_bounds_)
48 return false;
49 has_computed_bounds_ = true;
50
51 // Empty values.
52 if (!HasFirstBytePosition() &&
53 !HasLastBytePosition() &&
54 !IsSuffixByteRange()) {
55 first_byte_position_ = 0;
56 last_byte_position_ = size - 1;
57 return true;
58 }
59 if (!IsValid())
60 return false;
61 if (IsSuffixByteRange()) {
62 first_byte_position_ = size - std::min(size, suffix_length_);
63 last_byte_position_ = size - 1;
64 return true;
65 }
66 if (first_byte_position_ < size) {
67 if (HasLastBytePosition())
68 last_byte_position_ = std::min(size - 1, last_byte_position_);
69 else
70 last_byte_position_ = size - 1;
71 return true;
72 }
73 return false;
74 }
75
76 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_byte_range.h ('k') | net/http/http_byte_range_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698