aboutsummaryrefslogtreecommitdiff
path: root/source/QXmppMessage.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-06-29 10:14:10 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-06-29 10:14:10 +0000
commit91ab7f10a2b8139926c09c25921511f93e2af51d (patch)
treef340cd1eccea4dab5291db22a3eaa47311c024d4 /source/QXmppMessage.cpp
parent1e18c93ea2571a05380e6458204bbef10f2a5a5c (diff)
downloadqxmpp-91ab7f10a2b8139926c09c25921511f93e2af51d.tar.gz
add support for XEP-0203: Delayed Delivery
Diffstat (limited to 'source/QXmppMessage.cpp')
-rw-r--r--source/QXmppMessage.cpp39
1 files changed, 32 insertions, 7 deletions
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