| // 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_ |