19#include <QtNetwork/private/qtnetworkglobal_p.h>
20#include "QtCore/qcoreapplication.h"
21#include "private/qcoreapplication_p.h"
22#include "private/qmetaobject_p.h"
23#include "QtNetwork/qhostinfo.h"
24#include "QtCore/qmutex.h"
25#include "QtCore/qwaitcondition.h"
26#include "QtCore/qobject.h"
27#include "QtCore/qpointer.h"
28#include "QtCore/qthread.h"
30#include "QtCore/qthreadpool.h"
32#include "QtCore/qrunnable.h"
33#include "QtCore/qlist.h"
34#include "QtCore/qqueue.h"
35#include <QElapsedTimer>
44class QHostInfoResult :
public QObject
48 explicit QHostInfoResult(
const QObject *receiver, QtPrivate::SlotObjUniquePtr slot);
49 ~QHostInfoResult() override;
51 void postResultsReady(
const QHostInfo &info);
54 void resultsReady(
const QHostInfo &info);
57 void finalizePostResultsReady(
const QHostInfo &info);
60 QHostInfoResult(QHostInfoResult *other)
61 : receiver(other->receiver.get() != other ? other->receiver.get() :
this),
62 slotObj{std::move(other->slotObj)}
65 connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit,
66 this, &QObject::deleteLater);
68 moveToThread(other->thread());
73 QPointer<
const QObject> receiver =
nullptr;
74 QtPrivate::SlotObjUniquePtr slotObj;
94 static int lookupHostImpl(
const QString &name,
95 const QObject *receiver,
96 QtPrivate::QSlotObjectBase *slotObj,
108QHostInfo Q_NETWORK_EXPORT qt_qhostinfo_lookup(
const QString &name, QObject *receiver,
const char *member,
bool *valid,
int *id);
109void Q_AUTOTEST_EXPORT qt_qhostinfo_clear_cache();
110void Q_AUTOTEST_EXPORT qt_qhostinfo_enable_cache(
bool e);
111void Q_AUTOTEST_EXPORT qt_qhostinfo_cache_inject(
const QString &hostname,
const QHostInfo &resolution);
116#if defined(QT_BUILD_INTERNAL) || QT_CONFIG(hostinfocache)
138 QHostInfo get(
const QString &,
bool *valid) { *valid =
false;
return QHostInfo(); }
139 void put(
const QString &,
const QHostInfo &) { }
151 explicit QHostInfoRunnable(
const QString &hn,
int i,
const QObject *receiver,
152 QtPrivate::SlotObjUniquePtr slotObj);
202 void rescheduleWithMutexHeld();
static QHostInfo lookup(const QString &hostName)
static QHostInfo reverseLookup(const QHostAddress &address)
static QHostInfo fromName(const QString &hostName)
QHostInfo get(const QString &, bool *valid)
void put(const QString &, const QHostInfo &)
~QHostInfoLookupManager()
QQueue< QHostInfoRunnable * > scheduledLookups
void lookupFinished(QHostInfoRunnable *r)
void scheduleLookup(QHostInfoRunnable *r)
QList< int > abortedLookups
QList< QHostInfoRunnable * > finishedLookups
QList< QHostAddress > addrs
void run() override
Implement this pure virtual function in your subclass.
std::unique_ptr< QHostInfoResult > resultEmitter
~QHostInfoRunnable() override
The QHostInfo class provides static functions for host name lookups.
#define __has_attribute(x)
void qt_qhostinfo_clear_cache()
QHostInfo qt_qhostinfo_lookup(const QString &name, QObject *receiver, const char *member, bool *valid, int *id)