blob: c91b1f205ea0e8fd6c47a74a00e3705ca43d8fce [file] [log] [blame]
QUICHE teama6ef0a62019-03-07 20:34:33 -05001// Copyright (c) 2016 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 QUICHE_QUIC_PLATFORM_API_QUIC_SOCKET_ADDRESS_H_
6#define QUICHE_QUIC_PLATFORM_API_QUIC_SOCKET_ADDRESS_H_
7
vasilvv872e7a32019-03-12 16:42:44 -07008#include <string>
9
QUICHE teama6ef0a62019-03-07 20:34:33 -050010#include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
11#include "net/third_party/quiche/src/quic/platform/api/quic_ip_address.h"
QUICHE teama6ef0a62019-03-07 20:34:33 -050012
13namespace quic {
14
vasilvv64144fb2019-06-13 16:05:17 -070015// A class representing a socket endpoint address (i.e., IP address plus a
16// port) in QUIC.
QUICHE teama6ef0a62019-03-07 20:34:33 -050017class QUIC_EXPORT_PRIVATE QuicSocketAddress {
QUICHE teama6ef0a62019-03-07 20:34:33 -050018 public:
vasilvv64144fb2019-06-13 16:05:17 -070019 QuicSocketAddress() {}
QUICHE teama6ef0a62019-03-07 20:34:33 -050020 QuicSocketAddress(QuicIpAddress address, uint16_t port);
21 explicit QuicSocketAddress(const struct sockaddr_storage& saddr);
vasilvv91f97e62019-06-10 14:17:15 -070022 explicit QuicSocketAddress(const sockaddr* saddr, socklen_t len);
QUICHE teama6ef0a62019-03-07 20:34:33 -050023 QuicSocketAddress(const QuicSocketAddress& other) = default;
24 QuicSocketAddress& operator=(const QuicSocketAddress& other) = default;
25 QuicSocketAddress& operator=(QuicSocketAddress&& other) = default;
26 QUIC_EXPORT_PRIVATE friend bool operator==(const QuicSocketAddress& lhs,
27 const QuicSocketAddress& rhs);
28 QUIC_EXPORT_PRIVATE friend bool operator!=(const QuicSocketAddress& lhs,
29 const QuicSocketAddress& rhs);
30
31 bool IsInitialized() const;
vasilvvc48c8712019-03-11 13:38:16 -070032 std::string ToString() const;
QUICHE teama6ef0a62019-03-07 20:34:33 -050033 int FromSocket(int fd);
34 QuicSocketAddress Normalized() const;
35
36 QuicIpAddress host() const;
37 uint16_t port() const;
38 sockaddr_storage generic_address() const;
QUICHE teama6ef0a62019-03-07 20:34:33 -050039
40 private:
vasilvv64144fb2019-06-13 16:05:17 -070041 QuicIpAddress host_;
42 uint16_t port_ = 0;
QUICHE teama6ef0a62019-03-07 20:34:33 -050043};
44
vasilvv01010ca2019-07-08 15:12:21 -070045inline std::ostream& operator<<(std::ostream& os,
46 const QuicSocketAddress address) {
47 os << address.ToString();
48 return os;
49}
50
QUICHE teama6ef0a62019-03-07 20:34:33 -050051} // namespace quic
52
53#endif // QUICHE_QUIC_PLATFORM_API_QUIC_SOCKET_ADDRESS_H_