| Index: net/quic/core/quic_tag.cc
|
| diff --git a/net/quic/core/quic_tag.cc b/net/quic/core/quic_tag.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..584f582ebb49934d2563cbd3e9f06338fc6b03af
|
| --- /dev/null
|
| +++ b/net/quic/core/quic_tag.cc
|
| @@ -0,0 +1,72 @@
|
| +// Copyright (c) 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/quic/core/quic_tag.h"
|
| +
|
| +#include <algorithm>
|
| +
|
| +#include "base/macros.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| +
|
| +namespace net {
|
| +
|
| +bool FindMutualQuicTag(const QuicTagVector& our_tags_vector,
|
| + const QuicTag* their_tags,
|
| + size_t num_their_tags,
|
| + QuicTag* out_result,
|
| + size_t* out_index) {
|
| + if (our_tags_vector.empty()) {
|
| + return false;
|
| + }
|
| + const size_t num_our_tags = our_tags_vector.size();
|
| + for (size_t i = 0; i < num_our_tags; i++) {
|
| + for (size_t j = 0; j < num_their_tags; j++) {
|
| + if (our_tags_vector[i] == their_tags[j]) {
|
| + *out_result = our_tags_vector[i];
|
| + if (out_index != nullptr) {
|
| + *out_index = j;
|
| + }
|
| + return true;
|
| + }
|
| + }
|
| + }
|
| +
|
| + return false;
|
| +}
|
| +
|
| +std::string QuicTagToString(QuicTag tag) {
|
| + char chars[sizeof tag];
|
| + bool ascii = true;
|
| + const QuicTag orig_tag = tag;
|
| +
|
| + for (size_t i = 0; i < arraysize(chars); i++) {
|
| + chars[i] = static_cast<char>(tag);
|
| + if ((chars[i] == 0 || chars[i] == '\xff') && i == arraysize(chars) - 1) {
|
| + chars[i] = ' ';
|
| + }
|
| + if (!isprint(static_cast<unsigned char>(chars[i]))) {
|
| + ascii = false;
|
| + break;
|
| + }
|
| + tag >>= 8;
|
| + }
|
| +
|
| + if (ascii) {
|
| + return std::string(chars, sizeof(chars));
|
| + }
|
| +
|
| + return base::UintToString(orig_tag);
|
| +}
|
| +
|
| +uint32_t MakeQuicTag(char a, char b, char c, char d) {
|
| + return static_cast<uint32_t>(a) | static_cast<uint32_t>(b) << 8 |
|
| + static_cast<uint32_t>(c) << 16 | static_cast<uint32_t>(d) << 24;
|
| +}
|
| +
|
| +bool ContainsQuicTag(const QuicTagVector& tag_vector, QuicTag tag) {
|
| + return std::find(tag_vector.begin(), tag_vector.end(), tag) !=
|
| + tag_vector.end();
|
| +}
|
| +
|
| +} // namespace net
|
|
|