aboutsummaryrefslogtreecommitdiff
path: root/src/server/mod_ping.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-08-27 15:26:59 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-08-27 15:26:59 +0000
commit60756b31285d65add73efaad39a44617ecce76db (patch)
treeb1c1ac034c65c944307695951b8713a55d2198ec /src/server/mod_ping.cpp
parent9235370c59f46e5e73936f9ccd907ee51603e70b (diff)
downloadqxmpp-60756b31285d65add73efaad39a44617ecce76db.tar.gz
add plugins for:
- ping - service discovery
Diffstat (limited to 'src/server/mod_ping.cpp')
-rw-r--r--src/server/mod_ping.cpp87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/server/mod_ping.cpp b/src/server/mod_ping.cpp
new file mode 100644
index 00000000..fcc4d259
--- /dev/null
+++ b/src/server/mod_ping.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 <QDomElement>
+
+#include "QXmppConstants.h"
+#include "QXmppPingIq.h"
+#include "QXmppServer.h"
+#include "QXmppServerPlugin.h"
+#include "QXmppStream.h"
+
+#include "mod_ping.h"
+
+QStringList QXmppServerPing::discoveryFeatures() const
+{
+ return QStringList() << ns_ping;
+}
+
+bool QXmppServerPing::handleStanza(QXmppStream *stream, const QDomElement &element)
+{
+ if (element.attribute("to") != m_jid)
+ return false;
+
+ // XEP-0199: XMPP Ping
+ if (element.tagName() == "iq" && QXmppPingIq::isPingIq(element))
+ {
+ QXmppPingIq request;
+ request.parse(element);
+
+ QXmppIq response(QXmppIq::Result);
+ response.setId(request.id());
+ response.setFrom(request.to());
+ response.setTo(request.from());
+ stream->sendPacket(response);
+ return true;
+ }
+
+ return false;
+}
+
+bool QXmppServerPing::start(QXmppServer *server)
+{
+ m_jid = server->domain();
+ return true;
+}
+
+// PLUGIN
+
+class QXmppServerPingPlugin : public QXmppServerPlugin
+{
+public:
+ QXmppServerExtension *create(const QString &key)
+ {
+ if (key == QLatin1String("ping"))
+ return new QXmppServerPing;
+ else
+ return 0;
+ };
+
+ QStringList keys() const
+ {
+ return QStringList() << QLatin1String("ping");
+ };
+};
+
+Q_EXPORT_STATIC_PLUGIN2(mod_ping, QXmppServerPingPlugin)
+