| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #ifndef NET_HTTP_HTTP_UTIL_H_ | 5 #ifndef NET_HTTP_HTTP_UTIL_H_ |
| 6 #define NET_HTTP_HTTP_UTIL_H_ | 6 #define NET_HTTP_HTTP_UTIL_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
| 13 #include "base/string_tokenizer.h" | 13 #include "base/string_tokenizer.h" |
| 14 #include "googleurl/src/gurl.h" | 14 #include "googleurl/src/gurl.h" |
| 15 #include "net/base/net_api.h" | 15 #include "net/base/net_export.h" |
| 16 #include "net/http/http_byte_range.h" | 16 #include "net/http/http_byte_range.h" |
| 17 | 17 |
| 18 // This is a macro to support extending this string literal at compile time. | 18 // This is a macro to support extending this string literal at compile time. |
| 19 // Please excuse me polluting your global namespace! | 19 // Please excuse me polluting your global namespace! |
| 20 #define HTTP_LWS " \t" | 20 #define HTTP_LWS " \t" |
| 21 | 21 |
| 22 namespace net { | 22 namespace net { |
| 23 | 23 |
| 24 class UploadDataStream; | 24 class UploadDataStream; |
| 25 | 25 |
| 26 class NET_API HttpUtil { | 26 class NET_EXPORT HttpUtil { |
| 27 public: | 27 public: |
| 28 // Returns the absolute path of the URL, to be used for the http request. | 28 // Returns the absolute path of the URL, to be used for the http request. |
| 29 // The absolute path starts with a '/' and may contain a query. | 29 // The absolute path starts with a '/' and may contain a query. |
| 30 static std::string PathForRequest(const GURL& url); | 30 static std::string PathForRequest(const GURL& url); |
| 31 | 31 |
| 32 // Returns the absolute URL, to be used for the http request. This url is | 32 // Returns the absolute URL, to be used for the http request. This url is |
| 33 // made up of the protocol, host, [port], path, [query]. Everything else | 33 // made up of the protocol, host, [port], path, [query]. Everything else |
| 34 // is stripped (username, password, reference). | 34 // is stripped (username, password, reference). |
| 35 static std::string SpecForRequest(const GURL& url); | 35 static std::string SpecForRequest(const GURL& url); |
| 36 | 36 |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 // Helper. If |*headers| already contains |header_name| do nothing, | 164 // Helper. If |*headers| already contains |header_name| do nothing, |
| 165 // otherwise add <header_name> ": " <header_value> to the end of the list. | 165 // otherwise add <header_name> ": " <header_value> to the end of the list. |
| 166 static void AppendHeaderIfMissing(const char* header_name, | 166 static void AppendHeaderIfMissing(const char* header_name, |
| 167 const std::string& header_value, | 167 const std::string& header_value, |
| 168 std::string* headers); | 168 std::string* headers); |
| 169 | 169 |
| 170 // Used to iterate over the name/value pairs of HTTP headers. To iterate | 170 // Used to iterate over the name/value pairs of HTTP headers. To iterate |
| 171 // over the values in a multi-value header, use ValuesIterator. | 171 // over the values in a multi-value header, use ValuesIterator. |
| 172 // See AssembleRawHeaders for joining line continuations (this iterator | 172 // See AssembleRawHeaders for joining line continuations (this iterator |
| 173 // does not expect any). | 173 // does not expect any). |
| 174 class NET_API HeadersIterator { | 174 class NET_EXPORT HeadersIterator { |
| 175 public: | 175 public: |
| 176 HeadersIterator(std::string::const_iterator headers_begin, | 176 HeadersIterator(std::string::const_iterator headers_begin, |
| 177 std::string::const_iterator headers_end, | 177 std::string::const_iterator headers_end, |
| 178 const std::string& line_delimiter); | 178 const std::string& line_delimiter); |
| 179 ~HeadersIterator(); | 179 ~HeadersIterator(); |
| 180 | 180 |
| 181 // Advances the iterator to the next header, if any. Returns true if there | 181 // Advances the iterator to the next header, if any. Returns true if there |
| 182 // is a next header. Use name* and values* methods to access the resultant | 182 // is a next header. Use name* and values* methods to access the resultant |
| 183 // header name and values. | 183 // header name and values. |
| 184 bool GetNext(); | 184 bool GetNext(); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 // automatically trimmed from the resulting values. | 227 // automatically trimmed from the resulting values. |
| 228 // | 228 // |
| 229 // When using this class to iterate over response header values, be aware that | 229 // When using this class to iterate over response header values, be aware that |
| 230 // for some headers (e.g., Last-Modified), commas are not used as delimiters. | 230 // for some headers (e.g., Last-Modified), commas are not used as delimiters. |
| 231 // This iterator should be avoided for headers like that which are considered | 231 // This iterator should be avoided for headers like that which are considered |
| 232 // non-coalescing (see IsNonCoalescingHeader). | 232 // non-coalescing (see IsNonCoalescingHeader). |
| 233 // | 233 // |
| 234 // This iterator is careful to skip over delimiters found inside an HTTP | 234 // This iterator is careful to skip over delimiters found inside an HTTP |
| 235 // quoted string. | 235 // quoted string. |
| 236 // | 236 // |
| 237 class NET_TEST ValuesIterator { | 237 class NET_EXPORT_PRIVATE ValuesIterator { |
| 238 public: | 238 public: |
| 239 ValuesIterator(std::string::const_iterator values_begin, | 239 ValuesIterator(std::string::const_iterator values_begin, |
| 240 std::string::const_iterator values_end, | 240 std::string::const_iterator values_end, |
| 241 char delimiter); | 241 char delimiter); |
| 242 ~ValuesIterator(); | 242 ~ValuesIterator(); |
| 243 | 243 |
| 244 // Advances the iterator to the next value, if any. Returns true if there | 244 // Advances the iterator to the next value, if any. Returns true if there |
| 245 // is a next value. Use value* methods to access the resultant value. | 245 // is a next value. Use value* methods to access the resultant value. |
| 246 bool GetNext(); | 246 bool GetNext(); |
| 247 | 247 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 261 std::string::const_iterator value_end_; | 261 std::string::const_iterator value_end_; |
| 262 }; | 262 }; |
| 263 | 263 |
| 264 // Iterates over a delimited sequence of name-value pairs in an HTTP header. | 264 // Iterates over a delimited sequence of name-value pairs in an HTTP header. |
| 265 // Each pair consists of a token (the name), an equals sign, and either a | 265 // Each pair consists of a token (the name), an equals sign, and either a |
| 266 // token or quoted-string (the value). Arbitrary HTTP LWS is permitted outside | 266 // token or quoted-string (the value). Arbitrary HTTP LWS is permitted outside |
| 267 // of and between names, values, and delimiters. | 267 // of and between names, values, and delimiters. |
| 268 // | 268 // |
| 269 // String iterators returned from this class' methods may be invalidated upon | 269 // String iterators returned from this class' methods may be invalidated upon |
| 270 // calls to GetNext() or after the NameValuePairsIterator is destroyed. | 270 // calls to GetNext() or after the NameValuePairsIterator is destroyed. |
| 271 class NET_API NameValuePairsIterator { | 271 class NET_EXPORT NameValuePairsIterator { |
| 272 public: | 272 public: |
| 273 NameValuePairsIterator(std::string::const_iterator begin, | 273 NameValuePairsIterator(std::string::const_iterator begin, |
| 274 std::string::const_iterator end, | 274 std::string::const_iterator end, |
| 275 char delimiter); | 275 char delimiter); |
| 276 ~NameValuePairsIterator(); | 276 ~NameValuePairsIterator(); |
| 277 | 277 |
| 278 // Advances the iterator to the next pair, if any. Returns true if there | 278 // Advances the iterator to the next pair, if any. Returns true if there |
| 279 // is a next pair. Use name* and value* methods to access the resultant | 279 // is a next pair. Use name* and value* methods to access the resultant |
| 280 // value. | 280 // value. |
| 281 bool GetNext(); | 281 bool GetNext(); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 318 // into the original's unquoted_value_ member. | 318 // into the original's unquoted_value_ member. |
| 319 std::string unquoted_value_; | 319 std::string unquoted_value_; |
| 320 | 320 |
| 321 bool value_is_quoted_; | 321 bool value_is_quoted_; |
| 322 }; | 322 }; |
| 323 }; | 323 }; |
| 324 | 324 |
| 325 } // namespace net | 325 } // namespace net |
| 326 | 326 |
| 327 #endif // NET_HTTP_HTTP_UTIL_H_ | 327 #endif // NET_HTTP_HTTP_UTIL_H_ |
| OLD | NEW |