diff options
author | Karsten Heimrich <karsten.heimrich@qt.io> | 2018-09-13 12:40:20 +0200 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@qt.io> | 2018-09-13 10:43:52 +0000 |
commit | f54cd5076865f392477fe9b66a54764e1f514c82 (patch) | |
tree | c13667189b248caf78f3687a98c9799110779b40 | |
parent | dc1c643b503173ad4f1c87b59d597ee10a85292e (diff) |
Add missing d-pointer to secure wrapper classv5.12.0-alpha1
Change-Id: Ie122adb7ddec3b7de230c6be5720fbdb4c697ff4
Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
-rw-r--r-- | src/knx/netip/qknxbuilderdata_p.h | 16 | ||||
-rw-r--r-- | src/knx/netip/qknxnetipsecurewrapper.cpp | 56 | ||||
-rw-r--r-- | src/knx/netip/qknxnetipsecurewrapper.h | 14 |
3 files changed, 68 insertions, 18 deletions
diff --git a/src/knx/netip/qknxbuilderdata_p.h b/src/knx/netip/qknxbuilderdata_p.h index 6a350d2..8f8b527 100644 --- a/src/knx/netip/qknxbuilderdata_p.h +++ b/src/knx/netip/qknxbuilderdata_p.h @@ -43,6 +43,7 @@ #include <QtCore/qshareddata.h> #include <QtKnx/qknxnamespace.h> +#include <QtKnx/qknxnetipframe.h> #include <QtKnx/qknxnetipservicefamiliesdib.h> #include <QtKnx/qknxnetipsrp.h> @@ -110,6 +111,21 @@ public: QKnxNetIpDib m_supFamilies; }; +class QKnxNetIpSecureWrapperPrivate : public QSharedData +{ +public: + QKnxNetIpSecureWrapperPrivate() = default; + ~QKnxNetIpSecureWrapperPrivate() = default; + + quint16 m_sessionId { 0 }; + quint64 m_seqNumber { Q_UINT48_MAX + 1 }; + QKnxByteArray m_serial; + QKnxByteArray m_encryptedFrame; + QKnxNetIpFrame m_unencryptedFrame; + quint16 m_tag { 0 }; + QKnxByteArray m_authCode; +}; + QT_END_NAMESPACE #endif diff --git a/src/knx/netip/qknxnetipsecurewrapper.cpp b/src/knx/netip/qknxnetipsecurewrapper.cpp index ca406c8..0639eee 100644 --- a/src/knx/netip/qknxnetipsecurewrapper.cpp +++ b/src/knx/netip/qknxnetipsecurewrapper.cpp @@ -27,6 +27,7 @@ ** ******************************************************************************/ +#include "qknxbuilderdata_p.h" #include "qknxnetipsecurewrapper.h" #include "qknxutils.h" @@ -213,6 +214,18 @@ QKnxNetIpSecureWrapperProxy::Builder QKnxNetIpSecureWrapperProxy::builder() */ /*! + Creates a new empty secure wrapper frame builder object. +*/ +QKnxNetIpSecureWrapperProxy::Builder::Builder() + : d_ptr(new QKnxNetIpSecureWrapperPrivate) +{} + +/*! + Destroys the object and frees any allocated resources. +*/ +QKnxNetIpSecureWrapperProxy::Builder::~Builder() = default; + +/*! Sets the secure session ID to \a sessionId and returns a reference to the builder. By default value is set to \c 0x0000. @@ -223,7 +236,7 @@ QKnxNetIpSecureWrapperProxy::Builder QKnxNetIpSecureWrapperProxy::builder() QKnxNetIpSecureWrapperProxy::Builder & QKnxNetIpSecureWrapperProxy::Builder::setSecureSessionId(quint16 sessionId) { - m_sessionId = sessionId; + d_ptr->m_sessionId = sessionId; return *this; } @@ -243,7 +256,7 @@ QKnxNetIpSecureWrapperProxy::Builder & QKnxNetIpSecureWrapperProxy::Builder & QKnxNetIpSecureWrapperProxy::Builder::setSequenceNumber(quint48 seqNumber) { - m_seqNumber = seqNumber; + d_ptr->m_seqNumber = seqNumber; return *this; } @@ -256,7 +269,7 @@ QKnxNetIpSecureWrapperProxy::Builder & QKnxNetIpSecureWrapperProxy::Builder & QKnxNetIpSecureWrapperProxy::Builder::setSerialNumber(const QKnxByteArray &serialNumber) { - m_serial = serialNumber; + d_ptr->m_serial = serialNumber; return *this; } @@ -272,7 +285,7 @@ QKnxNetIpSecureWrapperProxy::Builder & QKnxNetIpSecureWrapperProxy::Builder & QKnxNetIpSecureWrapperProxy::Builder::setMessageTag(quint16 tag) { - m_tag = tag; + d_ptr->m_tag = tag; return *this; } @@ -286,7 +299,7 @@ QKnxNetIpSecureWrapperProxy::Builder & QKnxNetIpSecureWrapperProxy::Builder & QKnxNetIpSecureWrapperProxy::Builder::setEncapsulatedFrame(const QKnxByteArray &frame) { - m_frame = frame; + d_ptr->m_encryptedFrame = frame; return *this; } @@ -298,7 +311,7 @@ QKnxNetIpSecureWrapperProxy::Builder & QKnxNetIpSecureWrapperProxy::Builder & QKnxNetIpSecureWrapperProxy::Builder::setMessageAuthenticationCode(const QKnxByteArray &data) { - m_authCode = data; + d_ptr->m_authCode = data; return *this; } @@ -312,14 +325,33 @@ QKnxNetIpSecureWrapperProxy::Builder & */ QKnxNetIpFrame QKnxNetIpSecureWrapperProxy::Builder::create() const { - if (m_seqNumber > Q_UINT48_MAX || m_serial.size() != 6 || m_authCode.size() != 16) - return { QKnxNetIp::ServiceType::SecureWrapper }; + if (d_ptr->m_seqNumber > Q_UINT48_MAX || d_ptr->m_serial.size() != 6 + || d_ptr->m_authCode.size() != 16) { + return { QKnxNetIp::ServiceType::SecureWrapper }; + } + + // TODO: introspect the frame and reject secure wrapper frames if possible at all + + return { QKnxNetIp::ServiceType::SecureWrapper, QKnxUtils::QUint16::bytes(d_ptr->m_sessionId) + + QKnxUtils::QUint48::bytes(d_ptr->m_seqNumber) + d_ptr->m_serial + + QKnxUtils::QUint16::bytes(d_ptr->m_tag) + d_ptr->m_encryptedFrame + d_ptr->m_authCode }; +} - // TODO: introspect the frame and reject secure wrapper frames +/*! + Constructs a copy of \a other. +*/ +QKnxNetIpSecureWrapperProxy::Builder::Builder(const Builder &other) + : d_ptr(other.d_ptr) +{} - return { QKnxNetIp::ServiceType::SecureWrapper, QKnxUtils::QUint16::bytes(m_sessionId) - + QKnxUtils::QUint48::bytes(m_seqNumber) + m_serial + QKnxUtils::QUint16::bytes(m_tag) - + m_frame + m_authCode }; +/*! + Assigns the specified \a other to this object. +*/ +QKnxNetIpSecureWrapperProxy::Builder & + QKnxNetIpSecureWrapperProxy::Builder::operator=(const Builder &other) +{ + d_ptr = other.d_ptr; + return *this; } QT_END_NAMESPACE diff --git a/src/knx/netip/qknxnetipsecurewrapper.h b/src/knx/netip/qknxnetipsecurewrapper.h index 3b9900c..a88c4de 100644 --- a/src/knx/netip/qknxnetipsecurewrapper.h +++ b/src/knx/netip/qknxnetipsecurewrapper.h @@ -35,6 +35,7 @@ QT_BEGIN_NAMESPACE +class QKnxNetIpSecureWrapperPrivate; class Q_KNX_EXPORT QKnxNetIpSecureWrapperProxy final { public: @@ -56,6 +57,9 @@ public: class Q_KNX_EXPORT Builder final { public: + Builder(); + ~Builder(); + Builder &setSecureSessionId(quint16 sessionId); Builder &setSequenceNumber(quint48 seqNumber); Builder &setSerialNumber(const QKnxByteArray &serialNumber); @@ -65,13 +69,11 @@ public: QKnxNetIpFrame create() const; + Builder(const Builder &other); + Builder &operator=(const Builder &other); + private: - quint16 m_sessionId { 0 }; - quint64 m_seqNumber { Q_UINT48_MAX + 1 }; - QKnxByteArray m_serial; - QKnxByteArray m_frame; - quint16 m_tag { 0 }; - QKnxByteArray m_authCode; + QSharedDataPointer<QKnxNetIpSecureWrapperPrivate> d_ptr; }; static QKnxNetIpSecureWrapperProxy::Builder builder(); |