|  | // Copyright (c) 2012 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_BASE_HOST_PORT_PAIR_H_ | 
|  | #define NET_BASE_HOST_PORT_PAIR_H_ | 
|  |  | 
|  | #include <string> | 
|  | #include <tuple> | 
|  |  | 
|  | #include "net/base/net_export.h" | 
|  | #include "starboard/types.h" | 
|  |  | 
|  | class GURL; | 
|  |  | 
|  | namespace net { | 
|  |  | 
|  | class IPEndPoint; | 
|  |  | 
|  | class NET_EXPORT HostPortPair { | 
|  | public: | 
|  | HostPortPair(); | 
|  | // If |in_host| represents an IPv6 address, it should not bracket the address. | 
|  | HostPortPair(const std::string& in_host, uint16_t in_port); | 
|  |  | 
|  | // Creates a HostPortPair for the origin of |url|. | 
|  | static HostPortPair FromURL(const GURL& url); | 
|  |  | 
|  | // 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(const std::string& str); | 
|  |  | 
|  | // TODO(willchan): Define a functor instead. | 
|  | // Comparator function so this can be placed in a std::map. | 
|  | bool operator<(const HostPortPair& other) const { | 
|  | return std::tie(port_, host_) < std::tie(other.port_, other.host_); | 
|  | } | 
|  |  | 
|  | // Equality test of contents. (Probably another violation of style guide). | 
|  | bool Equals(const HostPortPair& other) const { | 
|  | return host_ == other.host_ && port_ == other.port_; | 
|  | } | 
|  |  | 
|  | 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; | 
|  |  | 
|  | // Returns the estimate of dynamically allocated memory in bytes. | 
|  | size_t EstimateMemoryUsage() const; | 
|  |  | 
|  | private: | 
|  | // If |host_| represents an IPv6 address, this string will not contain | 
|  | // brackets around the address. | 
|  | std::string host_; | 
|  | uint16_t port_; | 
|  | }; | 
|  |  | 
|  | }  // namespace net | 
|  |  | 
|  | #endif  // NET_BASE_HOST_PORT_PAIR_H_ |