9#include <QtNetwork/qtnetworkglobal.h>
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>
25class QHostAddressPrivate;
26QT_DECLARE_QESDP_SPECIALIZATION_DTOR(QHostAddressPrivate)
28class QT6_ONLY(Q_NETWORK_EXPORT) QIPv6Address
31 inline quint8 &operator [](
int index) {
return c[index]; }
32 inline quint8 operator [](
int index)
const {
return c[index]; }
40Q_NETWORK_EXPORT size_t qHash(
const QHostAddress &key, size_t seed = 0)
noexcept;
55 enum ConversionModeFlag {
56 ConvertV4MappedToIPv4 = 1,
57 ConvertV4CompatToIPv4 = 2,
58 ConvertUnspecifiedAddress = 4,
60 TolerantConversion = 0xff,
64 Q_DECLARE_FLAGS(ConversionMode, ConversionModeFlag)
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;
73 enum NetworkLayerProtocol {
77 UnknownNetworkLayerProtocol = -1
79 Q_ENUM(NetworkLayerProtocol)
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 ©);
89 QHostAddress(QHostAddress &&other)
noexcept =
default;
90 QHostAddress(SpecialAddress address);
93 QHostAddress &operator=(QHostAddress &&other)
noexcept
94 { swap(other);
return *
this; }
95 QHostAddress &operator=(
const QHostAddress &other);
96 QHostAddress &operator=(SpecialAddress address);
98 void swap(QHostAddress &other)
noexcept { d.swap(other.d); }
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);
107 NetworkLayerProtocol protocol()
const;
108 quint32 toIPv4Address(
bool *ok =
nullptr)
const;
109 Q_IPV6ADDR toIPv6Address()
const;
111 QString toString()
const;
113 QString scopeId()
const;
114 void setScopeId(
const QString &id);
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); }
126 bool isInSubnet(
const QHostAddress &subnet,
int netmask)
const;
127 bool isInSubnet(
const std::pair<QHostAddress,
int> &subnet)
const;
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;
138 static std::pair<QHostAddress,
int> parseSubnet(
const QString &subnet);
140 friend Q_NETWORK_EXPORT size_t qHash(
const QHostAddress &key, size_t seed)
noexcept;
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; }
148 friend class QHostAddressPrivate;
149 QExplicitlySharedDataPointer<QHostAddressPrivate> d;
151Q_DECLARE_OPERATORS_FOR_FLAGS(QHostAddress::ConversionMode)
152Q_DECLARE_SHARED(QHostAddress)
154#ifndef QT_NO_DEBUG_STREAM
155Q_NETWORK_EXPORT QDebug operator<<(QDebug,
const QHostAddress &);
158#ifndef QT_NO_DATASTREAM
159Q_NETWORK_EXPORT
QDataStream &operator<<(QDataStream &,
const QHostAddress &);
160Q_NETWORK_EXPORT
QDataStream &operator>>(QDataStream &, QHostAddress &);
\inmodule QtCore\reentrant
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)