Home | History | Annotate | Download | only in base
      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).
     43   bool Equals(const HostPortPair& other) const {
     44     return host_ == other.host_ && port_ == other.port_;
     45   }
     46 
     47   bool IsEmpty() const {
     48     return host_.empty() && port_ == 0;
     49   }
     50 
     51   const std::string& host() const {
     52     return host_;
     53   }
     54 
     55   uint16 port() const {
     56     return port_;
     57   }
     58 
     59   void set_host(const std::string& in_host) {
     60     host_ = in_host;
     61   }
     62 
     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