diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-02-06 20:13:06 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-02-06 20:13:06 +0000 |
| commit | d793ea8b18527009ddd47816afbf52ada6ae7736 (patch) | |
| tree | 64beacd1ca0188b14c08f93f8f13b6c0edafd27d | |
| parent | 78711c314a4cc20aaf276e519d9db1d91cf22fa7 (diff) | |
| download | qxmpp-d793ea8b18527009ddd47816afbf52ada6ae7736.tar.gz | |
make QXmppMessage carry a receipt ID for XEP-0184
| -rw-r--r-- | src/QXmppMessage.cpp | 28 | ||||
| -rw-r--r-- | src/QXmppMessage.h | 4 | ||||
| -rw-r--r-- | tests/tests.cpp | 30 | ||||
| -rw-r--r-- | tests/tests.h | 2 |
4 files changed, 58 insertions, 6 deletions
diff --git a/src/QXmppMessage.cpp b/src/QXmppMessage.cpp index a10ee7e5..58579c43 100644 --- a/src/QXmppMessage.cpp +++ b/src/QXmppMessage.cpp @@ -118,6 +118,22 @@ void QXmppMessage::setReceiptRequested(bool requested) generateAndSetNextId(); } +/// If this message is a delivery receipt, returns the ID of the +/// original message. + +QString QXmppMessage::receiptId() const +{ + return m_receiptId; +} + +/// Make this message a delivery receipt for the message with +/// the given \a id. + +void QXmppMessage::setReceiptId(const QString &id) +{ + m_receiptId = id; +} + /// Returns the message's type. /// @@ -251,6 +267,12 @@ void QXmppMessage::parse(const QDomElement &element) } // XEP-0184: Message Delivery Receipts + QDomElement receivedElement = element.firstChildElement("received"); + if (!receivedElement.isNull() && receivedElement.namespaceURI() == ns_message_receipts) { + m_receiptId = receivedElement.attribute("id"); + } else { + m_receiptId = QString(); + } m_receiptRequested = element.firstChildElement("request").namespaceURI() == ns_message_receipts; // XEP-0203: Delayed Delivery @@ -331,6 +353,12 @@ void QXmppMessage::toXml(QXmlStreamWriter *xmlWriter) const } // XEP-0184: Message Delivery Receipts + if (!m_receiptId.isEmpty()) { + xmlWriter->writeStartElement("received"); + xmlWriter->writeAttribute("xmlns", ns_message_receipts); + xmlWriter->writeAttribute("id", m_receiptId); + xmlWriter->writeEndElement(); + } if (m_receiptRequested) { xmlWriter->writeStartElement("request"); xmlWriter->writeAttribute("xmlns", ns_message_receipts); diff --git a/src/QXmppMessage.h b/src/QXmppMessage.h index 645bd96d..a981f1db 100644 --- a/src/QXmppMessage.h +++ b/src/QXmppMessage.h @@ -71,6 +71,9 @@ public: bool isReceiptRequested() const; void setReceiptRequested(bool requested); + QString receiptId() const; + void setReceiptId(const QString &id); + QDateTime stamp() const; void setStamp(const QDateTime &stamp); @@ -113,6 +116,7 @@ private: QString m_thread; // Request message receipt as per XEP-0184. + QString m_receiptId; bool m_receiptRequested; }; diff --git a/tests/tests.cpp b/tests/tests.cpp index 82dbcd4b..b7582486 100644 --- a/tests/tests.cpp +++ b/tests/tests.cpp @@ -324,6 +324,7 @@ void TestPackets::testMessage() QCOMPARE(message.state(), QXmppMessage::None); QCOMPARE(message.isAttentionRequested(), false); QCOMPARE(message.isReceiptRequested(), false); + QCOMPARE(message.receiptId(), QString()); serializePacket(message, xml); } @@ -342,13 +343,14 @@ void TestPackets::testMessageAttention() QCOMPARE(message.body(), QString()); QCOMPARE(message.isAttentionRequested(), true); QCOMPARE(message.isReceiptRequested(), false); + QCOMPARE(message.receiptId(), QString()); serializePacket(message, xml); } -void TestPackets::testMessageDelivery() +void TestPackets::testMessageReceipt() { const QByteArray xml( - "<message id=\"richard2-4.1.247\" to=\"foo@example.com/QXmpp\" from=\"bar@example.com/QXmpp\" type=\"normal\">" + "<message id=\"richard2-4.1.247\" to=\"kingrichard@royalty.england.lit/throne\" from=\"northumberland@shakespeare.lit/westminster\" type=\"normal\">" "<body>My lord, dispatch; read o'er these articles.</body>" "<request xmlns=\"urn:xmpp:receipts\"/>" "</message>"); @@ -356,13 +358,31 @@ void TestPackets::testMessageDelivery() QXmppMessage message; parsePacket(message, xml); QCOMPARE(message.id(), QString("richard2-4.1.247")); - QCOMPARE(message.to(), QString("foo@example.com/QXmpp")); - QCOMPARE(message.from(), QString("bar@example.com/QXmpp")); + QCOMPARE(message.to(), QString("kingrichard@royalty.england.lit/throne")); + QCOMPARE(message.from(), QString("northumberland@shakespeare.lit/westminster")); QCOMPARE(message.type(), QXmppMessage::Normal); - QCOMPARE(message.body(), QLatin1String("My lord, dispatch; read o'er these articles.")); + QCOMPARE(message.body(), QString("My lord, dispatch; read o'er these articles.")); QCOMPARE(message.isAttentionRequested(), false); QCOMPARE(message.isReceiptRequested(), true); + QCOMPARE(message.receiptId(), QString()); serializePacket(message, xml); + + const QByteArray receiptXml( + "<message id=\"bi29sg183b4v\" to=\"northumberland@shakespeare.lit/westminster\" from=\"kingrichard@royalty.england.lit/throne\" type=\"normal\">" + "<received xmlns=\"urn:xmpp:receipts\" id=\"richard2-4.1.247\"/>" + "</message>"); + + QXmppMessage receipt; + parsePacket(receipt, receiptXml); + QCOMPARE(receipt.id(), QString("bi29sg183b4v")); + QCOMPARE(receipt.to(), QString("northumberland@shakespeare.lit/westminster")); + QCOMPARE(receipt.from(), QString("kingrichard@royalty.england.lit/throne")); + QCOMPARE(receipt.type(), QXmppMessage::Normal); + QCOMPARE(receipt.body(), QString()); + QCOMPARE(receipt.isAttentionRequested(), false); + QCOMPARE(receipt.isReceiptRequested(), false); + QCOMPARE(receipt.receiptId(), QString("richard2-4.1.247")); + serializePacket(receipt, receiptXml); } void TestPackets::testMessageFull() diff --git a/tests/tests.h b/tests/tests.h index fa59c59d..fd62d9b0 100644 --- a/tests/tests.h +++ b/tests/tests.h @@ -52,7 +52,7 @@ private slots: void testMessage(); void testMessageFull(); void testMessageAttention(); - void testMessageDelivery(); + void testMessageReceipt(); void testMessageDelay(); void testMessageLegacyDelay(); void testNonSaslAuth(); |
