1// Copyright (c) 2010 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#pragma once
8
9#include <string>
10#include "base/basictypes.h"
11
12struct addrinfo;
13class GURL;
14
15namespace net {
16
17class HostPortPair {
18 public:
19  HostPortPair();
20  // If |in_host| represents an IPv6 address, it should not bracket the address.
21  HostPortPair(const std::string& in_host, uint16 in_port);
22
23  // Creates a HostPortPair for the origin of |url|.
24  static HostPortPair FromURL(const GURL& url);
25
26  // Creates a HostPortPair from an addrinfo struct.
27  static HostPortPair FromAddrInfo(const struct addrinfo* ai);
28
29  // TODO(willchan): Define a functor instead.
30  // Comparator function so this can be placed in a std::map.
31  bool operator<(const HostPortPair& other) const {
32    if (port_ != other.port_)
33      return port_ < other.port_;
34    return host_ < other.host_;
35  }
36
37  // Equality test of contents. (Probably another violation of style guide).
38  bool Equals(const HostPortPair& other) const {
39    return host_ == other.host_ && port_ == other.port_;
40  }
41
42  const std::string& host() const {
43    return host_;
44  }
45
46  uint16 port() const {
47    return port_;
48  }
49
50  void set_host(const std::string& in_host) {
51    host_ = in_host;
52  }
53
54  void set_port(uint16 in_port) {
55    port_ = in_port;
56  }
57
58  // ToString() will convert the HostPortPair to "host:port".  If |host_| is an
59  // IPv6 literal, it will add brackets around |host_|.
60  std::string ToString() const;
61
62  // Returns |host_|, adding IPv6 brackets if needed.
63  std::string HostForURL() const;
64
65 private:
66  // If |host_| represents an IPv6 address, this string will not contain
67  // brackets around the address.
68  std::string host_;
69  uint16 port_;
70};
71
72}  // namespace net
73
74#endif  // NET_BASE_HOST_PORT_PAIR_H_
75