summaryrefslogtreecommitdiffstats
path: root/examples/knx/knxeditor/tunneling.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/knx/knxeditor/tunneling.cpp')
-rw-r--r--examples/knx/knxeditor/tunneling.cpp52
1 files changed, 44 insertions, 8 deletions
diff --git a/examples/knx/knxeditor/tunneling.cpp b/examples/knx/knxeditor/tunneling.cpp
index 6f2cd56..6a5e967 100644
--- a/examples/knx/knxeditor/tunneling.cpp
+++ b/examples/knx/knxeditor/tunneling.cpp
@@ -51,11 +51,13 @@
#include "tunneling.h"
#include "ui_tunneling.h"
-#include <QtCore/QMetaEnum>
-#include <QtCore/QMetaType>
-#include <QtGui/QStandardItemModel>
-#include <QtKnx/QKnxLinkLayerFrameBuilder>
-#include <QtWidgets/QTreeView>
+#include <QKnxLinkLayerFrameBuilder>
+#include <QKnxNetIpSecureConfiguration>
+#include <QMetaEnum>
+#include <QMetaType>
+#include <QStandardItemModel>
+#include <QTreeView>
+#include <QTreeWidget>
// -- KnxAddressValidator
@@ -94,9 +96,16 @@ Tunneling::Tunneling(QWidget* parent)
connect(ui->connectTunneling, &QPushButton::clicked, this, [&]() {
m_tunnel.setLocalPort(0);
- m_tunnel.connectToHost(m_server.controlEndpointAddress(),
- m_server.controlEndpointPort(),
- m_proto);
+ if (ui->secureSessionCheckBox->isChecked()) {
+ auto config = m_configs.value(ui->secureSessionCb->currentIndex());
+ config.setKeepSecureSessionAlive(true);
+ m_tunnel.setSecureConfiguration(config);
+ m_tunnel.connectToHostEncrypted(m_server.controlEndpointAddress(),
+ m_server.controlEndpointPort());
+ } else {
+ m_tunnel.connectToHost(m_server.controlEndpointAddress(),
+ m_server.controlEndpointPort(), m_proto);
+ }
});
connect(&m_tunnel, &QKnxNetIpTunnel::connected, this, [&] {
@@ -266,6 +275,8 @@ void Tunneling::setKnxNetIpServer(const QKnxNetIpServerInfo &server)
ui->connectTunneling->setEnabled(true);
ui->disconnectTunneling->setEnabled(false);
}
+
+ updateSecureConfigCombo();
ui->tunnelingSendRequest->setEnabled(false);
}
@@ -334,6 +345,12 @@ void Tunneling::on_manualInput_clicked(bool checked)
ui->cemiFrame->setFocus();
}
+void Tunneling::onKeyringChanged(const QVector<QKnxNetIpSecureConfiguration> &configs)
+{
+ m_configs = configs;
+ updateSecureConfigCombo();
+}
+
void Tunneling::setupApciTpciComboBox()
{
int index = QKnxTpdu::staticMetaObject.indexOfEnumerator("ApplicationControlField");
@@ -387,3 +404,22 @@ void Tunneling::updateAdditionalInfoTypesComboBox()
model->item(0)->setEnabled(false);
model->item(model->rowCount() - 1)->setEnabled(false);
}
+
+void Tunneling::updateSecureConfigCombo()
+{
+ ui->secureSessionCb->clear();
+
+ ui->secureSessionCheckBox->setEnabled(!m_configs.isEmpty());
+ ui->secureSessionCheckBox->setChecked(m_proto == QKnxNetIp::HostProtocol::TCP_IPv4);
+
+ for (int i = 0; i < m_configs.size(); ++i) {
+ const auto &config = m_configs[i];
+ if (m_server.individualAddress() != config.host())
+ continue;
+
+ const auto ia = config.individualAddress();
+ ui->secureSessionCb->addItem(tr("User ID: %1 (Individual Address: %2)")
+ .arg(config.userId())
+ .arg(ia.isValid() ? ia.toString() : tr("No specific address")), i);
+ }
+}