forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Check-in rlz code to src\rlz from http://code.google.com/p/rlz/.
Review URL: https://chromiumcodereview.appspot.com/10597002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@143381 0039d316-1c4b-4281-b951-d872f2087c98
- Loading branch information
jam@chromium.org
committed
Jun 21, 2012
1 parent
b049c38
commit 0a5e34a
Showing
51 changed files
with
6,974 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
# Copyright (c) 2012 The Chromium Authors. All rights reserved. | ||
# Use of this source code is governed by a BSD-style license that can be | ||
# found in the LICENSE file. | ||
# | ||
# This DEPS file exists so that it can capture the dependenciez of RLZ. This | ||
# allows external projects to check it out and build it independently from all | ||
# of chrome. | ||
|
||
vars = { | ||
"chrev": "@119173" | ||
} | ||
|
||
deps = { | ||
"src/base": | ||
"http://src.chromium.org/svn/trunk/src/base" + Var("chrev"), | ||
|
||
"src/build": | ||
"http://src.chromium.org/svn/trunk/src/build" + Var("chrev"), | ||
|
||
"src/third_party/icu": | ||
"http://src.chromium.org/svn/trunk/deps/third_party/icu42" + Var("chrev"), | ||
|
||
"src/third_party/modp_b64": | ||
"http://src.chromium.org/svn/trunk/src/third_party/modp_b64" + Var("chrev"), | ||
|
||
"src/third_party/nss": | ||
"http://src.chromium.org/svn/trunk/deps/third_party/nss" + Var("chrev"), | ||
|
||
"src/third_party/sqlite": | ||
"http://src.chromium.org/svn/trunk/src/third_party/sqlite" + Var("chrev"), | ||
|
||
"src/third_party/wtl": | ||
"http://src.chromium.org/svn/trunk/src/third_party/wtl" + Var("chrev"), | ||
|
||
"src/third_party/zlib": | ||
"http://src.chromium.org/svn/trunk/src/third_party/zlib" + Var("chrev"), | ||
|
||
"src/testing": | ||
"http://src.chromium.org/svn/trunk/src/testing" + Var("chrev"), | ||
|
||
"src/testing/gmock": | ||
"http://googlemock.googlecode.com/svn/trunk@374", | ||
|
||
"src/testing/gtest": | ||
"http://googletest.googlecode.com/svn/trunk@492", | ||
|
||
"src/tools/gyp": | ||
"http://gyp.googlecode.com/svn/trunk@1233", | ||
|
||
"src/tools/win": | ||
"http://src.chromium.org/svn/trunk/src/tools/win" + Var("chrev"), | ||
|
||
# If using rlz with chrome's networking library, add it and its dependencies | ||
# here. | ||
} | ||
|
||
include_rules = [ | ||
"+build", | ||
"+net", # This is only used when force_rlz_use_chrome_net=1 is passed to gyp. | ||
"+third_party/zlib", | ||
] | ||
|
||
hooks = [ | ||
{ | ||
# A change to a .gyp, .gypi, or to GYP itself should run the generator. | ||
"pattern": ".", | ||
"action": ["python", "src/build/gyp_chromium", "src/rlz/rlz.gyp"], | ||
} | ||
] | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
// Copyright (c) 2012 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
// | ||
// Macros specific to the RLZ library. | ||
|
||
#include "rlz/lib/assert.h" | ||
|
||
namespace rlz_lib { | ||
|
||
#ifdef MUTE_EXPECTED_ASSERTS | ||
std::string expected_assertion_; | ||
#endif | ||
|
||
} // namespace rlz_lib |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
// Copyright (c) 2012 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
// | ||
// Macros specific to the RLZ library. | ||
|
||
#ifndef RLZ_LIB_ASSERT_H_ | ||
#define RLZ_LIB_ASSERT_H_ | ||
|
||
#include <string> | ||
#include "base/logging.h" | ||
|
||
// An assertion macro. | ||
// Can mute expected assertions in debug mode. | ||
|
||
#ifndef ASSERT_STRING | ||
#ifndef MUTE_EXPECTED_ASSERTS | ||
#define ASSERT_STRING(expr) LOG_IF(FATAL, false) << (expr) | ||
#else | ||
#define ASSERT_STRING(expr) \ | ||
do { \ | ||
std::string expr_string(expr); \ | ||
if (rlz_lib::expected_assertion_ != expr_string) { \ | ||
LOG_IF(FATAL, false) << (expr); \ | ||
} \ | ||
} while (0) | ||
#endif | ||
#endif | ||
|
||
|
||
#ifndef VERIFY | ||
#ifdef _DEBUG | ||
#define VERIFY(expr) LOG_IF(FATAL, !(expr)) << #expr | ||
#else | ||
#define VERIFY(expr) (void)(expr) | ||
#endif | ||
#endif | ||
|
||
namespace rlz_lib { | ||
|
||
#ifdef MUTE_EXPECTED_ASSERTS | ||
extern std::string expected_assertion_; | ||
#endif | ||
|
||
inline void SetExpectedAssertion(const char* s) { | ||
#ifdef MUTE_EXPECTED_ASSERTS | ||
expected_assertion_ = s; | ||
#endif | ||
} | ||
|
||
} // rlz_lib | ||
|
||
#endif // RLZ_LIB_ASSERT_H_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
// Copyright (c) 2012 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
// | ||
// A wrapper around ZLib's CRC function. | ||
|
||
#ifndef RLZ_LIB_CRC32_H_ | ||
#define RLZ_LIB_CRC32_H_ | ||
|
||
namespace rlz_lib { | ||
|
||
int Crc32(const unsigned char* buf, int length); | ||
bool Crc32(const char* text, int* crc); | ||
|
||
} // namespace rlz_lib | ||
|
||
#endif // RLZ_LIB_CRC32_H_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
// Copyright (c) 2012 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
// | ||
// A test for ZLib's checksum function. | ||
|
||
#include "rlz/lib/crc32.h" | ||
|
||
#include "base/logging.h" | ||
#include "testing/gmock/include/gmock/gmock.h" | ||
#include "testing/gtest/include/gtest/gtest.h" | ||
|
||
TEST(Crc32Unittest, ByteTest) { | ||
struct { | ||
const char* data; | ||
int len; | ||
// Externally calculated at http://crc32-checksum.waraxe.us/ | ||
int crc; | ||
} kData[] = { | ||
{"Hello" , 5, 0xF7D18982}, | ||
{"Google" , 6, 0x62B0F067}, | ||
{"" , 0, 0x0}, | ||
{"One more string.", 16, 0x0CA14970}, | ||
{NULL , 0, 0x0}, | ||
}; | ||
|
||
for (int i = 0; kData[i].data; i++) | ||
EXPECT_EQ(kData[i].crc, | ||
rlz_lib::Crc32(reinterpret_cast<const unsigned char*>(kData[i].data), | ||
kData[i].len)); | ||
} | ||
|
||
TEST(Crc32Unittest, CharTest) { | ||
struct { | ||
const char* data; | ||
// Externally calculated at http://crc32-checksum.waraxe.us/ | ||
int crc; | ||
} kData[] = { | ||
{"Hello" , 0xF7D18982}, | ||
{"Google" , 0x62B0F067}, | ||
{"" , 0x0}, | ||
{"One more string.", 0x0CA14970}, | ||
{"Google\r\n" , 0x83A3E860}, | ||
{NULL , 0x0}, | ||
}; | ||
|
||
int crc; | ||
for (int i = 0; kData[i].data; i++) { | ||
EXPECT_TRUE(rlz_lib::Crc32(kData[i].data, &crc)); | ||
EXPECT_EQ(kData[i].crc, crc); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
// Copyright (c) 2012 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
// | ||
// A wrapper around ZLib's CRC functions to put them in the rlz_lib namespace | ||
// and use our types. | ||
|
||
#include "rlz/lib/assert.h" | ||
#include "rlz/lib/crc32.h" | ||
#include "rlz/lib/string_utils.h" | ||
#include "third_party/zlib/zlib.h" | ||
|
||
namespace rlz_lib { | ||
|
||
int Crc32(const unsigned char* buf, int length) { | ||
return crc32(0L, buf, length); | ||
} | ||
|
||
bool Crc32(const char* text, int* crc) { | ||
if (!crc) { | ||
ASSERT_STRING("Crc32: crc is NULL."); | ||
return false; | ||
} | ||
|
||
*crc = 0; | ||
for (int i = 0; text[i]; i++) { | ||
if (!IsAscii(text[i])) | ||
return false; | ||
|
||
*crc = crc32(*crc, reinterpret_cast<const unsigned char*>(text + i), 1); | ||
} | ||
|
||
return true; | ||
} | ||
|
||
} // namespace rlz_lib |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
// Copyright (c) 2012 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
#include "rlz/lib/crc8.h" | ||
|
||
namespace { | ||
|
||
// The CRC lookup table used for ATM HES (Polynomial = 0x07). | ||
// These are 256 unique 8-bit values. | ||
const unsigned char kCrcTable[256] = { | ||
0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15, | ||
0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D, | ||
0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65, | ||
0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D, | ||
0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5, | ||
0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD, | ||
0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85, | ||
0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD, | ||
0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2, | ||
0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA, | ||
0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2, | ||
0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A, | ||
0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32, | ||
0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A, | ||
0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42, | ||
0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A, | ||
0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C, | ||
0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4, | ||
0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC, | ||
0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4, | ||
0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C, | ||
0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44, | ||
0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C, | ||
0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34, | ||
0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B, | ||
0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63, | ||
0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B, | ||
0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13, | ||
0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB, | ||
0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83, | ||
0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB, | ||
0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3 | ||
}; | ||
|
||
} // namespace anonymous | ||
|
||
|
||
namespace rlz_lib { | ||
|
||
bool Crc8::Generate(const unsigned char *data, int length, | ||
unsigned char* check_sum) { | ||
if (!check_sum) | ||
return false; | ||
|
||
*check_sum = 0; | ||
if (!data) | ||
return false; | ||
|
||
// The inital and final constants are as used in the ATM HEC. | ||
static const unsigned char kInitial = 0x00; | ||
static const unsigned char kFinal = 0x55; | ||
unsigned char crc = kInitial; | ||
for (int i = 0; i < length; ++i) { | ||
crc = kCrcTable[(data[i] ^ crc) & 0xFFU]; | ||
} | ||
|
||
*check_sum = crc ^ kFinal; | ||
return true; | ||
} | ||
|
||
bool Crc8::Verify(const unsigned char* data, int length, | ||
unsigned char check_sum, bool* matches) { | ||
if (!matches) | ||
return false; | ||
|
||
*matches = false; | ||
if (!data) | ||
return false; | ||
|
||
unsigned char calculated_crc; | ||
if (!Generate(data, length, &calculated_crc)) | ||
return false; | ||
|
||
*matches = check_sum == calculated_crc; | ||
|
||
return true; | ||
} | ||
|
||
} // namespace rlz_lib |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
// Copyright (c) 2012 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
// | ||
// Crc8 utility functions. | ||
|
||
#ifndef RLZ_LIB_CRC8_H_ | ||
#define RLZ_LIB_CRC8_H_ | ||
|
||
namespace rlz_lib { | ||
// CRC-8 methods: | ||
class Crc8 { | ||
public: | ||
static bool Generate(const unsigned char* data, | ||
int length, | ||
unsigned char* check_sum); | ||
static bool Verify(const unsigned char* data, | ||
int length, | ||
unsigned char checksum, | ||
bool * matches); | ||
}; | ||
}; // namespace rlz_lib | ||
|
||
#endif // RLZ_LIB_CRC8_H_ |
Oops, something went wrong.