diff options
Diffstat (limited to 'src/knx/netip/qknxnetiptunnel.cpp')
-rw-r--r-- | src/knx/netip/qknxnetiptunnel.cpp | 112 |
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); } /*! |