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