summaryrefslogtreecommitdiffstats
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
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
-rw-r--r--net/net.gyp54
-rw-r--r--net/net.gypi4
-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
8 files changed, 90 insertions, 46 deletions
diff --git a/net/net.gyp b/net/net.gyp
index d6bc5d9..c22edb4 100644
--- a/net/net.gyp
+++ b/net/net.gyp
@@ -541,6 +541,7 @@
'../testing/gtest.gyp:gtest',
'../third_party/zlib/zlib.gyp:zlib',
'../url/url.gyp:url_lib',
+ 'balsa',
'http_server',
'net',
'net_derived_sources',
@@ -552,7 +553,6 @@
'conditions': [
['os_posix == 1 and OS != "mac" and OS != "ios" and OS != "android"', {
'dependencies': [
- 'balsa',
'epoll_server',
'flip_in_mem_edsm_server_base',
'quic_base',
@@ -1061,6 +1061,32 @@
'msvs_disabled_warnings': [4267, ],
},
{
+ 'target_name': 'balsa',
+ 'type': 'static_library',
+ 'dependencies': [
+ '../base/base.gyp:base',
+ 'net',
+ ],
+ 'sources': [
+ 'tools/balsa/balsa_enums.h',
+ 'tools/balsa/balsa_frame.cc',
+ 'tools/balsa/balsa_frame.h',
+ 'tools/balsa/balsa_headers.cc',
+ 'tools/balsa/balsa_headers.h',
+ 'tools/balsa/balsa_headers_token_utils.cc',
+ 'tools/balsa/balsa_headers_token_utils.h',
+ 'tools/balsa/balsa_visitor_interface.h',
+ 'tools/balsa/http_message_constants.cc',
+ 'tools/balsa/http_message_constants.h',
+ 'tools/balsa/noop_balsa_visitor.h',
+ 'tools/balsa/simple_buffer.cc',
+ 'tools/balsa/simple_buffer.h',
+ 'tools/balsa/split.cc',
+ 'tools/balsa/split.h',
+ 'tools/balsa/string_piece_utils.h',
+ ],
+ },
+ {
'target_name': 'dump_cache',
'type': 'executable',
'dependencies': [
@@ -1294,32 +1320,6 @@
['os_posix == 1 and OS != "mac" and OS != "ios" and OS != "android"', {
'targets': [
{
- 'target_name': 'balsa',
- 'type': 'static_library',
- 'dependencies': [
- '../base/base.gyp:base',
- 'net',
- ],
- 'sources': [
- 'tools/balsa/balsa_enums.h',
- 'tools/balsa/balsa_frame.cc',
- 'tools/balsa/balsa_frame.h',
- 'tools/balsa/balsa_headers.cc',
- 'tools/balsa/balsa_headers.h',
- 'tools/balsa/balsa_headers_token_utils.cc',
- 'tools/balsa/balsa_headers_token_utils.h',
- 'tools/balsa/balsa_visitor_interface.h',
- 'tools/balsa/http_message_constants.cc',
- 'tools/balsa/http_message_constants.h',
- 'tools/balsa/noop_balsa_visitor.h',
- 'tools/balsa/simple_buffer.cc',
- 'tools/balsa/simple_buffer.h',
- 'tools/balsa/split.cc',
- 'tools/balsa/split.h',
- 'tools/balsa/string_piece_utils.h',
- ],
- },
- {
'target_name': 'epoll_server',
'type': 'static_library',
'dependencies': [
diff --git a/net/net.gypi b/net/net.gypi
index 5fa430f..613b446 100644
--- a/net/net.gypi
+++ b/net/net.gypi
@@ -1607,6 +1607,8 @@
'test/scoped_mock_log.cc',
'test/scoped_mock_log.h',
'test/test_certificate_data.h',
+ 'tools/balsa/balsa_frame_test.cc',
+ 'tools/balsa/balsa_headers_test.cc',
'tools/dump_cache/url_to_filename_encoder.cc',
'tools/dump_cache/url_to_filename_encoder.h',
'tools/dump_cache/url_to_filename_encoder_unittest.cc',
@@ -1653,8 +1655,6 @@
],
'net_linux_test_sources': [
'quic/quic_end_to_end_unittest.cc',
- 'tools/balsa/balsa_frame_test.cc',
- 'tools/balsa/balsa_headers_test.cc',
'tools/quic/end_to_end_test.cc',
'tools/quic/quic_client_session_test.cc',
'tools/quic/quic_dispatcher_test.cc',
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,