diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/coap/qcoapinternalmessage.cpp | 2 | ||||
-rw-r--r-- | src/coap/qcoapinternalreply.cpp | 2 | ||||
-rw-r--r-- | src/coap/qcoapinternalrequest.cpp | 2 | ||||
-rw-r--r-- | src/coap/qcoapoption.cpp | 122 | ||||
-rw-r--r-- | src/coap/qcoapoption.h | 18 | ||||
-rw-r--r-- | src/coap/qcoapoption_p.h | 4 |
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; }; |