diff options
| author | Linus Jahn <lnj@kaidan.im> | 2020-07-01 21:09:34 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2020-07-20 17:18:23 +0200 |
| commit | 86a1888e39765dd57762c4422e6ede0c4a408935 (patch) | |
| tree | 9bc52c2416f4d93085e43d249d783712c2f01e00 | |
| parent | eaf0c052a7218951385f9f4d5da8b669d92102ca (diff) | |
| download | qxmpp-86a1888e39765dd57762c4422e6ede0c4a408935.tar.gz | |
QXmppMessageReceiptManager: Ignore all error messages
Not only receipt requests, but also receipts from error messages should
not be used.
| -rw-r--r-- | src/client/QXmppMessageReceiptManager.cpp | 5 | ||||
| -rw-r--r-- | tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp | 21 |
2 files changed, 24 insertions, 2 deletions
diff --git a/src/client/QXmppMessageReceiptManager.cpp b/src/client/QXmppMessageReceiptManager.cpp index 27d96d11..ea4bef96 100644 --- a/src/client/QXmppMessageReceiptManager.cpp +++ b/src/client/QXmppMessageReceiptManager.cpp @@ -53,6 +53,9 @@ bool QXmppMessageReceiptManager::handleStanza(const QDomElement &stanza) QXmppMessage message; message.parse(stanza); + if (message.type() == QXmppMessage::Error) + return false; + // Handle receipts and cancel any further processing. if (!message.receiptId().isEmpty()) { // Buggy clients also mark carbon messages as received; to avoid this @@ -64,7 +67,7 @@ bool QXmppMessageReceiptManager::handleStanza(const QDomElement &stanza) } // If requested, send a receipt. - if (message.isReceiptRequested() && !message.from().isEmpty() && !message.id().isEmpty() && message.type() != QXmppMessage::Error) { + if (message.isReceiptRequested() && !message.from().isEmpty() && !message.id().isEmpty()) { 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 0aff489c..4095f6a8 100644 --- a/tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp +++ b/tests/qxmppmessagereceiptmanager/tst_qxmppmessagereceiptmanager.cpp @@ -99,7 +99,7 @@ void tst_QXmppMessageReceiptManager::testReceipt_data() << false << false << true; - QTest::newRow("error") + QTest::newRow("error-request") << QByteArray( "<message xml:lang=\"en\" " "to=\"northumberland@shakespeare.lit/westminster\" " @@ -121,6 +121,25 @@ void tst_QXmppMessageReceiptManager::testReceipt_data() << false << false << false; + QTest::newRow("error-receipt") + << QByteArray( + "<message xml:lang=\"en\" " + "to=\"northumberland@shakespeare.lit/westminster\" " + "from=\"kingrichard@royalty.england.lit/throne\" " + "type=\"error\" id=\"bi29sg183b4v\" " + "> " + "<received xmlns=\"urn:xmpp:receipts\" id=\"richard2-4.1.247\"/>" + "<error code=\"500\" type=\"wait\"> " + "<resource-constraint xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\"/> " + "<text xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\" xml:lang=\"en\">" + "Your contact offline message queue is full. The message has been discarded." + "</text>" + "</error>" + "<body>1</body> " + "</message>") + << false + << false + << false; QTest::newRow("message with receipt request") << QByteArray( "<message xml:lang=\"en\" " |
