|  | // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef NET_HTTP_HTTP_BYTE_RANGE_H_ | 
|  | #define NET_HTTP_HTTP_BYTE_RANGE_H_ | 
|  |  | 
|  | #include <stdint.h> | 
|  |  | 
|  | #include <string> | 
|  |  | 
|  | #include "net/base/net_export.h" | 
|  |  | 
|  | namespace net { | 
|  |  | 
|  | // A container class that represents a "range" specified for range request | 
|  | // specified by RFC 7233 Section 2.1. | 
|  | // https://tools.ietf.org/html/rfc7233#section-2.1 | 
|  | class NET_EXPORT HttpByteRange { | 
|  | public: | 
|  | HttpByteRange(); | 
|  |  | 
|  | // Convenience constructors. | 
|  | static HttpByteRange Bounded(int64_t first_byte_position, | 
|  | int64_t last_byte_position); | 
|  | static HttpByteRange RightUnbounded(int64_t first_byte_position); | 
|  | static HttpByteRange Suffix(int64_t suffix_length); | 
|  |  | 
|  | // Since this class is POD, we use constructor, assignment operator | 
|  | // and destructor provided by compiler. | 
|  | int64_t first_byte_position() const { return first_byte_position_; } | 
|  | void set_first_byte_position(int64_t value) { first_byte_position_ = value; } | 
|  |  | 
|  | int64_t last_byte_position() const { return last_byte_position_; } | 
|  | void set_last_byte_position(int64_t value) { last_byte_position_ = value; } | 
|  |  | 
|  | int64_t suffix_length() const { return suffix_length_; } | 
|  | void set_suffix_length(int64_t value) { suffix_length_ = value; } | 
|  |  | 
|  | // Returns true if this is a suffix byte range. | 
|  | bool IsSuffixByteRange() const; | 
|  | // Returns true if the first byte position is specified in this request. | 
|  | bool HasFirstBytePosition() const; | 
|  | // Returns true if the last byte position is specified in this request. | 
|  | bool HasLastBytePosition() const; | 
|  |  | 
|  | // Returns true if this range is valid. | 
|  | bool IsValid() const; | 
|  |  | 
|  | // Gets the header string, e.g. "bytes=0-100", "bytes=100-", "bytes=-100". | 
|  | // Assumes range is valid. | 
|  | std::string GetHeaderValue() const; | 
|  |  | 
|  | // A method that when given the size in bytes of a file, adjust the internal | 
|  | // |first_byte_position_| and |last_byte_position_| values according to the | 
|  | // range specified by this object. If the range specified is invalid with | 
|  | // regard to the size or |size| is negative, returns false and there will be | 
|  | // no side effect. | 
|  | // Returns false if this method is called more than once and there will be | 
|  | // no side effect. | 
|  | bool ComputeBounds(int64_t size); | 
|  |  | 
|  | private: | 
|  | int64_t first_byte_position_; | 
|  | int64_t last_byte_position_; | 
|  | int64_t suffix_length_; | 
|  | bool has_computed_bounds_; | 
|  | }; | 
|  |  | 
|  | }  // namespace net | 
|  |  | 
|  | #endif  // NET_HTTP_HTTP_BYTE_RANGE_H_ |