1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef NET_BASE_HOST_PORT_PAIR_H_
#define NET_BASE_HOST_PORT_PAIR_H_
#include <stdint.h>
#include <optional>
#include <string>
#include <string_view>
#include <tuple>
#include "base/values.h"
#include "net/base/net_export.h"
class GURL;
namespace url {
class SchemeHostPort;
} // namespace url
namespace net {
class IPEndPoint;
class NET_EXPORT HostPortPair {
public:
HostPortPair();
// If |in_host| represents an IPv6 address, it should not bracket the address.
HostPortPair(std::string_view in_host, uint16_t in_port);
// Creates a HostPortPair for the origin of |url|.
static HostPortPair FromURL(const GURL& url);
static HostPortPair FromSchemeHostPort(
const url::SchemeHostPort& scheme_host_port);
// Creates a HostPortPair from an IPEndPoint.
static HostPortPair FromIPEndPoint(const IPEndPoint& ipe);
// Creates a HostPortPair from a string formatted in same manner as
// ToString().
static HostPortPair FromString(std::string_view str);
// Nullopt if `value` is malformed to be deserialized to HostPortPair.
static std::optional<HostPortPair> FromValue(const base::Value& value);
friend bool operator==(const HostPortPair&, const HostPortPair&) = default;
friend auto operator<=>(const HostPortPair&, const HostPortPair&) = default;
bool IsEmpty() const {
return host_.empty() && port_ == 0;
}
const std::string& host() const {
return host_;
}
uint16_t port() const { return port_; }
void set_host(const std::string& in_host) {
host_ = in_host;
}
void set_port(uint16_t in_port) { port_ = in_port; }
// ToString() will convert the HostPortPair to "host:port". If |host_| is an
// IPv6 literal, it will add brackets around |host_|.
std::string ToString() const;
// Returns |host_|, adding IPv6 brackets if needed.
std::string HostForURL() const;
base::Value ToValue() const;
private:
uint16_t port_;
// If |host_| represents an IPv6 address, this string will not contain
// brackets around the address.
std::string host_;
};
} // namespace net
#endif // NET_BASE_HOST_PORT_PAIR_H_
|