diff options
author | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-11 14:44:25 +0000 |
---|---|---|
committer | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-11 14:44:25 +0000 |
commit | 8f659420949d81978199a0b12ccc82f7f2e52993 (patch) | |
tree | db6c26779a62dad56e849bee2880ccdb76ee0552 /net/tools/balsa | |
parent | 9f96ae0e9d73cbd267571ce3e4aed263d98efab1 (diff) | |
download | chromium_src-8f659420949d81978199a0b12ccc82f7f2e52993.zip chromium_src-8f659420949d81978199a0b12ccc82f7f2e52993.tar.gz chromium_src-8f659420949d81978199a0b12ccc82f7f2e52993.tar.bz2 |
Port net/tools/balsa to non-Linux platforms.
R=rch@chromium.org
BUG=none
TEST=net_unittests --gtest_filter=*Balsa*
Review URL: https://codereview.chromium.org/312003002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@276394 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/tools/balsa')
-rw-r--r-- | net/tools/balsa/balsa_enums.h | 5 | ||||
-rw-r--r-- | net/tools/balsa/balsa_frame.cc | 15 | ||||
-rw-r--r-- | net/tools/balsa/balsa_frame.h | 2 | ||||
-rw-r--r-- | net/tools/balsa/balsa_headers.cc | 25 | ||||
-rw-r--r-- | net/tools/balsa/balsa_headers.h | 2 | ||||
-rw-r--r-- | net/tools/balsa/string_piece_utils.h | 29 |
6 files changed, 61 insertions, 17 deletions
diff --git a/net/tools/balsa/balsa_enums.h b/net/tools/balsa/balsa_enums.h index a59dcda..2a49aba 100644 --- a/net/tools/balsa/balsa_enums.h +++ b/net/tools/balsa/balsa_enums.h @@ -24,6 +24,11 @@ struct BalsaFrameEnums { }; enum ErrorCode { +#if defined(_WIN32) + // On Windows, <WinError.h> defines the NO_ERROR macro as 0L, which + // breaks the compilation of the "NO_ERROR = 0" line. +#undef NO_ERROR +#endif NO_ERROR = 0, // A sentinel value for convenience, none of the callbacks // should ever see this error code. // Header parsing errors diff --git a/net/tools/balsa/balsa_frame.cc b/net/tools/balsa/balsa_frame.cc index 96e9193..463a678 100644 --- a/net/tools/balsa/balsa_frame.cc +++ b/net/tools/balsa/balsa_frame.cc @@ -8,7 +8,6 @@ #if __SSE2__ #include <emmintrin.h> #endif // __SSE2__ -#include <strings.h> #include <limits> #include <string> @@ -26,6 +25,13 @@ #include "net/tools/balsa/split.h" #include "net/tools/balsa/string_piece_utils.h" +#if defined(COMPILER_MSVC) +#include <string.h> +#define strncasecmp _strnicmp +#else +#include <strings.h> +#endif + namespace net { // Constants holding some header names for headers which can affect the way the @@ -426,7 +432,7 @@ void BalsaFrame::ProcessFirstLine(const char* begin, const char* end) { } if (is_request_) { - int version_length = + size_t version_length = headers_->whitespace_4_idx_ - headers_->non_whitespace_3_idx_; visitor_->ProcessRequestFirstLine( begin + headers_->non_whitespace_1_idx_, @@ -1556,9 +1562,4 @@ size_t BalsaFrame::ProcessInput(const char* input, size_t size) { return current - input; } -const uint32 BalsaFrame::kValidTerm1; -const uint32 BalsaFrame::kValidTerm1Mask; -const uint32 BalsaFrame::kValidTerm2; -const uint32 BalsaFrame::kValidTerm2Mask; - } // namespace net diff --git a/net/tools/balsa/balsa_frame.h b/net/tools/balsa/balsa_frame.h index 8e1240c..6178d79 100644 --- a/net/tools/balsa/balsa_frame.h +++ b/net/tools/balsa/balsa_frame.h @@ -5,8 +5,6 @@ #ifndef NET_TOOLS_BALSA_BALSA_FRAME_H_ #define NET_TOOLS_BALSA_BALSA_FRAME_H_ -#include <strings.h> - #include <utility> #include <vector> diff --git a/net/tools/balsa/balsa_headers.cc b/net/tools/balsa/balsa_headers.cc index 27bfd24..a77b75b 100644 --- a/net/tools/balsa/balsa_headers.cc +++ b/net/tools/balsa/balsa_headers.cc @@ -6,11 +6,11 @@ #include <stdio.h> #include <algorithm> -#include <ext/hash_set> #include <string> #include <utility> #include <vector> +#include "base/containers/hash_tables.h" #include "base/logging.h" #include "base/port.h" #include "base/strings/string_piece.h" @@ -20,15 +20,28 @@ #include "net/tools/balsa/simple_buffer.h" #include "third_party/tcmalloc/chromium/src/base/googleinit.h" +#if defined(COMPILER_MSVC) +#include <string.h> +#define snprintf _snprintf +#define strncasecmp _strnicmp +#else +#include <strings.h> +#endif + namespace { const char kContentLength[] = "Content-Length"; const char kTransferEncoding[] = "Transfer-Encoding"; const char kSpaceChar = ' '; -__gnu_cxx::hash_set<base::StringPiece, - net::StringPieceCaseHash, - net::StringPieceCaseEqual> g_multivalued_headers; +#if defined(COMPILER_MSVC) +base::hash_set<base::StringPiece, + net::StringPieceCaseCompare> g_multivalued_headers; +#else +base::hash_set<base::StringPiece, + net::StringPieceCaseHash, + net::StringPieceCaseEqual> g_multivalued_headers; +#endif void InitMultivaluedHeaders() { g_multivalued_headers.insert("accept"); @@ -66,8 +79,6 @@ const int kFastToBufferSize = 32; // I think 22 is adequate, but anyway.. namespace net { -const size_t BalsaBuffer::kDefaultBlocksize; - BalsaHeaders::iterator_base::iterator_base() : headers_(NULL), idx_(0) { } BalsaHeaders::iterator_base::iterator_base(const iterator_base& it) @@ -542,7 +553,7 @@ const base::StringPiece BalsaHeaders::GetHeader( const HeaderLines::const_iterator begin = header_lines_.begin(); HeaderLines::const_iterator i = GetConstHeaderLinesIterator(key, begin); if (i == end) { - return base::StringPiece(NULL, 0); + return base::StringPiece(); } return GetValueFromHeaderLineDescription(*i); } diff --git a/net/tools/balsa/balsa_headers.h b/net/tools/balsa/balsa_headers.h index 47cf388..840aae5 100644 --- a/net/tools/balsa/balsa_headers.h +++ b/net/tools/balsa/balsa_headers.h @@ -938,7 +938,7 @@ class BalsaHeaders { return transfer_encoding_is_chunked_; } - static bool ResponseCodeImpliesNoBody(int code) { + static bool ResponseCodeImpliesNoBody(size_t code) { // From HTTP spec section 6.1.1 all 1xx responses must not have a body, // as well as 204 No Content and 304 Not Modified. return ((code >= 100) && (code <= 199)) || (code == 204) || (code == 304); diff --git a/net/tools/balsa/string_piece_utils.h b/net/tools/balsa/string_piece_utils.h index eb0eaf3..12fc69b 100644 --- a/net/tools/balsa/string_piece_utils.h +++ b/net/tools/balsa/string_piece_utils.h @@ -12,6 +12,34 @@ namespace net { +#if defined(COMPILER_MSVC) +struct StringPieceCaseCompare { + static const size_t bucket_size = 4; + + size_t operator()(const base::StringPiece& sp) const { + // based on __stl_string_hash in http://www.sgi.com/tech/stl/string + size_t hash_val = 0; + for (base::StringPiece::const_iterator it = sp.begin(); + it != sp.end(); ++it) { + hash_val = 5 * hash_val + tolower(*it); + } + return hash_val; + } + + bool operator()(const base::StringPiece& sp1, + const base::StringPiece& sp2) const { + size_t len1 = sp1.length(); + size_t len2 = sp2.length(); + bool sp1_shorter = len1 < len2; + size_t len = sp1_shorter ? len1 : len2; + int rv = _memicmp(sp1.data(), sp2.data(), len); + if (rv == 0) { + return sp1_shorter; + } + return rv < 0; + } +}; +#else // COMPILER_MSVC struct StringPieceCaseHash { size_t operator()(const base::StringPiece& sp) const { // based on __stl_string_hash in http://www.sgi.com/tech/stl/string @@ -23,6 +51,7 @@ struct StringPieceCaseHash { return hash_val; } }; +#endif // COMPILER_MSVC struct StringPieceUtils { static bool EqualIgnoreCase(const base::StringPiece& piece1, |