Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qhostaddress.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// Copyright (C) 2016 Intel Corporation.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4// Qt-Security score:significant reason:default
5
6#ifndef QHOSTADDRESS_H
7#define QHOSTADDRESS_H
8
9#include <QtNetwork/qtnetworkglobal.h>
10
11#include <QtCore/qobjectdefs.h>
12#include <QtCore/qshareddata.h>
13#include <QtCore/qstring.h>
14#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
15#include <QtNetwork/qabstractsocket.h>
16#endif
17
18#include <utility>
19
20struct sockaddr;
21
22QT_BEGIN_NAMESPACE
23
24
25class QHostAddressPrivate;
26QT_DECLARE_QESDP_SPECIALIZATION_DTOR(QHostAddressPrivate)
27
28class QT6_ONLY(Q_NETWORK_EXPORT) QIPv6Address
29{
30public:
31 inline quint8 &operator [](int index) { return c[index]; }
32 inline quint8 operator [](int index) const { return c[index]; }
33 quint8 c[16];
34};
35
37
38class QHostAddress;
39// qHash is a friend, but we can't use default arguments for friends (ยง8.3.6.4)
40Q_NETWORK_EXPORT size_t qHash(const QHostAddress &key, size_t seed = 0) noexcept;
41
42class Q_NETWORK_EXPORT QHostAddress
43{
44 Q_GADGET
45public:
46 enum SpecialAddress {
47 Null,
48 Broadcast,
49 LocalHost,
50 LocalHostIPv6,
51 Any,
52 AnyIPv6,
53 AnyIPv4
54 };
55 enum ConversionModeFlag {
56 ConvertV4MappedToIPv4 = 1,
57 ConvertV4CompatToIPv4 = 2,
58 ConvertUnspecifiedAddress = 4,
59 ConvertLocalHost = 8,
60 TolerantConversion = 0xff,
61
62 StrictConversion = 0
63 };
64 Q_DECLARE_FLAGS(ConversionMode, ConversionModeFlag)
65
66#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
67 using NetworkLayerProtocol = QAbstractSocket::NetworkLayerProtocol;
68 static constexpr auto IPv4Protocol = QAbstractSocket::IPv4Protocol;
69 static constexpr auto IPv6Protocol = QAbstractSocket::IPv6Protocol;
70 static constexpr auto AnyIPProtocol = QAbstractSocket::AnyIPProtocol;
71 static constexpr auto UnknownNetworkLayerProtocol = QAbstractSocket::UnknownNetworkLayerProtocol;
72#else
73 enum NetworkLayerProtocol {
74 IPv4Protocol,
75 IPv6Protocol,
76 AnyIPProtocol,
77 UnknownNetworkLayerProtocol = -1
78 };
79 Q_ENUM(NetworkLayerProtocol)
80#endif
81
82 QHostAddress();
83 explicit QHostAddress(quint32 ip4Addr);
84 explicit QHostAddress(const quint8 *ip6Addr);
85 explicit QHostAddress(const Q_IPV6ADDR &ip6Addr);
86 explicit QHostAddress(const sockaddr *address);
87 explicit QHostAddress(const QString &address);
88 QHostAddress(const QHostAddress &copy);
89 QHostAddress(QHostAddress &&other) noexcept = default;
90 QHostAddress(SpecialAddress address);
91 ~QHostAddress();
92
93 QHostAddress &operator=(QHostAddress &&other) noexcept
94 { swap(other); return *this; }
95 QHostAddress &operator=(const QHostAddress &other);
96 QHostAddress &operator=(SpecialAddress address);
97
98 void swap(QHostAddress &other) noexcept { d.swap(other.d); }
99
100 void setAddress(quint32 ip4Addr);
101 void setAddress(const quint8 *ip6Addr);
102 void setAddress(const Q_IPV6ADDR &ip6Addr);
103 void setAddress(const sockaddr *address);
104 bool setAddress(const QString &address);
105 void setAddress(SpecialAddress address);
106
107 NetworkLayerProtocol protocol() const;
108 quint32 toIPv4Address(bool *ok = nullptr) const;
109 Q_IPV6ADDR toIPv6Address() const;
110
111 QString toString() const;
112
113 QString scopeId() const;
114 void setScopeId(const QString &id);
115
116 bool isEqual(const QHostAddress &address, ConversionMode mode = TolerantConversion) const;
117 bool operator ==(const QHostAddress &address) const;
118 bool operator ==(SpecialAddress address) const;
119 inline bool operator !=(const QHostAddress &address) const
120 { return !operator==(address); }
121 inline bool operator !=(SpecialAddress address) const
122 { return !operator==(address); }
123 bool isNull() const;
124 void clear();
125
126 bool isInSubnet(const QHostAddress &subnet, int netmask) const;
127 bool isInSubnet(const std::pair<QHostAddress, int> &subnet) const;
128
129 bool isLoopback() const;
130 bool isGlobal() const;
131 bool isLinkLocal() const;
132 bool isSiteLocal() const;
133 bool isUniqueLocalUnicast() const;
134 bool isMulticast() const;
135 bool isBroadcast() const;
136 bool isPrivateUse() const;
137
138 static std::pair<QHostAddress, int> parseSubnet(const QString &subnet);
139
140 friend Q_NETWORK_EXPORT size_t qHash(const QHostAddress &key, size_t seed) noexcept;
141
142 friend bool operator ==(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs)
143 { return rhs == lhs; }
144 friend bool operator!=(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs)
145 { return rhs != lhs; }
146
147protected:
148 friend class QHostAddressPrivate;
149 QExplicitlySharedDataPointer<QHostAddressPrivate> d;
150};
151Q_DECLARE_OPERATORS_FOR_FLAGS(QHostAddress::ConversionMode)
152Q_DECLARE_SHARED(QHostAddress)
153
154#ifndef QT_NO_DEBUG_STREAM
155Q_NETWORK_EXPORT QDebug operator<<(QDebug, const QHostAddress &);
156#endif
157
158#ifndef QT_NO_DATASTREAM
159Q_NETWORK_EXPORT QDataStream &operator<<(QDataStream &, const QHostAddress &);
160Q_NETWORK_EXPORT QDataStream &operator>>(QDataStream &, QHostAddress &);
161#endif
162
163QT_END_NAMESPACE
164
165#endif // QHOSTADDRESS_H
\inmodule QtCore\reentrant
Definition qdatastream.h:50
void setAddress(const quint8 *a_)
AddressClassification classify() const
void setAddress(const Q_IPV6ADDR &a_)
The QHostAddress class provides an IP address.
QDataStream & operator>>(QDataStream &in, QHostAddress &address)
Reads a host address into address from the stream in and returns a reference to the stream.
bool setAddress(const QHostAddress &address)
QHostAddress address(QAbstractSocket::NetworkLayerProtocol protocol) const
Combined button and popup list for selecting options.
static bool convertToIpv4(quint32 &a, const Q_IPV6ADDR &a6, const QHostAddress::ConversionMode mode)
size_t qHash(const QHostAddress &key, size_t seed) noexcept
static bool parseIp6(const QString &address, QIPAddressUtils::IPv6Address &addr, QString *scopeId)
static void clearBits(quint8 *where, int start, int end)
QIPv6Address Q_IPV6ADDR
#define AF_INET6