diff options
| author | Linus Jahn <lnj@kaidan.im> | 2023-03-11 00:29:02 +0100 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2023-03-11 00:29:02 +0100 |
| commit | 463111576fb1476192acd2d8fe415b8482a8a696 (patch) | |
| tree | e87e3bb8f8724f019954692ac22b0d6386dfa5e7 /src/client | |
| parent | 6ea3edfd83a0bf1558d43e48eac563730276c175 (diff) | |
| parent | 4897c9b6a36e961fb44d2bce04a698f979a423d5 (diff) | |
| download | qxmpp-463111576fb1476192acd2d8fe415b8482a8a696.tar.gz | |
Merge branch '1.5'
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/QXmppCarbonManagerV2.cpp | 8 | ||||
| -rw-r--r-- | src/client/QXmppDiscoveryManager.h | 2 | ||||
| -rw-r--r-- | src/client/QXmppEntityTimeManager.h | 2 | ||||
| -rw-r--r-- | src/client/QXmppFileEncryption.cpp | 2 | ||||
| -rw-r--r-- | src/client/QXmppFileEncryption.h | 8 | ||||
| -rw-r--r-- | src/client/QXmppMamManager.cpp | 9 | ||||
| -rw-r--r-- | src/client/QXmppPubSubManager.cpp | 10 | ||||
| -rw-r--r-- | src/client/QXmppPubSubManager.h | 14 | ||||
| -rw-r--r-- | src/client/QXmppSceEnvelope_p.h | 6 |
9 files changed, 37 insertions, 24 deletions
diff --git a/src/client/QXmppCarbonManagerV2.cpp b/src/client/QXmppCarbonManagerV2.cpp index 0f48370e..7959cab3 100644 --- a/src/client/QXmppCarbonManagerV2.cpp +++ b/src/client/QXmppCarbonManagerV2.cpp @@ -18,9 +18,10 @@ using namespace QXmpp::Private; class CarbonEnableIq : public QXmppIq { public: - CarbonEnableIq() + CarbonEnableIq(const QString &jid) : QXmppIq() { + setTo(jid); setType(QXmppIq::Set); } @@ -30,7 +31,8 @@ public: } void toXmlElementFromChild(QXmlStreamWriter *writer) const override { - writer->writeStartElement(ns_carbons, "enable"); + writer->writeStartElement(QStringLiteral("enable")); + writer->writeDefaultNamespace(ns_carbons); writer->writeEndElement(); } }; @@ -163,7 +165,7 @@ void QXmppCarbonManagerV2::enableCarbons() return; } - client()->sendIq(CarbonEnableIq()).then(this, [this](QXmppClient::IqResult domResult) { + client()->sendIq(CarbonEnableIq(client()->configuration().jidBare())).then(this, [this](QXmppClient::IqResult domResult) { if (auto err = parseIq(std::move(domResult))) { warning("Could not enable message carbons: " % err->description); } else { diff --git a/src/client/QXmppDiscoveryManager.h b/src/client/QXmppDiscoveryManager.h index 10744a0d..d45e63a4 100644 --- a/src/client/QXmppDiscoveryManager.h +++ b/src/client/QXmppDiscoveryManager.h @@ -15,7 +15,7 @@ class QXmppTask; class QXmppDataForm; class QXmppDiscoveryIq; class QXmppDiscoveryManagerPrivate; -class QXmppError; +struct QXmppError; /// \brief The QXmppDiscoveryManager class makes it possible to discover information /// about other entities as defined by \xep{0030}: Service Discovery. diff --git a/src/client/QXmppEntityTimeManager.h b/src/client/QXmppEntityTimeManager.h index 3b090feb..87219122 100644 --- a/src/client/QXmppEntityTimeManager.h +++ b/src/client/QXmppEntityTimeManager.h @@ -13,7 +13,7 @@ template<class T> class QXmppTask; class QXmppEntityTimeIq; -class QXmppError; +struct QXmppError; /// /// \brief The QXmppEntityTimeManager class provided the functionality to get diff --git a/src/client/QXmppFileEncryption.cpp b/src/client/QXmppFileEncryption.cpp index ba78821e..e767769a 100644 --- a/src/client/QXmppFileEncryption.cpp +++ b/src/client/QXmppFileEncryption.cpp @@ -7,6 +7,8 @@ #include <QByteArray> #include <QtCrypto> +#undef min + using namespace QCA; constexpr std::size_t AES128_BLOCK_SIZE = 128 / 8; diff --git a/src/client/QXmppFileEncryption.h b/src/client/QXmppFileEncryption.h index 5bd52c7e..e50bf83c 100644 --- a/src/client/QXmppFileEncryption.h +++ b/src/client/QXmppFileEncryption.h @@ -23,9 +23,9 @@ enum Direction { Decode, }; -QByteArray process(const QByteArray &data, Cipher cipherConfig, Direction direction, const QByteArray &key, const QByteArray &iv); -QByteArray generateKey(Cipher cipher); -QByteArray generateInitializationVector(Cipher); +QXMPP_EXPORT QByteArray process(const QByteArray &data, Cipher cipherConfig, Direction direction, const QByteArray &key, const QByteArray &iv); +QXMPP_EXPORT QByteArray generateKey(Cipher cipher); +QXMPP_EXPORT QByteArray generateInitializationVector(Cipher); // export for tests class QXMPP_EXPORT EncryptionDevice : public QIODevice @@ -50,7 +50,7 @@ private: std::unique_ptr<QCA::Cipher> m_cipher; }; -class DecryptionDevice : public QIODevice +class QXMPP_EXPORT DecryptionDevice : public QIODevice { public: DecryptionDevice(std::unique_ptr<QIODevice> output, Cipher config, const QByteArray &key, const QByteArray &iv); diff --git a/src/client/QXmppMamManager.cpp b/src/client/QXmppMamManager.cpp index f173aa01..c39a3411 100644 --- a/src/client/QXmppMamManager.cpp +++ b/src/client/QXmppMamManager.cpp @@ -264,11 +264,14 @@ QXmppTask<QXmppMamManager::RetrieveResult> QXmppMamManager::retrieveMessages(con if (auto *e2eeExt = client()->encryptionExtension()) { auto &messages = itr->second.messages; auto running = std::make_shared<uint>(0); + // handle case when no message is encrypted + auto hasEncryptedMessages = false; for (auto i = 0; i < messages.size(); i++) { if (!e2eeExt->isEncrypted(messages.at(i))) { continue; } + hasEncryptedMessages = true; auto message = messages.at(i); (*running)++; @@ -290,6 +293,12 @@ QXmppTask<QXmppMamManager::RetrieveResult> QXmppMamManager::retrieveMessages(con } }); } + + if (!hasEncryptedMessages) { + // finish here, no decryptMessage callback will do it + itr->second.finish(); + d->ongoingRequests.erase(itr); + } } else { itr->second.finish(); d->ongoingRequests.erase(itr); diff --git a/src/client/QXmppPubSubManager.cpp b/src/client/QXmppPubSubManager.cpp index 18ad9d7a..de7a9db0 100644 --- a/src/client/QXmppPubSubManager.cpp +++ b/src/client/QXmppPubSubManager.cpp @@ -10,7 +10,7 @@ #include "QXmppConstants_p.h" #include "QXmppPubSubAffiliation.h" #include "QXmppPubSubEventHandler.h" -#include "QXmppPubSubItem.h" +#include "QXmppPubSubBaseItem.h" #include "QXmppPubSubSubscribeOptions.h" #include "QXmppPubSubSubscription.h" #include "QXmppStanza.h" @@ -435,7 +435,7 @@ auto QXmppPubSubManager::retractItem(const QString &jid, const QString &nodeName request.setType(QXmppIq::Set); request.setQueryType(PubSubIq<>::Retract); request.setQueryNode(nodeName); - request.setItems({ QXmppPubSubItem(itemId) }); + request.setItems({ QXmppPubSubBaseItem(itemId) }); request.setTo(jid); return client()->sendGenericIq(std::move(request)); @@ -1006,10 +1006,10 @@ PubSubIq<> QXmppPubSubManager::requestItemsIq(const QString &jid, const QString request.setQueryNode(nodeName); if (!itemIds.isEmpty()) { - QVector<QXmppPubSubItem> items; + QVector<QXmppPubSubBaseItem> items; items.reserve(itemIds.size()); for (const auto &id : itemIds) { - items << QXmppPubSubItem(id); + items << QXmppPubSubBaseItem(id); } request.setItems(items); } @@ -1038,7 +1038,7 @@ auto QXmppPubSubManager::publishItems(PubSubIqBase &&request) -> QXmppTask<Publi return chainIq(client()->sendIq(std::move(request)), this, [](const PubSubIq<> &iq) -> PublishItemsResult { - const auto itemToId = [](const QXmppPubSubItem &item) { + const auto itemToId = [](const QXmppPubSubBaseItem &item) { return item.id(); }; diff --git a/src/client/QXmppPubSubManager.h b/src/client/QXmppPubSubManager.h index 73a5b4d4..154f585d 100644 --- a/src/client/QXmppPubSubManager.h +++ b/src/client/QXmppPubSubManager.h @@ -79,13 +79,13 @@ public: QXmppTask<InstantNodeResult> createInstantNode(const QString &jid, const QXmppPubSubNodeConfig &config); QXmppTask<Result> deleteNode(const QString &jid, const QString &nodeName); QXmppTask<ItemIdsResult> requestItemIds(const QString &serviceJid, const QString &nodeName); - template<typename T = QXmppPubSubItem> + template<typename T = QXmppPubSubBaseItem> QXmppTask<ItemResult<T>> requestItem(const QString &jid, const QString &nodeName, const QString &itemId); - template<typename T = QXmppPubSubItem> + template<typename T = QXmppPubSubBaseItem> QXmppTask<ItemResult<T>> requestItem(const QString &jid, const QString &nodeName, StandardItemId itemId); - template<typename T = QXmppPubSubItem> + template<typename T = QXmppPubSubBaseItem> QXmppTask<ItemsResult<T>> requestItems(const QString &jid, const QString &nodeName); - template<typename T = QXmppPubSubItem> + template<typename T = QXmppPubSubBaseItem> QXmppTask<ItemsResult<T>> requestItems(const QString &jid, const QString &nodeName, const QStringList &itemIds); template<typename T> QXmppTask<PublishItemResult> publishItem(const QString &jid, const QString &nodeName, const T &item); @@ -118,11 +118,11 @@ public: QXmppTask<Result> createOwnPepNode(const QString &nodeName) { return createNode(client()->configuration().jidBare(), nodeName); } QXmppTask<Result> createOwnPepNode(const QString &nodeName, const QXmppPubSubNodeConfig &config) { return createNode(client()->configuration().jidBare(), nodeName, config); } QXmppTask<Result> deleteOwnPepNode(const QString &nodeName) { return deleteNode(client()->configuration().jidBare(), nodeName); } - template<typename T = QXmppPubSubItem> + template<typename T = QXmppPubSubBaseItem> QXmppTask<ItemResult<T>> requestOwnPepItem(const QString &nodeName, const QString &itemId) { return requestItem<T>(client()->configuration().jidBare(), nodeName, itemId); } - template<typename T = QXmppPubSubItem> + template<typename T = QXmppPubSubBaseItem> QXmppTask<ItemResult<T>> requestOwnPepItem(const QString &nodeName, StandardItemId itemId) { return requestItem<T>(client()->configuration().jidBare(), nodeName, itemId); } - template<typename T = QXmppPubSubItem> + template<typename T = QXmppPubSubBaseItem> QXmppTask<ItemsResult<T>> requestOwnPepItems(const QString &nodeName) { return requestItems(client()->configuration().jidBare(), nodeName); } QXmppTask<ItemIdsResult> requestOwnPepItemIds(const QString &nodeName) { return requestItemIds(client()->configuration().jidBare(), nodeName); } template<typename T> diff --git a/src/client/QXmppSceEnvelope_p.h b/src/client/QXmppSceEnvelope_p.h index 4a92378d..b40da9fd 100644 --- a/src/client/QXmppSceEnvelope_p.h +++ b/src/client/QXmppSceEnvelope_p.h @@ -25,8 +25,8 @@ class QXmppSceEnvelopeReader { public: - QXmppSceEnvelopeReader(const QDomElement &element) - : element(element) + QXmppSceEnvelopeReader(QDomElement &&element) + : element(std::move(element)) { } @@ -51,7 +51,7 @@ public: // rpad is usually not needed (but can be parsed manually if really needed) private: - const QDomElement &element; + QDomElement element; }; class QXmppSceEnvelopeWriter |
