Index: net/quic/core/quic_tag.h |
diff --git a/net/quic/core/quic_tag.h b/net/quic/core/quic_tag.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3ab2740676bf2a03648e8d61143c665cfb174584 |
--- /dev/null |
+++ b/net/quic/core/quic_tag.h |
@@ -0,0 +1,55 @@ |
+// 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. |
+ |
+#ifndef NET_QUIC_QUIC_TAG_H_ |
+#define NET_QUIC_QUIC_TAG_H_ |
+ |
+#include <map> |
+#include <string> |
+#include <vector> |
+ |
+#include "net/base/net_export.h" |
+ |
+namespace net { |
+ |
+// A QuicTag is a 32-bit used as identifiers in the QUIC handshake. The use of |
+// a uint32_t seeks to provide a balance between the tyranny of magic number |
+// registries and the verbosity of std::strings. As far as the wire protocol is |
+// concerned, these are opaque, 32-bit values. |
+// |
+// Tags will often be referred to by their ASCII equivalent, e.g. EXMP. This is |
+// just a mnemonic for the value 0x504d5845 (little-endian version of the ASCII |
+// std::string E X M P). |
+typedef uint32_t QuicTag; |
+typedef std::map<QuicTag, std::string> QuicTagValueMap; |
+typedef std::vector<QuicTag> QuicTagVector; |
+ |
+// MakeQuicTag returns a value given the four bytes. For example: |
+// MakeQuicTag('C', 'H', 'L', 'O'); |
+NET_EXPORT_PRIVATE QuicTag MakeQuicTag(char a, char b, char c, char d); |
+ |
+// Returns true if |tag_vector| contains |tag|. |
+NET_EXPORT_PRIVATE bool ContainsQuicTag(const QuicTagVector& tag_vector, |
+ QuicTag tag); |
+ |
+// Sets |out_result| to the first tag in |our_tags| that is also in |their_tags| |
+// and returns true. If there is no intersection it returns false. |
+// |
+// If |out_index| is non-nullptr and a match is found then the index of that |
+// match in |their_tags| is written to |out_index|. |
+NET_EXPORT_PRIVATE bool FindMutualQuicTag(const QuicTagVector& our_tags, |
+ const QuicTag* their_tags, |
+ size_t num_their_tags, |
+ QuicTag* out_result, |
+ size_t* out_index); |
+ |
+// A utility function that converts a tag to a std::string. It will try to |
+// maintain |
+// the human friendly name if possible (i.e. kABCD -> "ABCD"), or will just |
+// treat it as a number if not. |
+NET_EXPORT_PRIVATE std::string QuicTagToString(QuicTag tag); |
+ |
+} // namespace net |
+ |
+#endif // NET_QUIC_QUIC_TAG_H_ |