diff options
Diffstat (limited to 'src/BobinkClient.cpp')
| -rw-r--r-- | src/BobinkClient.cpp | 89 |
1 files changed, 69 insertions, 20 deletions
diff --git a/src/BobinkClient.cpp b/src/BobinkClient.cpp index ea61583..a067489 100644 --- a/src/BobinkClient.cpp +++ b/src/BobinkClient.cpp @@ -1,3 +1,7 @@ +/** + * @file BobinkClient.cpp + * @brief BobinkClient implementation. + */ #include "BobinkClient.h" #include "BobinkAuth.h" @@ -12,6 +16,7 @@ static QString defaultPkiDir() + QStringLiteral("/pki"); } +/** @brief Create the standard OPC UA PKI directory tree. */ static void ensurePkiDirs(const QString &base) { for (const auto *sub : {"own/certs", "own/private", @@ -69,7 +74,9 @@ void BobinkClient::setupClient() this, &BobinkClient::handleFindServersFinished); } -// --- Connection properties --- +/* ====================================== + * Connection properties + * ====================================== */ bool BobinkClient::connected() const { return m_connected; } @@ -95,7 +102,9 @@ void BobinkClient::setAuth(BobinkAuth *auth) QOpcUaClient *BobinkClient::opcuaClient() const { return m_client; } -// --- Connection methods --- +/* ====================================== + * Connection methods + * ====================================== */ void BobinkClient::connectToServer() { @@ -112,7 +121,12 @@ void BobinkClient::connectToServer() return; } - m_client->requestEndpoints(QUrl(m_serverUrl)); + QUrl url(m_serverUrl); + if (!url.isValid()) { + emit connectionError(QStringLiteral("Invalid server URL: %1").arg(m_serverUrl)); + return; + } + m_client->requestEndpoints(url); } void BobinkClient::disconnectFromServer() @@ -135,7 +149,9 @@ void BobinkClient::rejectCertificate() m_certLoop->quit(); } -// --- Discovery properties --- +/* ====================================== + * Discovery properties + * ====================================== */ QString BobinkClient::discoveryUrl() const { return m_discoveryUrl; } @@ -169,18 +185,12 @@ const QList<QOpcUaApplicationDescription> &BobinkClient::discoveredServers() con QVariantList BobinkClient::servers() const { - QVariantList list; - for (const auto &s : m_discoveredServers) { - QVariantMap entry; - entry[QStringLiteral("serverName")] = s.applicationName().text(); - entry[QStringLiteral("applicationUri")] = s.applicationUri(); - entry[QStringLiteral("discoveryUrls")] = QVariant::fromValue(s.discoveryUrls()); - list.append(entry); - } - return list; + return m_serversCache; } -// --- PKI --- +/* ====================================== + * PKI + * ====================================== */ QString BobinkClient::pkiDir() const { return m_pkiDir; } @@ -193,14 +203,36 @@ void BobinkClient::setPkiDir(const QString &path) emit pkiDirChanged(); } +QString BobinkClient::certFile() const { return m_certFile; } + +void BobinkClient::setCertFile(const QString &path) +{ + if (m_certFile == path) + return; + m_certFile = path; + emit certFileChanged(); +} + +QString BobinkClient::keyFile() const { return m_keyFile; } + +void BobinkClient::setKeyFile(const QString &path) +{ + if (m_keyFile == path) + return; + m_keyFile = path; + emit keyFileChanged(); +} + void BobinkClient::applyPki() { if (!m_client || m_pkiDir.isEmpty()) return; QOpcUaPkiConfiguration pki; - pki.setClientCertificateFile(m_pkiDir + QStringLiteral("/own/certs/BobinkDemo_cert.der")); - pki.setPrivateKeyFile(m_pkiDir + QStringLiteral("/own/private/BobinkDemo_key.pem")); + if (!m_certFile.isEmpty()) + pki.setClientCertificateFile(m_certFile); + if (!m_keyFile.isEmpty()) + pki.setPrivateKeyFile(m_keyFile); pki.setTrustListDirectory(m_pkiDir + QStringLiteral("/trusted/certs")); pki.setRevocationListDirectory(m_pkiDir + QStringLiteral("/trusted/crl")); pki.setIssuerListDirectory(m_pkiDir + QStringLiteral("/issuers/certs")); @@ -212,7 +244,9 @@ void BobinkClient::applyPki() m_client->setApplicationIdentity(pki.applicationIdentity()); } -// --- Discovery methods --- +/* ====================================== + * Discovery methods + * ====================================== */ void BobinkClient::startDiscovery() { @@ -240,11 +274,17 @@ void BobinkClient::stopDiscovery() void BobinkClient::doDiscovery() { - if (m_client && !m_discoveryUrl.isEmpty()) - m_client->findServers(QUrl(m_discoveryUrl)); + if (!m_client || m_discoveryUrl.isEmpty()) + return; + QUrl url(m_discoveryUrl); + if (!url.isValid()) + return; + m_client->findServers(url); } -// --- Private slots --- +/* ====================================== + * Private slots + * ====================================== */ void BobinkClient::handleStateChanged(QOpcUaClient::ClientState state) { @@ -291,6 +331,7 @@ void BobinkClient::handleConnectError(QOpcUaErrorState *errorState) QEventLoop loop; m_certLoop = &loop; + QTimer::singleShot(30000, &loop, &QEventLoop::quit); loop.exec(); m_certLoop = nullptr; @@ -311,5 +352,13 @@ void BobinkClient::handleFindServersFinished( return; m_discoveredServers = servers; + m_serversCache.clear(); + for (const auto &s : m_discoveredServers) { + QVariantMap entry; + entry[QStringLiteral("serverName")] = s.applicationName().text(); + entry[QStringLiteral("applicationUri")] = s.applicationUri(); + entry[QStringLiteral("discoveryUrls")] = QVariant::fromValue(s.discoveryUrls()); + m_serversCache.append(entry); + } emit serversChanged(); } |
