diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-06-29 10:14:10 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-06-29 10:14:10 +0000 |
| commit | 91ab7f10a2b8139926c09c25921511f93e2af51d (patch) | |
| tree | f340cd1eccea4dab5291db22a3eaa47311c024d4 /source | |
| parent | 1e18c93ea2571a05380e6458204bbef10f2a5a5c (diff) | |
| download | qxmpp-91ab7f10a2b8139926c09c25921511f93e2af51d.tar.gz | |
add support for XEP-0203: Delayed Delivery
Diffstat (limited to 'source')
| -rw-r--r-- | source/QXmppConstants.cpp | 3 | ||||
| -rw-r--r-- | source/QXmppConstants.h | 3 | ||||
| -rw-r--r-- | source/QXmppMessage.cpp | 39 | ||||
| -rw-r--r-- | source/QXmppMessage.h | 8 |
4 files changed, 44 insertions, 9 deletions
diff --git a/source/QXmppConstants.cpp b/source/QXmppConstants.cpp index 2edf17f3..133c27dd 100644 --- a/source/QXmppConstants.cpp +++ b/source/QXmppConstants.cpp @@ -41,7 +41,8 @@ const char* ns_ibb = "http://jabber.org/protocol/ibb"; const char* ns_rpc = "jabber:iq:rpc"; const char *ns_ping = "urn:xmpp:ping"; const char *ns_conference = "jabber:x:conference"; -const char *ns_delay = "jabber:x:delay"; +const char *ns_delayed_delivery = "urn:xmpp:delay"; +const char *ns_legacy_delayed_delivery = "jabber:x:delay"; const char *ns_muc = "http://jabber.org/protocol/muc"; const char *ns_muc_admin = "http://jabber.org/protocol/muc#admin"; const char *ns_muc_owner = "http://jabber.org/protocol/muc#owner"; diff --git a/source/QXmppConstants.h b/source/QXmppConstants.h index 82860676..159717f7 100644 --- a/source/QXmppConstants.h +++ b/source/QXmppConstants.h @@ -42,7 +42,8 @@ extern const char* ns_ibb; extern const char* ns_rpc; extern const char* ns_ping; extern const char *ns_conference; -extern const char *ns_delay; +extern const char *ns_delayed_delivery; +extern const char *ns_legacy_delayed_delivery; extern const char *ns_muc; extern const char *ns_muc_admin; extern const char *ns_muc_owner; diff --git a/source/QXmppMessage.cpp b/source/QXmppMessage.cpp index 6f30ede9..97f4d402 100644 --- a/source/QXmppMessage.cpp +++ b/source/QXmppMessage.cpp @@ -40,7 +40,12 @@ static const char* chat_states[] = { QXmppMessage::QXmppMessage(const QString& from, const QString& to, const QString& body, const QString& thread) - : QXmppStanza(from, to), m_type(Chat), m_state(None), m_body(body), m_thread(thread) + : QXmppStanza(from, to), + m_type(Chat), + m_stampType(QXmppMessage::DelayedDelivery), + m_state(None), + m_body(body), + m_thread(thread) { } @@ -171,16 +176,26 @@ void QXmppMessage::parse(const QDomElement &element) } } + // XEP-0203: Delayed Delivery + QDomElement delayElement = element.firstChildElement("delay"); + if (!delayElement.isNull() && delayElement.namespaceURI() == ns_delayed_delivery) + { + const QString str = delayElement.attribute("stamp"); + m_stamp = datetimeFromString(str); + m_stampType = QXmppMessage::DelayedDelivery; + } + QXmppElementList extensions; QDomElement xElement = element.firstChildElement("x"); while (!xElement.isNull()) { - if (xElement.namespaceURI() == ns_delay) + if (xElement.namespaceURI() == ns_legacy_delayed_delivery) { // XEP-0091: Legacy Delayed Delivery const QString str = xElement.attribute("stamp"); m_stamp = QDateTime::fromString(str, "yyyyMMddThh:mm:ss"); m_stamp.setTimeSpec(Qt::UTC); + m_stampType = QXmppMessage::LegacyDelayedDelivery; } else { // other extensions extensions << QXmppElement(xElement); @@ -215,14 +230,24 @@ void QXmppMessage::toXml(QXmlStreamWriter *xmlWriter) const xmlWriter->writeEndElement(); } - // XEP-0091: Legacy Delayed Delivery + // time stamp if (m_stamp.isValid()) { QDateTime utcStamp = m_stamp.toUTC(); - xmlWriter->writeStartElement("x"); - helperToXmlAddAttribute(xmlWriter, "xmlns", ns_delay); - helperToXmlAddAttribute(xmlWriter, "stamp", utcStamp.toString("yyyyMMddThh:mm:ss")); - xmlWriter->writeEndElement(); + if (m_stampType == QXmppMessage::DelayedDelivery) + { + // XEP-0203: Delayed Delivery + xmlWriter->writeStartElement("delay"); + helperToXmlAddAttribute(xmlWriter, "xmlns", ns_delayed_delivery); + helperToXmlAddAttribute(xmlWriter, "stamp", datetimeToString(utcStamp)); + xmlWriter->writeEndElement(); + } else { + // XEP-0091: Legacy Delayed Delivery + xmlWriter->writeStartElement("x"); + helperToXmlAddAttribute(xmlWriter, "xmlns", ns_legacy_delayed_delivery); + helperToXmlAddAttribute(xmlWriter, "stamp", utcStamp.toString("yyyyMMddThh:mm:ss")); + xmlWriter->writeEndElement(); + } } // other extensions diff --git a/source/QXmppMessage.h b/source/QXmppMessage.h index 15ea3c02..08751821 100644 --- a/source/QXmppMessage.h +++ b/source/QXmppMessage.h @@ -52,6 +52,13 @@ public: Paused, }; + /// Type of the message timestamp. + enum StampType + { + LegacyDelayedDelivery, ///< XEP-0091: Legacy Delayed Delivery + DelayedDelivery, ///< XEP-0203: Delayed Delivery + }; + QXmppMessage(const QString& from = "", const QString& to = "", const QString& body = "", const QString& thread = ""); ~QXmppMessage(); @@ -90,6 +97,7 @@ private: Type m_type; QDateTime m_stamp; + StampType m_stampType; State m_state; QString m_body; |
