| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 // The rules for parsing content-types were borrowed from Firefox: | 5 // The rules for parsing content-types were borrowed from Firefox: |
| 6 // http://lxr.mozilla.org/mozilla/source/netwerk/base/src/nsURLHelper.cpp#834 | 6 // http://lxr.mozilla.org/mozilla/source/netwerk/base/src/nsURLHelper.cpp#834 |
| 7 | 7 |
| 8 #include "net/http/http_util.h" | 8 #include "net/http/http_util.h" |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 return end; | 47 return end; |
| 48 } | 48 } |
| 49 | 49 |
| 50 NOTREACHED(); | 50 NOTREACHED(); |
| 51 return line.length(); | 51 return line.length(); |
| 52 } | 52 } |
| 53 | 53 |
| 54 //----------------------------------------------------------------------------- | 54 //----------------------------------------------------------------------------- |
| 55 | 55 |
| 56 // static | 56 // static |
| 57 std::string HttpUtil::PathForRequest(const GURL& url) { | |
| 58 DCHECK(url.is_valid() && (url.SchemeIs("http") || url.SchemeIs("https"))); | |
| 59 if (url.has_query()) | |
| 60 return url.path() + "?" + url.query(); | |
| 61 return url.path(); | |
| 62 } | |
| 63 | |
| 64 // static | |
| 65 std::string HttpUtil::SpecForRequest(const GURL& url) { | |
| 66 DCHECK(url.is_valid() && (url.SchemeIs("http") || url.SchemeIs("https"))); | |
| 67 return SimplifyUrlForRequest(url).spec(); | |
| 68 } | |
| 69 | |
| 70 // static | |
| 71 size_t HttpUtil::FindDelimiter(const string& line, size_t search_start, | 57 size_t HttpUtil::FindDelimiter(const string& line, size_t search_start, |
| 72 char delimiter) { | 58 char delimiter) { |
| 73 do { | 59 do { |
| 74 // search_start points to the spot from which we should start looking | 60 // search_start points to the spot from which we should start looking |
| 75 // for the delimiter. | 61 // for the delimiter. |
| 76 const char delim_str[] = { delimiter, '"', '\'', '\0' }; | 62 const char delim_str[] = { delimiter, '"', '\'', '\0' }; |
| 77 size_t cur_delim_pos = line.find_first_of(delim_str, search_start); | 63 size_t cur_delim_pos = line.find_first_of(delim_str, search_start); |
| 78 if (cur_delim_pos == string::npos) | 64 if (cur_delim_pos == string::npos) |
| 79 return line.length(); | 65 return line.length(); |
| 80 | 66 |
| (...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 446 const int slop = 4; | 432 const int slop = 4; |
| 447 const int http_len = 4; | 433 const int http_len = 4; |
| 448 | 434 |
| 449 if (buf_len >= http_len) { | 435 if (buf_len >= http_len) { |
| 450 int i_max = std::min(buf_len - http_len, slop); | 436 int i_max = std::min(buf_len - http_len, slop); |
| 451 for (int i = 0; i <= i_max; ++i) { | 437 for (int i = 0; i <= i_max; ++i) { |
| 452 if (LowerCaseEqualsASCII(buf + i, buf + i + http_len, "http")) | 438 if (LowerCaseEqualsASCII(buf + i, buf + i + http_len, "http")) |
| 453 return i; | 439 return i; |
| 454 } | 440 } |
| 455 } | 441 } |
| 456 return -1; // Not found | 442 return -1; // Not found |
| 457 } | 443 } |
| 458 | 444 |
| 459 int HttpUtil::LocateEndOfHeaders(const char* buf, int buf_len, int i) { | 445 int HttpUtil::LocateEndOfHeaders(const char* buf, int buf_len, int i) { |
| 460 bool was_lf = false; | 446 bool was_lf = false; |
| 461 char last_c = '\0'; | 447 char last_c = '\0'; |
| 462 for (; i < buf_len; ++i) { | 448 for (; i < buf_len; ++i) { |
| 463 char c = buf[i]; | 449 char c = buf[i]; |
| 464 if (c == '\n') { | 450 if (c == '\n') { |
| 465 if (was_lf) | 451 if (was_lf) |
| 466 return i + 1; | 452 return i + 1; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 return end; | 491 return end; |
| 506 return begin + i; | 492 return begin + i; |
| 507 } | 493 } |
| 508 | 494 |
| 509 // Helper used by AssembleRawHeaders, to skip past leading LWS. | 495 // Helper used by AssembleRawHeaders, to skip past leading LWS. |
| 510 static const char* FindFirstNonLWS(const char* begin, const char* end) { | 496 static const char* FindFirstNonLWS(const char* begin, const char* end) { |
| 511 for (const char* cur = begin; cur != end; ++cur) { | 497 for (const char* cur = begin; cur != end; ++cur) { |
| 512 if (!HttpUtil::IsLWS(*cur)) | 498 if (!HttpUtil::IsLWS(*cur)) |
| 513 return cur; | 499 return cur; |
| 514 } | 500 } |
| 515 return end; // Not found. | 501 return end; // Not found. |
| 516 } | 502 } |
| 517 | 503 |
| 518 std::string HttpUtil::AssembleRawHeaders(const char* input_begin, | 504 std::string HttpUtil::AssembleRawHeaders(const char* input_begin, |
| 519 int input_len) { | 505 int input_len) { |
| 520 std::string raw_headers; | 506 std::string raw_headers; |
| 521 raw_headers.reserve(input_len); | 507 raw_headers.reserve(input_len); |
| 522 | 508 |
| 523 const char* input_end = input_begin + input_len; | 509 const char* input_end = input_begin + input_len; |
| 524 | 510 |
| 525 // Skip any leading slop, since the consumers of this output | 511 // Skip any leading slop, since the consumers of this output |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 671 TrimLWS(&value_begin_, &value_end_); | 657 TrimLWS(&value_begin_, &value_end_); |
| 672 | 658 |
| 673 // bypass empty values. | 659 // bypass empty values. |
| 674 if (value_begin_ != value_end_) | 660 if (value_begin_ != value_end_) |
| 675 return true; | 661 return true; |
| 676 } | 662 } |
| 677 return false; | 663 return false; |
| 678 } | 664 } |
| 679 | 665 |
| 680 } // namespace net | 666 } // namespace net |
| OLD | NEW |