aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/coap/qcoapinternalmessage.cpp2
-rw-r--r--src/coap/qcoapinternalreply.cpp2
-rw-r--r--src/coap/qcoapinternalrequest.cpp2
-rw-r--r--src/coap/qcoapoption.cpp122
-rw-r--r--src/coap/qcoapoption.h18
-rw-r--r--src/coap/qcoapoption_p.h4
6 files changed, 68 insertions, 82 deletions
diff --git a/src/coap/qcoapinternalmessage.cpp b/src/coap/qcoapinternalmessage.cpp
index 4da627e..121ee74 100644
--- a/src/coap/qcoapinternalmessage.cpp
+++ b/src/coap/qcoapinternalmessage.cpp
@@ -124,7 +124,7 @@ void QCoapInternalMessage::setFromDescriptiveBlockOption(const QCoapOption &opti
Q_D(QCoapInternalMessage);
//! TODO Cover with tests
- const quint8 *optionData = reinterpret_cast<const quint8 *>(option.value().data());
+ const quint8 *optionData = reinterpret_cast<const quint8 *>(option.opaqueValue().data());
const quint8 lastByte = optionData[option.length() - 1];
quint32 blockNumber = 0;
diff --git a/src/coap/qcoapinternalreply.cpp b/src/coap/qcoapinternalreply.cpp
index fe27ee0..2480a05 100644
--- a/src/coap/qcoapinternalreply.cpp
+++ b/src/coap/qcoapinternalreply.cpp
@@ -188,7 +188,7 @@ int QCoapInternalReply::nextBlockToSend() const
if (!option.isValid())
return -1;
- const quint8 *optionData = reinterpret_cast<const quint8 *>(option.value().data());
+ const quint8 *optionData = reinterpret_cast<const quint8 *>(option.opaqueValue().data());
const quint8 lastByte = optionData[option.length() - 1];
// M field
diff --git a/src/coap/qcoapinternalrequest.cpp b/src/coap/qcoapinternalrequest.cpp
index 0237259..ff6354c 100644
--- a/src/coap/qcoapinternalrequest.cpp
+++ b/src/coap/qcoapinternalrequest.cpp
@@ -231,7 +231,7 @@ QByteArray QCoapInternalRequest::toQByteArray() const
if (isOptionLengthExtended)
appendByte(&pdu, optionLengthExtended);
- pdu.append(option.value());
+ pdu.append(option.opaqueValue());
lastOptionNumber = option.name();
}
diff --git a/src/coap/qcoapoption.cpp b/src/coap/qcoapoption.cpp
index ddb42fd..4973091 100644
--- a/src/coap/qcoapoption.cpp
+++ b/src/coap/qcoapoption.cpp
@@ -88,59 +88,45 @@ Q_LOGGING_CATEGORY(lcCoapOption, "qt.coap.option")
/*!
Constructs a new CoAP option with the given \a name
- and QByteArray \a value.
+ and QByteArray \a opaqueValue.
If no parameters are passed, constructs an Invalid object.
\sa isValid()
*/
-QCoapOption::QCoapOption(OptionName name, const QByteArray &value) :
+QCoapOption::QCoapOption(OptionName name, const QByteArray &opaqueValue) :
d_ptr(new QCoapOptionPrivate)
{
Q_D(QCoapOption);
d->name = name;
- setValue(value);
+ d->setValue(opaqueValue);
}
/*!
Constructs a new CoAP option with the given \a name
- and the QStringView \a value.
+ and the QString \a stringValue.
\sa isValid()
*/
-QCoapOption::QCoapOption(OptionName name, QStringView value) :
+QCoapOption::QCoapOption(OptionName name, const QString &stringValue) :
d_ptr(new QCoapOptionPrivate)
{
Q_D(QCoapOption);
d->name = name;
- setValue(value);
+ d->setValue(stringValue);
}
/*!
Constructs a new CoAP option with the given \a name
- and the string \a value.
+ and the unsigned integer \a intValue.
\sa isValid()
*/
-QCoapOption::QCoapOption(OptionName name, const char *value) :
+QCoapOption::QCoapOption(OptionName name, quint32 intValue) :
d_ptr(new QCoapOptionPrivate)
{
Q_D(QCoapOption);
d->name = name;
- setValue(value);
-}
-
-/*!
- Constructs a new CoAP option with the given \a name
- and the unsigned integer \a value.
-
- \sa isValid()
- */
-QCoapOption::QCoapOption(OptionName name, quint32 value) :
- d_ptr(new QCoapOptionPrivate)
-{
- Q_D(QCoapOption);
- d->name = name;
- setValue(value);
+ d->setValue(intValue);
}
/*!
@@ -203,7 +189,7 @@ void QCoapOption::swap(QCoapOption &other) Q_DECL_NOTHROW
/*!
Returns the value of the option.
*/
-QByteArray QCoapOption::value() const
+QByteArray QCoapOption::opaqueValue() const
{
Q_D(const QCoapOption);
return d->value;
@@ -212,7 +198,7 @@ QByteArray QCoapOption::value() const
/*!
Returns the integer value of the option.
*/
-quint32 QCoapOption::valueToInt() const
+quint32 QCoapOption::uintValue() const
{
Q_D(const QCoapOption);
@@ -224,6 +210,15 @@ quint32 QCoapOption::valueToInt() const
}
/*!
+ Returns the QString value of the option.
+*/
+QString QCoapOption::stringValue() const
+{
+ Q_D(const QCoapOption);
+ return QString::fromUtf8(d->value);
+}
+
+/*!
Returns the length of the value of the option.
*/
int QCoapOption::length() const
@@ -269,95 +264,88 @@ bool QCoapOption::operator!=(const QCoapOption &other) const
}
/*!
+ \internal
+
Sets the \a value for the option.
*/
-void QCoapOption::setValue(const QByteArray &value)
+void QCoapOptionPrivate::setValue(const QByteArray &opaqueValue)
{
- Q_D(QCoapOption);
bool oversized = false;
// Check for value maximum size, according to section 5.10 of RFC 7252
// https://tools.ietf.org/html/rfc7252#section-5.10
- switch (d_ptr->name) {
- case IfNoneMatch:
- if (value.size() > 0)
+ switch (name) {
+ case QCoapOption::IfNoneMatch:
+ if (opaqueValue.size() > 0)
oversized = true;
break;
- case UriPort:
- case ContentFormat:
- case Accept:
- if (value.size() > 2)
+ case QCoapOption::UriPort:
+ case QCoapOption::ContentFormat:
+ case QCoapOption::Accept:
+ if (opaqueValue.size() > 2)
oversized = true;
break;
- case MaxAge:
- case Size1:
- if (value.size() > 4)
+ case QCoapOption::MaxAge:
+ case QCoapOption::Size1:
+ if (opaqueValue.size() > 4)
oversized = true;
break;
- case IfMatch:
- case Etag:
- if (value.size() > 8)
+ case QCoapOption::IfMatch:
+ case QCoapOption::Etag:
+ if (opaqueValue.size() > 8)
oversized = true;
break;
- case UriHost:
- case LocationPath:
- case UriPath:
- case UriQuery:
- case LocationQuery:
- case ProxyScheme:
- if (value.size() > 255)
+ case QCoapOption::UriHost:
+ case QCoapOption::LocationPath:
+ case QCoapOption::UriPath:
+ case QCoapOption::UriQuery:
+ case QCoapOption::LocationQuery:
+ case QCoapOption::ProxyScheme:
+ if (opaqueValue.size() > 255)
oversized = true;
break;
- case ProxyUri:
- if (value.size() > 1034)
+ case QCoapOption::ProxyUri:
+ if (opaqueValue.size() > 1034)
oversized = true;
break;
- case Observe:
- case Block2:
- case Block1:
- case Size2:
+ case QCoapOption::Observe:
+ case QCoapOption::Block2:
+ case QCoapOption::Block1:
+ case QCoapOption::Size2:
default:
break;
}
if (oversized)
- qCWarning(lcCoapOption) << "Value" << value << "is probably too big for option" << d->name;
+ qCWarning(lcCoapOption) << "Value" << opaqueValue << "is probably too big for option" << name;
- d->value = value;
+ value = opaqueValue;
}
/*!
+ \internal
\overload
Sets the \a value for the option.
*/
-void QCoapOption::setValue(QStringView value)
+void QCoapOptionPrivate::setValue(const QString &value)
{
setValue(value.toUtf8());
}
/*!
+ \internal
\overload
Sets the \a value for the option.
*/
-void QCoapOption::setValue(const char *value)
-{
- setValue(QByteArray(value, static_cast<int>(strlen(value))));
-}
-
-/*!
- \overload
-
- Sets the \a value for the option.
- */
-void QCoapOption::setValue(quint32 value)
+void QCoapOptionPrivate::setValue(quint32 value)
{
QByteArray data;
for (; value; value >>= 8)
diff --git a/src/coap/qcoapoption.h b/src/coap/qcoapoption.h
index ea9dc3c..ed8ebaf 100644
--- a/src/coap/qcoapoption.h
+++ b/src/coap/qcoapoption.h
@@ -64,10 +64,9 @@ public:
Size1 = 60
};
- QCoapOption(OptionName name = Invalid, const QByteArray &value = QByteArray());
- QCoapOption(OptionName name, QStringView value);
- QCoapOption(OptionName name, const char *value);
- QCoapOption(OptionName name, quint32 value);
+ QCoapOption(OptionName name = Invalid, const QByteArray &opaqueValue = QByteArray());
+ QCoapOption(OptionName name, const QString &stringValue);
+ QCoapOption(OptionName name, quint32 intValue);
QCoapOption(const QCoapOption &other);
QCoapOption(QCoapOption &&other);
~QCoapOption();
@@ -76,8 +75,9 @@ public:
QCoapOption &operator=(QCoapOption &&other) Q_DECL_NOTHROW;
void swap(QCoapOption &other) Q_DECL_NOTHROW;
- QByteArray value() const;
- quint32 valueToInt() const;
+ QByteArray opaqueValue() const;
+ quint32 uintValue() const;
+ QString stringValue() const;
int length() const;
OptionName name() const;
bool isValid() const;
@@ -85,12 +85,6 @@ public:
bool operator==(const QCoapOption &other) const;
bool operator!=(const QCoapOption &other) const;
-protected:
- void setValue(const QByteArray &value);
- void setValue(QStringView value);
- void setValue(const char *value);
- void setValue(quint32 value);
-
private:
QCoapOptionPrivate *d_ptr;
diff --git a/src/coap/qcoapoption_p.h b/src/coap/qcoapoption_p.h
index 9cc1bac..ff60acd 100644
--- a/src/coap/qcoapoption_p.h
+++ b/src/coap/qcoapoption_p.h
@@ -52,6 +52,10 @@ class Q_AUTOTEST_EXPORT QCoapOptionPrivate
public:
QCoapOptionPrivate() = default;
+ void setValue(const QByteArray &opaqueValue);
+ void setValue(const QString &value);
+ void setValue(quint32 value);
+
QCoapOption::OptionName name = QCoapOption::Invalid;
QByteArray value;
};