aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-11-08 09:57:56 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-11-08 09:57:56 +0000
commit8a1e6899ea9c5d0b627ba625f101b5c586c182dd (patch)
treeef5bc5af4149628abe375efad82cb580ca7ea463 /src
parent5246260544b23e4507ad99a8e8f115ff500e44ce (diff)
downloadqxmpp-8a1e6899ea9c5d0b627ba625f101b5c586c182dd.tar.gz
add server-side support for XEP-0202: Entity Time
Diffstat (limited to 'src')
-rw-r--r--src/QXmppServer.cpp1
-rw-r--r--src/server/mod_time.cpp95
-rw-r--r--src/server/mod_time.h42
-rw-r--r--src/src.pro2
4 files changed, 140 insertions, 0 deletions
diff --git a/src/QXmppServer.cpp b/src/QXmppServer.cpp
index c035e317..212edd2d 100644
--- a/src/QXmppServer.cpp
+++ b/src/QXmppServer.cpp
@@ -43,6 +43,7 @@ Q_IMPORT_PLUGIN(mod_disco)
Q_IMPORT_PLUGIN(mod_ping)
Q_IMPORT_PLUGIN(mod_proxy65)
Q_IMPORT_PLUGIN(mod_stats)
+Q_IMPORT_PLUGIN(mod_time)
Q_IMPORT_PLUGIN(mod_version)
class QXmppServerPrivate
diff --git a/src/server/mod_time.cpp b/src/server/mod_time.cpp
new file mode 100644
index 00000000..defec874
--- /dev/null
+++ b/src/server/mod_time.cpp
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2008-2010 The QXmpp developers
+ *
+ * Author:
+ * Jeremy Lainé
+ *
+ * Source:
+ * http://code.google.com/p/qxmpp
+ *
+ * This file is a part of QXmpp library.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ */
+
+#include <QCoreApplication>
+#include <QDomElement>
+
+#include "QXmppConstants.h"
+#include "QXmppEntityTimeIq.h"
+#include "QXmppServer.h"
+#include "QXmppServerPlugin.h"
+#include "QXmppStream.h"
+
+#include "mod_time.h"
+
+QStringList QXmppServerTime::discoveryFeatures() const
+{
+ return QStringList() << ns_entity_time;
+}
+
+bool QXmppServerTime::handleStanza(QXmppStream *stream, const QDomElement &element)
+{
+ Q_UNUSED(stream);
+
+ if (element.attribute("to") != server()->domain())
+ return false;
+
+ // XEP-0202: Entity Time
+ if(QXmppEntityTimeIq::isEntityTimeIq(element))
+ {
+ QXmppEntityTimeIq timeIq;
+ timeIq.parse(element);
+
+ if (timeIq.type() == QXmppIq::Get)
+ {
+ QXmppEntityTimeIq responseIq;
+ responseIq.setType(QXmppIq::Result);
+ responseIq.setId(timeIq.id());
+ responseIq.setTo(timeIq.from());
+
+ QDateTime currentTime = QDateTime::currentDateTime();
+ QDateTime utc = currentTime.toUTC();
+ responseIq.setUtc(utc);
+
+ currentTime.setTimeSpec(Qt::UTC);
+ responseIq.setTzo(utc.secsTo(currentTime));
+
+ server()->sendPacket(responseIq);
+ }
+ return true;
+ }
+
+ return false;
+}
+
+// PLUGIN
+
+class QXmppServerTimePlugin : public QXmppServerPlugin
+{
+public:
+ QXmppServerExtension *create(const QString &key)
+ {
+ if (key == QLatin1String("time"))
+ return new QXmppServerTime;
+ else
+ return 0;
+ };
+
+ QStringList keys() const
+ {
+ return QStringList() << QLatin1String("time");
+ };
+};
+
+Q_EXPORT_STATIC_PLUGIN2(mod_time, QXmppServerTimePlugin)
+
diff --git a/src/server/mod_time.h b/src/server/mod_time.h
new file mode 100644
index 00000000..26192aad
--- /dev/null
+++ b/src/server/mod_time.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2008-2010 The QXmpp developers
+ *
+ * Author:
+ * Jeremy Lainé
+ *
+ * Source:
+ * http://code.google.com/p/qxmpp
+ *
+ * This file is a part of QXmpp library.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ */
+
+#ifndef QXMPP_SERVER_TIME_H
+#define QXMPP_SERVER_TIME_H
+
+#include "QXmppServerExtension.h"
+
+/// \brief QXmppServer extension for XEP-0202: Entity Time.
+///
+
+class QXmppServerTime : public QXmppServerExtension
+{
+ Q_OBJECT
+ Q_CLASSINFO("ExtensionName", "time");
+
+public:
+ QStringList discoveryFeatures() const;
+ bool handleStanza(QXmppStream *stream, const QDomElement &element);
+};
+
+#endif
diff --git a/src/src.pro b/src/src.pro
index 7fc88239..f0183967 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -149,12 +149,14 @@ HEADERS += \
server/mod_ping.h \
server/mod_proxy65.h \
server/mod_stats.h \
+ server/mod_time.h \
server/mod_version.h
SOURCES += \
server/mod_disco.cpp \
server/mod_ping.cpp \
server/mod_proxy65.cpp \
server/mod_stats.cpp \
+ server/mod_time.cpp \
server/mod_version.cpp
# pkg-config support