summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarsten Heimrich <karsten.heimrich@qt.io>2018-09-13 12:40:20 +0200
committerKarsten Heimrich <karsten.heimrich@qt.io>2018-09-13 10:43:52 +0000
commitf54cd5076865f392477fe9b66a54764e1f514c82 (patch)
treec13667189b248caf78f3687a98c9799110779b40
parentdc1c643b503173ad4f1c87b59d597ee10a85292e (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.h16
-rw-r--r--src/knx/netip/qknxnetipsecurewrapper.cpp56
-rw-r--r--src/knx/netip/qknxnetipsecurewrapper.h14
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();