MCPcopy Create free account
hub / github.com/awawa-dev/HyperHDR / discoverServices

Method discoverServices

sources/ssdp/SSDPDiscover.cpp:200–296  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

198}
199
200int SSDPDiscover::discoverServices(const QString& searchTarget, const QString& key)
201{
202 _searchTarget = searchTarget;
203 int rc = -1;
204
205 Debug(_log, "Search for Service [%s], address [%s], port [%d]", QSTRING_CSTR(_searchTarget), QSTRING_CSTR(_ssdpAddr.toString()), _ssdpPort);
206
207 _services.clear();
208
209 // search
210 sendSearch(_searchTarget);
211
212 if (_udpSocket->waitForReadyRead(_ssdpTimeout))
213 {
214 while (_udpSocket->waitForReadyRead(500))
215 {
216 QByteArray datagram;
217 while (_udpSocket->hasPendingDatagrams())
218 {
219
220 datagram.resize(_udpSocket->pendingDatagramSize());
221 QHostAddress sender;
222 quint16 senderPort;
223
224 _udpSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);
225
226 QString data(datagram);
227
228 //Debug(_log, "_data: [%s]", QSTRING_CSTR(data));
229
230 QMap<QString, QString> headers;
231 // parse request
232 QStringList entries = data.split('\n', Qt::SkipEmptyParts);
233 for (auto entry : entries)
234 {
235 // http header parse skip
236 if (entry.contains("HTTP/1.1"))
237 continue;
238
239 // split into key:vale, be aware that value field may contain also a ":"
240 entry = entry.simplified();
241 int pos = entry.indexOf(":");
242 if (pos == -1)
243 continue;
244
245 headers[entry.left(pos).trimmed().toUpper()] = entry.mid(pos + 1).trimmed();
246 }
247
248 QRegularExpressionMatch match = _regExFilter.match(headers[_filterHeader]);
249 if (match.hasMatch())
250 {
251 Debug(_log, "Found target [%s], plus record [%s] matches [%s:%s]", QSTRING_CSTR(_searchTarget), QSTRING_CSTR(headers[_filterHeader]), QSTRING_CSTR(_filterHeader), QSTRING_CSTR(_filter));
252 //Debug(_log, "_data: [%s]", QSTRING_CSTR(data));
253
254 QString mapKey = headers[key];
255
256 SSDPService service;
257 service.cacheControl = headers["CACHE-CONTROL"];

Callers 3

discoverMethod · 0.80
discoverMethod · 0.80
discoverMethod · 0.80

Calls 6

dataMethod · 0.80
toStringMethod · 0.45
clearMethod · 0.45
resizeMethod · 0.45
sizeMethod · 0.45
closeMethod · 0.45

Tested by

no test coverage detected