| // Copyright 2014 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 QUICHE_QUIC_CORE_QUIC_SERVER_ID_H_ |
| #define QUICHE_QUIC_CORE_QUIC_SERVER_ID_H_ |
| |
| #include <cstdint> |
| #include <string> |
| |
| #include "absl/hash/hash.h" |
| #include "absl/strings/string_view.h" |
| #include "absl/types/optional.h" |
| #include "quiche/quic/platform/api/quic_export.h" |
| |
| namespace quic { |
| |
| // The id used to identify sessions. Includes the hostname, port, scheme and |
| // privacy_mode. |
| class QUIC_EXPORT_PRIVATE QuicServerId { |
| public: |
| // Attempts to parse a QuicServerId from a "host:port" string. Returns nullopt |
| // if input could not be parsed. Requires input to contain both host and port |
| // and no other components of a URL authority. |
| static absl::optional<QuicServerId> ParseFromHostPortString( |
| absl::string_view host_port_string); |
| |
| QuicServerId(); |
| QuicServerId(std::string host, uint16_t port); |
| QuicServerId(std::string host, uint16_t port, bool privacy_mode_enabled); |
| ~QuicServerId(); |
| |
| // Needed to be an element of an ordered container. |
| bool operator<(const QuicServerId& other) const; |
| bool operator==(const QuicServerId& other) const; |
| |
| bool operator!=(const QuicServerId& other) const; |
| |
| const std::string& host() const { return host_; } |
| |
| uint16_t port() const { return port_; } |
| |
| bool privacy_mode_enabled() const { return privacy_mode_enabled_; } |
| |
| // Returns a "host:port" representation. IPv6 literal hosts will always be |
| // bracketed in result. |
| std::string ToHostPortString() const; |
| |
| // If host is an IPv6 literal surrounded by [], returns the substring without |
| // []. Otherwise, returns host as is. |
| absl::string_view GetHostWithoutIpv6Brackets() const; |
| |
| // If host is an IPv6 literal without surrounding [], returns host wrapped in |
| // []. Otherwise, returns host as is. |
| std::string GetHostWithIpv6Brackets() const; |
| |
| template <typename H> |
| friend H AbslHashValue(H h, const QuicServerId& server_id) { |
| return H::combine(std::move(h), server_id.host(), server_id.port(), |
| server_id.privacy_mode_enabled()); |
| } |
| |
| private: |
| std::string host_; |
| uint16_t port_; |
| bool privacy_mode_enabled_; |
| }; |
| |
| using QuicServerIdHash = absl::Hash<QuicServerId>; |
| |
| } // namespace quic |
| |
| #endif // QUICHE_QUIC_CORE_QUIC_SERVER_ID_H_ |