diff options
author | Karsten Heimrich <karsten.heimrich@qt.io> | 2019-03-15 14:35:54 +0100 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@qt.io> | 2019-03-28 08:47:42 +0000 |
commit | 2914fea53080aa38c678edaef9edf3c9cf6b525c (patch) | |
tree | 4c6faa9810d4cf52bb5f6412277de615a80a9266 | |
parent | 9dbd77bc259da87d0a2baa6e7be6739b9b425175 (diff) |
Fix propagating the KNXnet/IP TCP control and data endpoint
* In case we are using a TCP connection, we always need to send
the route back endpoint (that basically signals the server to
use the established TCP connection to send the packages).
Change-Id: If7c42e482e043d0f57ee6fabacd08d7159e5b2c4
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
-rw-r--r-- | src/knx/netip/qknxnetipendpointconnection.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/knx/netip/qknxnetipendpointconnection.cpp b/src/knx/netip/qknxnetipendpointconnection.cpp index 679f457..e4c7c00 100644 --- a/src/knx/netip/qknxnetipendpointconnection.cpp +++ b/src/knx/netip/qknxnetipendpointconnection.cpp @@ -419,14 +419,15 @@ QKnxNetIp::ServiceType m_secureTimer->stop(); m_secureTimer->disconnect(); m_waitForAuthentication = false; + auto ep = (m_tcpSocket ? m_routeBack : (m_nat ? m_routeBack : m_localEndpoint)); auto secureWrapper = QKnxNetIpSecureWrapperProxy::secureBuilder() .setSecureSessionId(m_sessionId) .setSequenceNumber(m_sequenceNumber) .setSerialNumber(m_serialNumber) // .setMessageTag(0x0000) TODO: Do we need an API for this? .setEncapsulatedFrame(QKnxNetIpConnectRequestProxy::builder() - .setControlEndpoint(m_nat ? m_routeBack : m_localEndpoint) - .setDataEndpoint(m_nat ? m_routeBack : m_localEndpoint) + .setControlEndpoint(ep) + .setDataEndpoint(ep) .setRequestInformation(m_cri) .create()) .create(QKnxCryptographicEngine::sessionKey(m_secureConfig.d->privateKey, @@ -927,7 +928,9 @@ void QKnxNetIpEndpointConnectionPrivate::processConnectResponse(const QKnxNetIpF m_remoteDataEndpoint = response.dataEndpoint(); m_lastStateRequest = QKnxNetIpConnectionStateRequestProxy::builder() .setChannelId(m_channelId) - .setControlEndpoint(m_nat ? m_routeBack : m_localEndpoint) + .setControlEndpoint( + m_tcpSocket ? m_routeBack : (m_nat ? m_routeBack : m_localEndpoint) + ) .create(); QTimer::singleShot(0, [&]() { sendStateRequest(); }); |