summaryrefslogtreecommitdiffstats
path: root/src/knx/netip/qknxnetiptunnel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/knx/netip/qknxnetiptunnel.cpp')
-rw-r--r--src/knx/netip/qknxnetiptunnel.cpp112
1 files changed, 47 insertions, 65 deletions
diff --git a/src/knx/netip/qknxnetiptunnel.cpp b/src/knx/netip/qknxnetiptunnel.cpp
index ba6279b..5f382f3 100644
--- a/src/knx/netip/qknxnetiptunnel.cpp
+++ b/src/knx/netip/qknxnetiptunnel.cpp
@@ -111,68 +111,55 @@ public:
, m_layer(l)
{}
- void process(const QKnxLinkLayerFrame &frame) override
- {
- Q_Q(QKnxNetIpTunnel);
- emit q->frameReceived(frame);
- }
+ void process(const QKnxLinkLayerFrame &frame) override;
+ void processConnectResponse(const QKnxNetIpFrame &frame) override;
+ void processTunnelingFeatureFrame(const QKnxNetIpFrame &frame) override;
- void processConnectResponse(const QKnxNetIpFrame &frame) override
- {
- QKnxNetIpConnectResponseProxy response(frame);
- if (response.status() == QKnxNetIp::Error::NoMoreUniqueConnections) {
- Q_ASSERT_X(false, "QKnxNetIpTunnelPrivate::process", "NoMoreUniqueConnections "
- "error handling not implemented yet.");
- // TODO: Maybe implement 03_08_04 Tunneling v01.05.03 AS.pdf, paragraph 3.3
- }
+private:
+ QKnxAddress m_address;
+ QKnxNetIp::TunnelLayer m_layer { QKnxNetIp::TunnelLayer::Unknown };
+};
- Q_Q(QKnxNetIpTunnel);
- if (q->state() != QKnxNetIpTunnel::Connected) {
- const auto &crd = response.responseData();
- m_address = QKnxNetIpCrdProxy(crd).individualAddress();
- }
- QKnxNetIpEndpointConnectionPrivate::processConnectResponse(frame);
+void QKnxNetIpTunnelPrivate::process(const QKnxLinkLayerFrame &frame)
+{
+ Q_Q(QKnxNetIpTunnel);
+ emit q->frameReceived(frame);
+}
+
+void QKnxNetIpTunnelPrivate::processConnectResponse(const QKnxNetIpFrame &frame)
+{
+ QKnxNetIpConnectResponseProxy response(frame);
+ if (response.status() == QKnxNetIp::Error::NoMoreUniqueConnections) {
+ Q_ASSERT_X(false, "QKnxNetIpTunnelPrivate::process", "NoMoreUniqueConnections "
+ "error handling not implemented yet.");
+ // TODO: Maybe implement 03_08_04 Tunneling v01.05.03 AS.pdf, paragraph 3.3
}
- void processTunnelingFeatureFrame(const QKnxNetIpFrame &frame) override
- {
- Q_Q(QKnxNetIpTunnel);
- if (frame.serviceType() == QKnxNetIp::ServiceType::TunnelingFeatureInfo) {
- const QKnxNetIpTunnelingFeatureInfoProxy proxy(frame);
- if (proxy.isValid()) {
- emit q->tunnelingFeatureInfoReceived(proxy.featureIdentifier(),
- proxy.featureValue());
- }
- } else if (frame.serviceType() == QKnxNetIp::ServiceType::TunnelingFeatureResponse) {
- const QKnxNetIpTunnelingFeatureResponseProxy proxy(frame);
- if (proxy.isValid()) {
- emit q->tunnelingFeatureResponseReceived(proxy.featureIdentifier(),
- proxy.returnCode(), proxy.featureValue());
- }
- }
+ Q_Q(QKnxNetIpTunnel);
+ if (q->state() != QKnxNetIpTunnel::Connected) {
+ const auto &crd = response.responseData();
+ m_address = QKnxNetIpCrdProxy(crd).individualAddress();
}
+ QKnxNetIpEndpointConnectionPrivate::processConnectResponse(frame);
+}
- void updateCri()
- {
- if (m_criAddress.isValid()) {
- setCri(QKnxNetIpCriProxy::builder()
- .setTunnelLayer(m_layer)
- .setIndividualAddress(m_criAddress)
- .create()
- );
- } else {
- setCri(QKnxNetIpCriProxy::builder()
- .setTunnelLayer(m_layer)
- .create()
- );
+void QKnxNetIpTunnelPrivate::processTunnelingFeatureFrame(const QKnxNetIpFrame &frame)
+{
+ Q_Q(QKnxNetIpTunnel);
+ if (frame.serviceType() == QKnxNetIp::ServiceType::TunnelingFeatureInfo) {
+ const QKnxNetIpTunnelingFeatureInfoProxy proxy(frame);
+ if (proxy.isValid()) {
+ emit q->tunnelingFeatureInfoReceived(proxy.featureIdentifier(),
+ proxy.featureValue());
+ }
+ } else if (frame.serviceType() == QKnxNetIp::ServiceType::TunnelingFeatureResponse) {
+ const QKnxNetIpTunnelingFeatureResponseProxy proxy(frame);
+ if (proxy.isValid()) {
+ emit q->tunnelingFeatureResponseReceived(proxy.featureIdentifier(),
+ proxy.returnCode(), proxy.featureValue());
}
}
-
-private:
- QKnxAddress m_address;
- QKnxAddress m_criAddress;
- QKnxNetIp::TunnelLayer m_layer { QKnxNetIp::TunnelLayer::Unknown };
-};
+}
/*!
Creates a tunnel connection with the parent \a parent.
@@ -220,22 +207,17 @@ QKnxAddress QKnxNetIpTunnel::individualAddress() const
return d_func()->m_address;
}
+#if QT_DEPRECATED_SINCE(5, 13)
/*!
- Sets the requested individual address of the KNXnet/IP client extended
- connect request information (CRI) structure to \a address.
+ \obsolete
- If the \a address is a valid individual address, a extended CRI is used
- to send the connect request. To reset the behavior in favor of a standard
- CRI pass an invalid \a address to the function.
+ Use \l QKnxNetIpSecureConfiguration::setIndividualAddress() instead.
*/
void QKnxNetIpTunnel::setIndividualAddress(const QKnxAddress &address)
{
- if (address.type() != QKnxAddress::Type::Individual)
- return;
-
- d_func()->m_criAddress = address;
- d_func()->updateCri();
+ d_func()->updateCri(address);
}
+#endif
/*!
Returns the layer used for the tunnel connection.
@@ -259,7 +241,7 @@ void QKnxNetIpTunnel::setTunnelLayer(QKnxNetIp::TunnelLayer layer)
return;
d_func()->m_layer = layer;
- d_func()->updateCri();
+ d_func()->updateCri(layer);
}
/*!