From 3b111ee6b66cf4d0f82d2a245f59fb130728cae7 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Mon, 17 Oct 2022 10:31:49 +0200 Subject: EntityTimeManager: Use new IQ request handling --- src/client/QXmppEntityTimeManager.cpp | 40 +++++++++++++++++++---------------- src/client/QXmppEntityTimeManager.h | 1 + 2 files changed, 23 insertions(+), 18 deletions(-) (limited to 'src/client') diff --git a/src/client/QXmppEntityTimeManager.cpp b/src/client/QXmppEntityTimeManager.cpp index 0dd1d4cc..17daa844 100644 --- a/src/client/QXmppEntityTimeManager.cpp +++ b/src/client/QXmppEntityTimeManager.cpp @@ -8,6 +8,7 @@ #include "QXmppConstants_p.h" #include "QXmppEntityTimeIq.h" #include "QXmppFutureUtils_p.h" +#include "QXmppIqHandling.h" #include "QXmppUtils.h" #include @@ -71,31 +72,34 @@ QStringList QXmppEntityTimeManager::discoveryFeatures() const bool QXmppEntityTimeManager::handleStanza(const QDomElement &element) { + if (QXmpp::handleIqRequests(element, client(), this)) { + return true; + } + if (element.tagName() == "iq" && QXmppEntityTimeIq::isEntityTimeIq(element)) { QXmppEntityTimeIq entityTime; entityTime.parse(element); - - if (entityTime.type() == QXmppIq::Get) { - // respond to query - QXmppEntityTimeIq responseIq; - responseIq.setType(QXmppIq::Result); - responseIq.setId(entityTime.id()); - responseIq.setTo(entityTime.from()); - - QDateTime currentTime = QDateTime::currentDateTime(); - QDateTime utc = currentTime.toUTC(); - responseIq.setUtc(utc); - - currentTime.setTimeSpec(Qt::UTC); - responseIq.setTzo(utc.secsTo(currentTime)); - - client()->sendPacket(responseIq); - } - emit timeReceived(entityTime); return true; } return false; } + +std::variant QXmppEntityTimeManager::handleIq(QXmppEntityTimeIq iq) +{ + using Err = QXmppStanza::Error; + if (iq.type() != QXmppIq::Get) { + return Err(Err::Cancel, Err::BadRequest, QStringLiteral("Only IQ requests of type 'get' allowed.")); + } + + QXmppEntityTimeIq responseIq; + QDateTime currentTime = QDateTime::currentDateTime(); + QDateTime utc = currentTime.toUTC(); + responseIq.setUtc(utc); + + currentTime.setTimeSpec(Qt::UTC); + responseIq.setTzo(utc.secsTo(currentTime)); + return responseIq; +} /// \endcond diff --git a/src/client/QXmppEntityTimeManager.h b/src/client/QXmppEntityTimeManager.h index c8f2c894..a807caad 100644 --- a/src/client/QXmppEntityTimeManager.h +++ b/src/client/QXmppEntityTimeManager.h @@ -32,6 +32,7 @@ public: /// \cond QStringList discoveryFeatures() const override; bool handleStanza(const QDomElement &element) override; + std::variant handleIq(QXmppEntityTimeIq iq); /// \endcond Q_SIGNALS: -- cgit v1.2.3