| Index: net/http2/hpack/tools/hpack_example.cc
|
| diff --git a/net/http2/hpack/tools/hpack_example.cc b/net/http2/hpack/tools/hpack_example.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..72fd5810e991d0ef563e9c64cf2d3c9265a97489
|
| --- /dev/null
|
| +++ b/net/http2/hpack/tools/hpack_example.cc
|
| @@ -0,0 +1,61 @@
|
| +// Copyright 2016 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 "net/http2/hpack/tools/hpack_example.h"
|
| +
|
| +#include <ctype.h>
|
| +
|
| +#include "base/logging.h"
|
| +#include "net/spdy/spdy_test_utils.h"
|
| +
|
| +using base::StringPiece;
|
| +using std::string;
|
| +
|
| +namespace net {
|
| +namespace test {
|
| +namespace {
|
| +
|
| +void HpackExampleToStringOrDie(StringPiece example, string* output) {
|
| + while (!example.empty()) {
|
| + const char c0 = example[0];
|
| + if (isxdigit(c0)) {
|
| + CHECK_GT(example.size(), 1u) << "Truncated hex byte?";
|
| + const char c1 = example[1];
|
| + CHECK(isxdigit(c1)) << "Found half a byte?";
|
| + *output += a2b_hex(example.substr(0, 2).as_string().c_str());
|
| + example.remove_prefix(2);
|
| + continue;
|
| + }
|
| + if (isspace(c0)) {
|
| + example.remove_prefix(1);
|
| + continue;
|
| + }
|
| + if (example.starts_with("|")) {
|
| + // Start of a comment. Skip to end of line or of input.
|
| + auto pos = example.find('\n');
|
| + if (pos == StringPiece::npos) {
|
| + // End of input.
|
| + break;
|
| + }
|
| + example.remove_prefix(pos + 1);
|
| + continue;
|
| + }
|
| + CHECK(false) << "Can't parse byte " << static_cast<int>(c0) << " (0x"
|
| + << std::hex << c0 << ")"
|
| + << "\nExample: " << example;
|
| + }
|
| + CHECK_LT(0u, output->size()) << "Example is empty.";
|
| + return;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +string HpackExampleToStringOrDie(StringPiece example) {
|
| + string output;
|
| + HpackExampleToStringOrDie(example, &output);
|
| + return output;
|
| +}
|
| +
|
| +} // namespace test
|
| +} // namespace net
|
|
|