1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright (c) 2009 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NET_HTTP_HTTP_BYTE_RANGE_H_ 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define NET_HTTP_HTTP_BYTE_RANGE_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/basictypes.h" 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace net { 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// A container class that represents a "range" specified for range request 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// specified by RFC 2616 Section 14.35.1. 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.1 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass HttpByteRange { 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott HttpByteRange(); 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Since this class is POD, we use constructor, assignment operator 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // and destructor provided by compiler. 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int64 first_byte_position() const { return first_byte_position_; } 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void set_first_byte_position(int64 value) { first_byte_position_ = value; } 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int64 last_byte_position() const { return last_byte_position_; } 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void set_last_byte_position(int64 value) { last_byte_position_ = value; } 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int64 suffix_length() const { return suffix_length_; } 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void set_suffix_length(int64 value) { suffix_length_ = value; } 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns true if this is a suffix byte range. 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool IsSuffixByteRange() const; 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns true if the first byte position is specified in this request. 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool HasFirstBytePosition() const; 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns true if the last byte position is specified in this request. 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool HasLastBytePosition() const; 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns true if this range is valid. 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool IsValid() const; 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // A method that when given the size in bytes of a file, adjust the internal 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // |first_byte_position_| and |last_byte_position_| values according to the 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // range specified by this object. If the range specified is invalid with 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // regard to the size or |size| is negative, returns false and there will be 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // no side effect. 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns false if this method is called more than once and there will be 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // no side effect. 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool ComputeBounds(int64 size); 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int64 first_byte_position_; 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int64 last_byte_position_; 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int64 suffix_length_; 54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool has_computed_bounds_; 55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace net 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // NET_HTTP_HTTP_BYTE_RANGE_H_ 60