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>
43class QHostInfoResult :
public QObject
47 explicit QHostInfoResult(
const QObject *receiver, QtPrivate::SlotObjUniquePtr slot);
48 ~QHostInfoResult() override;
50 void postResultsReady(
const QHostInfo &info);
53 void resultsReady(
const QHostInfo &info);
56 void finalizePostResultsReady(
const QHostInfo &info);
59 QHostInfoResult(QHostInfoResult *other)
60 : receiver(other->receiver.get() != other ? other->receiver.get() :
this),
61 slotObj{std::move(other->slotObj)}
64 connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit,
65 this, &QObject::deleteLater);
67 moveToThread(other->thread());
72 QPointer<
const QObject> receiver =
nullptr;
73 QtPrivate::SlotObjUniquePtr slotObj;
93 static int lookupHostImpl(
const QString &name,
94 const QObject *receiver,
95 QtPrivate::QSlotObjectBase *slotObj,
107QHostInfo Q_NETWORK_EXPORT qt_qhostinfo_lookup(
const QString &name, QObject *receiver,
const char *member,
bool *valid,
int *id);
108void Q_AUTOTEST_EXPORT qt_qhostinfo_clear_cache();
109void Q_AUTOTEST_EXPORT qt_qhostinfo_enable_cache(
bool e);
110void Q_AUTOTEST_EXPORT qt_qhostinfo_cache_inject(
const QString &hostname,
const QHostInfo &resolution);
119 void put(
const QString &name,
const QHostInfo &info);
122 bool isEnabled() {
return enabled.load(std::memory_order_relaxed); }
125 void setEnabled(
bool e) { enabled.store(e, std::memory_order_relaxed); }
127 std::atomic<
bool> enabled;
128 struct QHostInfoCacheElement {
132 QCache<QString,QHostInfoCacheElement> cache;
141 explicit QHostInfoRunnable(
const QString &hn,
int i,
const QObject *receiver,
142 QtPrivate::SlotObjUniquePtr slotObj);
189 void rescheduleWithMutexHeld();
static QHostInfo lookup(const QString &hostName)
static QHostInfo reverseLookup(const QHostAddress &address)
static QHostInfo fromName(const QString &hostName)
QHostInfo get(const QString &name, bool *valid)
void put(const QString &name, const QHostInfo &info)
~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.
QHostInfoResult resultEmitter
~QHostInfoRunnable() override
The QHostInfo class provides static functions for host name lookups.
void qt_qhostinfo_clear_cache()
QHostInfo qt_qhostinfo_lookup(const QString &name, QObject *receiver, const char *member, bool *valid, int *id)