summaryrefslogtreecommitdiffstats
path: root/net/tools/balsa
diff options
context:
space:
mode:
authorwtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-11 14:44:25 +0000
committerwtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-11 14:44:25 +0000
commit8f659420949d81978199a0b12ccc82f7f2e52993 (patch)
treedb6c26779a62dad56e849bee2880ccdb76ee0552 /net/tools/balsa
parent9f96ae0e9d73cbd267571ce3e4aed263d98efab1 (diff)
downloadchromium_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.h5
-rw-r--r--net/tools/balsa/balsa_frame.cc15
-rw-r--r--net/tools/balsa/balsa_frame.h2
-rw-r--r--net/tools/balsa/balsa_headers.cc25
-rw-r--r--net/tools/balsa/balsa_headers.h2
-rw-r--r--net/tools/balsa/string_piece_utils.h29
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,