summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarsten Heimrich <karsten.heimrich@qt.io>2019-03-15 14:35:54 +0100
committerKarsten Heimrich <karsten.heimrich@qt.io>2019-03-28 08:47:42 +0000
commit2914fea53080aa38c678edaef9edf3c9cf6b525c (patch)
tree4c6faa9810d4cf52bb5f6412277de615a80a9266
parent9dbd77bc259da87d0a2baa6e7be6739b9b425175 (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.cpp9
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(); });