aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSona Kurazyan <sona.kurazyan@qt.io>2018-12-14 13:33:25 +0100
committerSona Kurazyan <sona.kurazyan@qt.io>2018-12-20 15:48:44 +0000
commit190578c761c0171269d9d8148f162bf757a3d84a (patch)
treee035f19761b1ca8ae6639369ee1fc401bfd635bc /src
parent2b3755c8e6587c6a720dd8dcfaafca6e2ba755a9 (diff)
Fix review comments left from the initial commit
Added some minor improvements and fixes for review comments from the initial commit. Change-Id: Ic3b36118262660c110ccf7ef2209a25208703ab7 Reviewed-by: Alex Blasche <alexander.blasche@qt.io> Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/coap/qcoapclient.cpp5
-rw-r--r--src/coap/qcoapclient.h2
-rw-r--r--src/coap/qcoapclient_p.h4
-rw-r--r--src/coap/qcoapinternalrequest.cpp20
-rw-r--r--src/coap/qcoapmessage.cpp10
-rw-r--r--src/coap/qcoapoption.cpp2
-rw-r--r--src/coap/qcoapreply.h2
7 files changed, 27 insertions, 18 deletions
diff --git a/src/coap/qcoapclient.cpp b/src/coap/qcoapclient.cpp
index fc5e66a..36b6888 100644
--- a/src/coap/qcoapclient.cpp
+++ b/src/coap/qcoapclient.cpp
@@ -32,6 +32,7 @@
#include "qcoapreply.h"
#include "qcoapdiscoveryreply.h"
#include "qcoapnamespace.h"
+#include <QtCore/qiodevice.h>
#include <QtCore/qurl.h>
#include <QtNetwork/qudpsocket.h>
@@ -562,7 +563,7 @@ void QCoapClient::cancelObserve(QCoapReply *notifiedReply)
Sends the CoAP \a request to its own URL and returns a new QCoapReply
object.
*/
-QCoapReply *QCoapClientPrivate::sendRequest(QCoapRequest &request)
+QCoapReply *QCoapClientPrivate::sendRequest(const QCoapRequest &request)
{
Q_Q(QCoapClient);
@@ -583,7 +584,7 @@ QCoapReply *QCoapClientPrivate::sendRequest(QCoapRequest &request)
Sends the CoAP \a request to its own URL and returns a
new QCoapDiscoveryReply object.
*/
-QCoapDiscoveryReply *QCoapClientPrivate::sendDiscovery(QCoapRequest &request)
+QCoapDiscoveryReply *QCoapClientPrivate::sendDiscovery(const QCoapRequest &request)
{
Q_Q(QCoapClient);
diff --git a/src/coap/qcoapclient.h b/src/coap/qcoapclient.h
index 877e3e7..993399a 100644
--- a/src/coap/qcoapclient.h
+++ b/src/coap/qcoapclient.h
@@ -35,7 +35,6 @@
#include <QtCoap/qcoapglobal.h>
#include <QtCoap/qcoapnamespace.h>
#include <QtCore/qobject.h>
-#include <QtCore/qiodevice.h>
#include <QtNetwork/qabstractsocket.h>
QT_BEGIN_NAMESPACE
@@ -45,6 +44,7 @@ class QCoapDiscoveryReply;
class QCoapRequest;
class QCoapProtocol;
class QCoapConnection;
+class QIODevice;
class QCoapClientPrivate;
class Q_COAP_EXPORT QCoapClient : public QObject
diff --git a/src/coap/qcoapclient_p.h b/src/coap/qcoapclient_p.h
index c8c3d73..0ddf34a 100644
--- a/src/coap/qcoapclient_p.h
+++ b/src/coap/qcoapclient_p.h
@@ -61,8 +61,8 @@ public:
QCoapConnection *connection = nullptr;
QThread *workerThread = nullptr;
- QCoapReply *sendRequest(QCoapRequest &request);
- QCoapDiscoveryReply *sendDiscovery(QCoapRequest &request);
+ QCoapReply *sendRequest(const QCoapRequest &request);
+ QCoapDiscoveryReply *sendDiscovery(const QCoapRequest &request);
bool send(QCoapReply *reply);
Q_DECLARE_PUBLIC(QCoapClient)
diff --git a/src/coap/qcoapinternalrequest.cpp b/src/coap/qcoapinternalrequest.cpp
index b76f255..486e51a 100644
--- a/src/coap/qcoapinternalrequest.cpp
+++ b/src/coap/qcoapinternalrequest.cpp
@@ -132,7 +132,7 @@ void QCoapInternalRequest::initForReset(quint16 messageId)
Explicitly casts \a value to a char and appends it to the \a buffer.
*/
template<typename T>
-void appendByte(QByteArray *buffer, T value) {
+static void appendByte(QByteArray *buffer, T value) {
buffer->append(static_cast<char>(value));
}
@@ -173,13 +173,13 @@ QByteArray QCoapInternalRequest::toQByteArray() const
// Insert Options
if (!d->message.options().isEmpty()) {
- // Sort options by ascending order
- // TODO: sort at insertion time in QCoapMessage, and assert that options are sorted here
QVector<QCoapOption> options = d->message.options();
- std::sort(options.begin(), options.end(),
- [](const QCoapOption &a, const QCoapOption &b) -> bool {
- return a.name() < b.name();
- });
+
+ // Options should be sorted in order of their option numbers
+ Q_ASSERT(std::is_sorted(d->message.options().cbegin(), d->message.options().cend(),
+ [](const QCoapOption &a, const QCoapOption &b) -> bool {
+ return a.name() < b.name();
+ }));
quint8 lastOptionNumber = 0;
for (const QCoapOption &option : qAsConst(options)) {
@@ -336,10 +336,10 @@ QCoapOption QCoapInternalRequest::blockOption(QCoapOption::OptionName name, uint
QByteArray optionValue;
Q_ASSERT(!(optionData >> 24));
if (optionData > 0xFFFF)
- optionValue.append(static_cast<char>(optionData >> 16));
+ appendByte(&optionValue, optionData >> 16);
if (optionData > 0xFF)
- optionValue.append(static_cast<char>((optionData >> 8) & 0xFF));
- optionValue.append(static_cast<char>(optionData & 0xFF));
+ appendByte(&optionValue, (optionData >> 8) & 0xFF);
+ appendByte(&optionValue, optionData & 0xFF);
return QCoapOption(name, optionValue);
}
diff --git a/src/coap/qcoapmessage.cpp b/src/coap/qcoapmessage.cpp
index e7d87c7..0b7fd2a 100644
--- a/src/coap/qcoapmessage.cpp
+++ b/src/coap/qcoapmessage.cpp
@@ -132,7 +132,15 @@ void QCoapMessage::addOption(QCoapOption::OptionName name, const QByteArray &val
void QCoapMessage::addOption(const QCoapOption &option)
{
Q_D(QCoapMessage);
- d->options.push_back(option);
+
+ // Sort options by ascending order while inserting
+ d->options.insert(
+ std::upper_bound(d->options.begin(), d->options.end(), option,
+ [](const QCoapOption &a, const QCoapOption &b) -> bool {
+ return a.name() < b.name();
+ }),
+ option
+ );
}
/*!
diff --git a/src/coap/qcoapoption.cpp b/src/coap/qcoapoption.cpp
index 09c5dc8..b3058f5 100644
--- a/src/coap/qcoapoption.cpp
+++ b/src/coap/qcoapoption.cpp
@@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE
Indicates the name of an option.
The value of each ID is as specified by the CoAP standard, with the
- exception of Invalid. You can refer to the
+ exception of Invalid. You can refer to
\l{https://tools.ietf.org/html/rfc7252#section-5.10}{RFC 7252} and
\l{https://tools.ietf.org/html/rfc7959#section-2.1}{RFC 7959} for more details.
diff --git a/src/coap/qcoapreply.h b/src/coap/qcoapreply.h
index 88b127c..bce03fe 100644
--- a/src/coap/qcoapreply.h
+++ b/src/coap/qcoapreply.h
@@ -47,7 +47,7 @@ class Q_COAP_EXPORT QCoapReply : public QIODevice
public:
explicit QCoapReply(const QCoapRequest &request, QObject *parent = nullptr);
- ~QCoapReply();
+ ~QCoapReply() override;
QtCoap::ResponseCode responseCode() const;
QCoapMessage message() const;