Skip to content

Commit 2dc2752

Browse files
Try this
1 parent d03ddf9 commit 2dc2752

File tree

3 files changed

+42
-31
lines changed

3 files changed

+42
-31
lines changed

include/mdns/MdnsBrowser.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public slots:
9191

9292
void isFirstAddressResolved(QString hostname, QHostAddress address);
9393

94-
void isServiceRecordResolved(QMdnsEngine::Record serviceRecord) const;
94+
void isServiceRecordResolved(QByteArray serviceInstance, QMdnsEngine::Record serviceRecord) const;
9595

9696
private slots:
9797

include/utils/NetUtils.h

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,14 @@ inline QMdnsEngine::Record resolveMDnsServiceRecord(const QByteArray& serviceIns
196196
QEventLoop loop;
197197

198198
// Connect the signal to capture the resolved service record
199-
QObject::connect(browser, &MdnsBrowser::isServiceRecordResolved, &loop, [&](QMdnsEngine::Record resolvedServiceRecord) {
199+
QByteArray const requestedService = serviceInstance;
200+
QObject::connect(browser, &MdnsBrowser::isServiceRecordResolved, &loop,
201+
[&, requestedService](const QByteArray& emittedService, const QMdnsEngine::Record& resolvedServiceRecord) {
202+
if (emittedService != requestedService)
203+
{
204+
return;
205+
}
206+
200207
serviceRecord = resolvedServiceRecord;
201208
loop.quit();
202209
});
@@ -231,27 +238,29 @@ inline bool resolveHostToAddress(QSharedPointer<Logger> log, const QString& host
231238
if (hostname.endsWith("._tcp.local"))
232239
{
233240
//Treat hostname as service instance name that requires to be resolved into an mDNS-Hostname first
234-
QMdnsEngine::Record const service = resolveMDnsServiceRecord(hostname.toUtf8());
235-
if (!service.target().isEmpty())
241+
QByteArray requestedService = hostname.toUtf8();
242+
if (!requestedService.endsWith('.'))
236243
{
237-
if (!service.target().isEmpty())
238-
{
239-
Info(log, "Resolved service [%s] to mDNS hostname [%s], service port [%d]", QSTRING_CSTR(hostname), service.target().constData(), service.port());
240-
target = service.target();
241-
port = service.port();
242-
}
243-
else
244-
{
245-
Error(log, "Failed to resolved service [%s] to an mDNS hostname", QSTRING_CSTR(hostname));
246-
return false;
247-
}
244+
requestedService.append('.');
248245
}
249-
else
246+
247+
QMdnsEngine::Record const serviceRecord = resolveMDnsServiceRecord(hostname.toUtf8());
248+
if (serviceRecord.name().isEmpty() || serviceRecord.target().isEmpty())
250249
{
251250
Error(log, "Cannot resolve mDNS hostname for given service [%s]!", QSTRING_CSTR(hostname));
252251
return false;
253252
}
254253

254+
if (serviceRecord.name() != requestedService)
255+
{
256+
Error(log, "Resolved record [%s] does not match requested service [%s]", serviceRecord.name().constData(), requestedService.constData());
257+
return false;
258+
}
259+
260+
Info(log, "Resolved service [%s] to mDNS hostname [%s], service port [%d]", QSTRING_CSTR(hostname), serviceRecord.target().constData(), serviceRecord.port());
261+
target = serviceRecord.target();
262+
port = serviceRecord.port();
263+
255264
QHostAddress resolvedAddress;
256265
if (NetUtils::resolveMDnsHostToAddress(log, target, resolvedAddress))
257266
{
@@ -293,27 +302,29 @@ inline bool resolveMdnsHost(QSharedPointer<Logger> log, QString& hostname, int&
293302
if (hostname.endsWith("._tcp.local"))
294303
{
295304
//Treat hostname as service instance name that requires to be resolved into an mDNS-Hostname first
296-
QMdnsEngine::Record const service = resolveMDnsServiceRecord(hostname.toUtf8());
297-
if (!service.target().isEmpty())
305+
QByteArray requestedService = hostname.toUtf8();
306+
if (!requestedService.endsWith('.'))
298307
{
299-
if (!service.target().isEmpty())
300-
{
301-
Info(log, "Resolved service [%s] to mDNS hostname [%s], service port [%d]", QSTRING_CSTR(hostname), service.target().constData(), service.port());
302-
target = service.target();
303-
port = service.port();
304-
}
305-
else
306-
{
307-
Error(log, "Failed to resolved service [%s] to an mDNS hostname", QSTRING_CSTR(hostname));
308-
return false;
309-
}
308+
requestedService.append('.');
310309
}
311-
else
310+
311+
QMdnsEngine::Record const serviceRecord = resolveMDnsServiceRecord(hostname.toUtf8());
312+
if (serviceRecord.name().isEmpty() || serviceRecord.target().isEmpty())
312313
{
313314
Error(log, "Cannot resolve mDNS hostname for given service [%s]!", QSTRING_CSTR(hostname));
314315
return false;
315316
}
316317

318+
if (serviceRecord.name() != requestedService)
319+
{
320+
Error(log, "Resolved record [%s] does not match requested service [%s]", serviceRecord.name().constData(), requestedService.constData());
321+
return false;
322+
}
323+
324+
Info(log, "Resolved service [%s] to mDNS hostname [%s], service port [%d]", QSTRING_CSTR(hostname), serviceRecord.target().constData(), serviceRecord.port());
325+
target = serviceRecord.target();
326+
port = serviceRecord.port();
327+
317328
QHostAddress resolvedAddress;
318329
if (NetUtils::resolveMDnsHostToAddress(log, target, resolvedAddress))
319330
{

libsrc/mdns/MdnsBrowser.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ void MdnsBrowser::resolveServiceInstance(const QByteArray& serviceInstance, cons
214214
Debug(_log, "No service record found for service instance [%s]", service.constData());
215215
}
216216
}
217-
emit isServiceRecordResolved(srvRecord);
217+
emit isServiceRecordResolved(serviceInstance, srvRecord);
218218
}
219219

220220
QMdnsEngine::Service MdnsBrowser::getFirstService(const QByteArray& serviceType, const QString& filter, const std::chrono::milliseconds waitTime) const

0 commit comments

Comments
 (0)