From 0b616178800ccb4e5d344cd66b8f1ab9f5d3b698 Mon Sep 17 00:00:00 2001 From: Melvin Keskin Date: Mon, 24 Feb 2020 11:20:30 +0100 Subject: Fix switch statement when handling IQ stanza for registration --- src/client/QXmppRegistrationManager.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/client') diff --git a/src/client/QXmppRegistrationManager.cpp b/src/client/QXmppRegistrationManager.cpp index d43a82e5..da220bf0 100644 --- a/src/client/QXmppRegistrationManager.cpp +++ b/src/client/QXmppRegistrationManager.cpp @@ -228,9 +228,11 @@ bool QXmppRegistrationManager::handleStanza(const QDomElement &stanza) case QXmppIq::Result: info(QStringLiteral("Successfully registered with the service.")); emit registrationSucceeded(); + break; case QXmppIq::Error: warning(QStringLiteral("Registering with the service failed: ").append(iq.error().text())); emit registrationFailed(iq.error()); + break; default: break; // should never occur } -- cgit v1.2.3 From 7d128f179487a68ba975275996b8efadbd143721 Mon Sep 17 00:00:00 2001 From: Blue Date: Fri, 27 Mar 2020 15:17:42 +0300 Subject: QXmppMessageReceiptManager: Fix receipts are sent on error messages (#269) This fixes that behaviour and extends the tests for QXmppMessageReceiptManager. --- src/client/QXmppMessageReceiptManager.cpp | 2 +- .../tst_qxmppmessagereceiptmanager.cpp | 85 +++++++++++++++++++++- 2 files changed, 83 insertions(+), 4 deletions(-) (limited to 'src/client') diff --git a/src/client/QXmppMessageReceiptManager.cpp b/src/client/QXmppMessageReceiptManager.cpp index 3b5c0159..27d96d11 100644 --- a/src/client/QXmppMessageReceiptManager.cpp +++ b/src/client/QXmppMessageReceiptManager.cpp @@ -64,7 +64,7 @@ bool QXmppMessageReceiptManager::handleStanza(const QDomElement &stanza) } // If requested, send a receipt. - if (message.isReceiptRequested() && !message.from().isEmpty() && !message.id().isEmpty()) { + if (message.isReceiptRequested() && !message.from().isEmpty() && !message.id().isEmpty() && message.type() != QXmppMessage::Error) { QXmppMessage receipt; receipt.setTo(message.from()); receipt.setReceiptId(message.id()); diff --git a/tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp b/tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp index 750628dc..0aff489c 100644 --- a/tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp +++ b/tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp @@ -41,15 +41,32 @@ private slots: { m_messageDelivered = true; } + void onLoggerMessage(QXmppLogger::MessageType type, const QString& text) + { + m_receiptSent = true; + } private: - QXmppMessageReceiptManager m_manager; + QXmppMessageReceiptManager* m_manager; + QXmppClient m_client; + QXmppLogger* m_logger; bool m_messageDelivered = false; + bool m_receiptSent = false; }; void tst_QXmppMessageReceiptManager::initTestCase() { - connect(&m_manager, &QXmppMessageReceiptManager::messageDelivered, + m_manager = new QXmppMessageReceiptManager(); + m_logger = new QXmppLogger(); + + m_client.addExtension(m_manager); + m_logger->setLoggingType(QXmppLogger::SignalLogging); + m_client.setLogger(m_logger); + + connect(m_logger, &QXmppLogger::message, + this, &tst_QXmppMessageReceiptManager::onLoggerMessage); + + connect(m_manager, &QXmppMessageReceiptManager::messageDelivered, this, &tst_QXmppMessageReceiptManager::handleMessageDelivered); } @@ -57,6 +74,8 @@ void tst_QXmppMessageReceiptManager::testReceipt_data() { QTest::addColumn("xml"); QTest::addColumn("accept"); + QTest::addColumn("sent"); + QTest::addColumn("handled"); QTest::newRow("correct") << QByteArray( @@ -66,6 +85,8 @@ void tst_QXmppMessageReceiptManager::testReceipt_data() "type=\"normal\">" "" "") + << true + << false << true; QTest::newRow("from-to-equal") << QByteArray( @@ -75,22 +96,80 @@ void tst_QXmppMessageReceiptManager::testReceipt_data() "type=\"normal\">" "" "") + << false + << false + << true; + QTest::newRow("error") + << QByteArray( + " " + " " + " " + " " + " " + " " + " " + "" + "Your contact offline message queue is full. The message has been discarded." + "" + "" + "1 " + "") + << false + << false + << false; + QTest::newRow("message with receipt request") + << QByteArray( + " " + " " + " " + " " + "1 " + "") + << false + << true + << false; + + QTest::newRow("message with no receipt request") + << QByteArray( + " " + " " + " " + "1 " + "") + << false + << false << false; } void tst_QXmppMessageReceiptManager::testReceipt() { m_messageDelivered = false; + m_receiptSent = false; QFETCH(QByteArray, xml); QFETCH(bool, accept); + QFETCH(bool, sent); + QFETCH(bool, handled); QDomDocument doc; QCOMPARE(doc.setContent(xml, true), true); QDomElement element = doc.documentElement(); - QVERIFY(m_manager.handleStanza(element)); + QCOMPARE(m_manager->handleStanza(element), handled); QCOMPARE(m_messageDelivered, accept); + QCOMPARE(m_receiptSent, sent); } QTEST_MAIN(tst_QXmppMessageReceiptManager) -- cgit v1.2.3 From 40622fc1dc45d514dfc82f8802dc6dac5306bddc Mon Sep 17 00:00:00 2001 From: Melvin Keskin Date: Tue, 31 Mar 2020 22:32:11 +0200 Subject: Set user's vCard also when 'from' attribute contains user's bare JID --- src/client/QXmppVCardManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/client') diff --git a/src/client/QXmppVCardManager.cpp b/src/client/QXmppVCardManager.cpp index 8a1b4bab..039a82c3 100644 --- a/src/client/QXmppVCardManager.cpp +++ b/src/client/QXmppVCardManager.cpp @@ -113,7 +113,7 @@ bool QXmppVCardManager::handleStanza(const QDomElement& element) QXmppVCardIq vCardIq; vCardIq.parse(element); - if (vCardIq.from().isEmpty()) { + if (vCardIq.from().isEmpty() || vCardIq.from() == client()->configuration().jidBare()) { d->clientVCard = vCardIq; d->isClientVCardReceived = true; emit clientVCardReceived(); -- cgit v1.2.3 From bf5ae7357bc2348264dfe09d9264238f6decd2c5 Mon Sep 17 00:00:00 2001 From: Melvin Keskin Date: Thu, 19 Mar 2020 21:17:52 +0100 Subject: Do not include 'ask' attribute when renaming roster item --- src/client/QXmppRosterManager.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/client') diff --git a/src/client/QXmppRosterManager.cpp b/src/client/QXmppRosterManager.cpp index 7bba45ec..9da4fd8f 100644 --- a/src/client/QXmppRosterManager.cpp +++ b/src/client/QXmppRosterManager.cpp @@ -282,6 +282,10 @@ bool QXmppRosterManager::renameItem(const QString &bareJid, const QString &name) QXmppRosterIq::Item item = d->entries.value(bareJid); item.setName(name); + // If there is a pending subscription, do not include the corresponding attribute in the stanza. + if (!item.subscriptionStatus().isEmpty()) + item.setSubscriptionStatus({}); + QXmppRosterIq iq; iq.setType(QXmppIq::Set); iq.addItem(item); -- cgit v1.2.3