@@ -100,9 +100,32 @@ auto qualifiedHostName(QString name, QString domain)
100
100
return name;
101
101
}
102
102
103
+ auto parseTxtRecord (const QByteArray &txtRecord)
104
+ {
105
+ auto stringList = QStringList{};
106
+
107
+ const auto first = txtRecord.cbegin ();
108
+ const auto last = txtRecord.cend ();
109
+
110
+ for (auto it = first; it < last; ) {
111
+ const auto length = static_cast <int >(static_cast <quint8>(*it));
112
+
113
+ if (it + length >= last) {
114
+ qCWarning (lcResolver, " Malformed TXT record at offset" );
115
+ break ;
116
+ }
117
+
118
+ ++it;
119
+ stringList += QString::fromUtf8 (++it, length);
120
+ it += length;
121
+ }
122
+
123
+ return stringList;
103
124
}
104
125
105
- ServiceDescription::ServiceDescription (QString domain, QByteArray name, ServiceRecord service, QByteArray info)
126
+ } // namespace
127
+
128
+ ServiceDescription::ServiceDescription (QString domain, QByteArray name, ServiceRecord service, QStringList info)
106
129
: m_name{normalizedHostName (name, domain)}
107
130
, m_target{normalizedHostName (service.target ().toByteArray (), domain)}
108
131
, m_port{service.port ()}
@@ -310,8 +333,11 @@ void Resolver::onReadyRead(QUdpSocket *socket)
310
333
}
311
334
}
312
335
313
- for (const auto &[name, service]: resolvedServices)
314
- emit serviceResolved ({m_domain, name, service, resolvedText[name]});
336
+ for (const auto &[name, service]: resolvedServices) {
337
+ auto info = parseTxtRecord (resolvedText[name]);
338
+ emit serviceResolved ({m_domain, name, service, std::move (info)});
339
+ }
340
+
315
341
for (const auto &[name, addresses]: resolvedAddresses)
316
342
emit hostNameResolved (normalizedHostName (name, m_domain), addresses);
317
343
0 commit comments