• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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