From 09d1d3bf20acfdb194f91e38ebfa67cc641f0119 Mon Sep 17 00:00:00 2001 From: Sona Kurazyan Date: Mon, 25 Feb 2019 17:48:27 +0100 Subject: Move resourcesFromCoreLinkList() where it fits better Change-Id: I930f53462598fd7019da2144ddf1bf04dc5930c8 Reviewed-by: Edward Welbourne --- src/coap/qcoapdiscoveryreply.cpp | 45 +++++++++++++++++++++++++- src/coap/qcoapdiscoveryreply.h | 3 ++ src/coap/qcoapprotocol.cpp | 43 ------------------------ src/coap/qcoapprotocol.h | 3 -- tests/auto/qcoapresource/tst_qcoapresource.cpp | 5 +-- 5 files changed, 50 insertions(+), 49 deletions(-) diff --git a/src/coap/qcoapdiscoveryreply.cpp b/src/coap/qcoapdiscoveryreply.cpp index 379277a..def9d19 100644 --- a/src/coap/qcoapdiscoveryreply.cpp +++ b/src/coap/qcoapdiscoveryreply.cpp @@ -58,7 +58,7 @@ void QCoapDiscoveryReplyPrivate::_q_setContent(const QHostAddress &sender, const if (QtCoap::isError(responseCode)) { _q_setError(responseCode); } else { - auto res = QCoapProtocol::resourcesFromCoreLinkList(sender, message.payload()); + auto res = QCoapDiscoveryReply::resourcesFromCoreLinkList(sender, message.payload()); resources.append(res); emit q->discovered(q, res); } @@ -114,4 +114,47 @@ QVector QCoapDiscoveryReply::resources() const return d->resources; } +/*! + Decodes the \a data received from the \a sender to a list of QCoapResource + objects. The \a data byte array contains the frame returned by the + discovery request. +*/ +QVector +QCoapDiscoveryReply::resourcesFromCoreLinkList(const QHostAddress &sender, const QByteArray &data) +{ + QVector resourceList; + + QLatin1String quote = QLatin1String("\""); + const QList links = data.split(','); + for (QByteArray link : links) { + QCoapResource resource; + resource.setHost(sender); + + const QList parameterList = link.split(';'); + for (QByteArray parameter : parameterList) { + QString parameterString = QString::fromUtf8(parameter); + int length = parameterString.length(); + if (parameter.startsWith('<')) + resource.setPath(parameterString.mid(1, length - 2)); + else if (parameter.startsWith("title=")) + resource.setTitle(parameterString.mid(6).remove(quote)); + else if (parameter.startsWith("rt=")) + resource.setResourceType(parameterString.mid(3).remove(quote)); + else if (parameter.startsWith("if=")) + resource.setInterface(parameterString.mid(3).remove(quote)); + else if (parameter.startsWith("sz=")) + resource.setMaximumSize(parameterString.mid(3).remove(quote).toInt()); + else if (parameter.startsWith("ct=")) + resource.setContentFormat(parameterString.mid(3).remove(quote).toUInt()); + else if (parameter == "obs") + resource.setObservable(true); + } + + if (!resource.path().isEmpty()) + resourceList.push_back(resource); + } + + return resourceList; +} + QT_END_NAMESPACE diff --git a/src/coap/qcoapdiscoveryreply.h b/src/coap/qcoapdiscoveryreply.h index c09cef3..0a09ccf 100644 --- a/src/coap/qcoapdiscoveryreply.h +++ b/src/coap/qcoapdiscoveryreply.h @@ -48,6 +48,9 @@ public: QVector resources() const; + static QVector resourcesFromCoreLinkList( + const QHostAddress &sender, const QByteArray &data); + Q_SIGNALS: void discovered(QCoapDiscoveryReply *reply, QVector resources); diff --git a/src/coap/qcoapprotocol.cpp b/src/coap/qcoapprotocol.cpp index bdcb15c..5c71655 100644 --- a/src/coap/qcoapprotocol.cpp +++ b/src/coap/qcoapprotocol.cpp @@ -739,49 +739,6 @@ void QCoapProtocolPrivate::onConnectionError(QAbstractSocket::SocketError socket emit q->error(nullptr, coapError); } -/*! - Decodes the \a data received from the \a sender to a list of QCoapResource - objects. The \a data byte array contains the frame returned by the - discovery request. -*/ -QVector QCoapProtocol::resourcesFromCoreLinkList(const QHostAddress &sender, - const QByteArray &data) -{ - QVector resourceList; - - QLatin1String quote = QLatin1String("\""); - const QList links = data.split(','); - for (QByteArray link : links) { - QCoapResource resource; - resource.setHost(sender); - - const QList parameterList = link.split(';'); - for (QByteArray parameter : parameterList) { - QString parameterString = QString::fromUtf8(parameter); - int length = parameterString.length(); - if (parameter.startsWith('<')) - resource.setPath(parameterString.mid(1, length - 2)); - else if (parameter.startsWith("title=")) - resource.setTitle(parameterString.mid(6).remove(quote)); - else if (parameter.startsWith("rt=")) - resource.setResourceType(parameterString.mid(3).remove(quote)); - else if (parameter.startsWith("if=")) - resource.setInterface(parameterString.mid(3).remove(quote)); - else if (parameter.startsWith("sz=")) - resource.setMaximumSize(parameterString.mid(3).remove(quote).toInt()); - else if (parameter.startsWith("ct=")) - resource.setContentFormat(parameterString.mid(3).remove(quote).toUInt()); - else if (parameter == "obs") - resource.setObservable(true); - } - - if (!resource.path().isEmpty()) - resourceList.push_back(resource); - } - - return resourceList; -} - /*! \internal diff --git a/src/coap/qcoapprotocol.h b/src/coap/qcoapprotocol.h index 4f37366..f1675c4 100644 --- a/src/coap/qcoapprotocol.h +++ b/src/coap/qcoapprotocol.h @@ -65,9 +65,6 @@ public: uint nonConfirmLifetime() const; uint maxServerResponseDelay() const; - static QVector resourcesFromCoreLinkList( - const QHostAddress &sender, const QByteArray &data); - Q_SIGNALS: void finished(QCoapReply *reply); void responseToMulticastReceived(QCoapReply *reply, const QCoapMessage& message); diff --git a/tests/auto/qcoapresource/tst_qcoapresource.cpp b/tests/auto/qcoapresource/tst_qcoapresource.cpp index 63fe88f..0d54029 100644 --- a/tests/auto/qcoapresource/tst_qcoapresource.cpp +++ b/tests/auto/qcoapresource/tst_qcoapresource.cpp @@ -32,7 +32,7 @@ #include #include -#include +#include class tst_QCoapResource : public QObject { @@ -144,7 +144,8 @@ void tst_QCoapResource::parseCoreLink() QFETCH(QList, observableList); QFETCH(QByteArray, coreLinkList); - const QVector resourceList = QCoapProtocol::resourcesFromCoreLinkList(QHostAddress(senderAddress), coreLinkList); + const QVector resourceList = + QCoapDiscoveryReply::resourcesFromCoreLinkList(QHostAddress(senderAddress), coreLinkList); QCOMPARE(resourceList.size(), resourceNumber); -- cgit v1.2.3