aboutsummaryrefslogtreecommitdiff
path: root/src/server/mod_version.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-08-28 13:29:57 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-08-28 13:29:57 +0000
commit6972d59c54cd90a592ab7db51f5ba87940253bff (patch)
tree79254af2ee4c546461f2dca9522bedc59add9f9e /src/server/mod_version.cpp
parent2de9fa8c747bb481fd48c35c6b2a116e84d6929c (diff)
downloadqxmpp-6972d59c54cd90a592ab7db51f5ba87940253bff.tar.gz
add a server module to handle XEP-0092: Software Version
Diffstat (limited to 'src/server/mod_version.cpp')
-rw-r--r--src/server/mod_version.cpp87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/server/mod_version.cpp b/src/server/mod_version.cpp
new file mode 100644
index 00000000..71ed6e1e
--- /dev/null
+++ b/src/server/mod_version.cpp
@@ -0,0 +1,87 @@
+/*
+ * 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 "QXmppVersionIq.h"
+#include "QXmppServer.h"
+#include "QXmppServerPlugin.h"
+#include "QXmppStream.h"
+
+#include "mod_version.h"
+
+QStringList QXmppServerVersion::discoveryFeatures() const
+{
+ return QStringList() << ns_version;
+}
+
+bool QXmppServerVersion::handleStanza(QXmppStream *stream, const QDomElement &element)
+{
+ if (element.attribute("to") != server()->domain())
+ return false;
+
+ // XEP-0092: Software Version
+ if(QXmppVersionIq::isVersionIq(element))
+ {
+ QXmppVersionIq versionIq;
+ versionIq.parse(element);
+
+ if (versionIq.type() == QXmppIq::Get)
+ {
+ QXmppVersionIq responseIq;
+ responseIq.setType(QXmppIq::Result);
+ responseIq.setId(versionIq.id());
+ responseIq.setTo(versionIq.from());
+ responseIq.setName(qApp->applicationName());
+ responseIq.setVersion(qApp->applicationVersion());
+ stream->sendPacket(responseIq);
+ }
+ return true;
+ }
+
+ return false;
+}
+
+// PLUGIN
+
+class QXmppServerVersionPlugin : public QXmppServerPlugin
+{
+public:
+ QXmppServerExtension *create(const QString &key)
+ {
+ if (key == QLatin1String("version"))
+ return new QXmppServerVersion;
+ else
+ return 0;
+ };
+
+ QStringList keys() const
+ {
+ return QStringList() << QLatin1String("version");
+ };
+};
+
+Q_EXPORT_STATIC_PLUGIN2(mod_version, QXmppServerVersionPlugin)
+