aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-04-20 12:19:13 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2012-04-20 12:19:13 +0000
commit1ab17abe56f166fb1c2fd1d36d2c869fc1e1579d (patch)
tree88eaf4fcb1fa2755ba0f7451c9f509199d4ec91c /src/server
parent54e7705ca9084a413a83275b45a954e191b03f57 (diff)
downloadqxmpp-1ab17abe56f166fb1c2fd1d36d2c869fc1e1579d.tar.gz
remove mod_presence
Diffstat (limited to 'src/server')
-rw-r--r--src/server/QXmppServer.cpp5
-rw-r--r--src/server/mod_presence.cpp274
-rw-r--r--src/server/mod_presence.h61
-rw-r--r--src/server/server.pri4
4 files changed, 0 insertions, 344 deletions
diff --git a/src/server/QXmppServer.cpp b/src/server/QXmppServer.cpp
index f4d99848..529cb910 100644
--- a/src/server/QXmppServer.cpp
+++ b/src/server/QXmppServer.cpp
@@ -41,11 +41,6 @@
#include "QXmppServerPlugin.h"
#include "QXmppUtils.h"
-#include "mod_presence.h"
-
-// Core plugins
-Q_IMPORT_PLUGIN(mod_presence)
-
class QXmppServerPrivate
{
public:
diff --git a/src/server/mod_presence.cpp b/src/server/mod_presence.cpp
deleted file mode 100644
index 41c06379..00000000
--- a/src/server/mod_presence.cpp
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright (C) 2008-2011 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 "QXmppPresence.h"
-#include "QXmppServer.h"
-#include "QXmppServerPlugin.h"
-#include "QXmppStream.h"
-#include "QXmppUtils.h"
-
-#include "mod_presence.h"
-
-class QXmppServerPresencePrivate
-{
-public:
- QXmppServerPresencePrivate(QXmppServerPresence *qq);
-
- QSet<QString> collectSubscribers(const QString &jid);
- QSet<QString> collectSubscriptions(const QString &jid);
-
- QHash<QString, QHash<QString, QXmppPresence> > presences;
- QHash<QString, QSet<QString> > subscribers;
-
-private:
- QXmppServerPresence *q;
-};
-
-QXmppServerPresencePrivate::QXmppServerPresencePrivate(QXmppServerPresence *qq)
- : q(qq)
-{
-}
-
-/// Collect subscribers from the extensions.
-///
-/// \param jid
-
-QSet<QString> QXmppServerPresencePrivate::collectSubscribers(const QString &jid)
-{
- QSet<QString> recipients;
- foreach (QXmppServerExtension *extension, q->server()->extensions())
- recipients += extension->presenceSubscribers(jid);
- return recipients;
-}
-
-/// Collect subscriptions from the extensions.
-///
-/// \param jid
-
-QSet<QString> QXmppServerPresencePrivate::collectSubscriptions(const QString &jid)
-{
- QSet<QString> recipients;
- foreach (QXmppServerExtension *extension, q->server()->extensions())
- recipients += extension->presenceSubscriptions(jid);
- return recipients;
-}
-
-QXmppServerPresence::QXmppServerPresence()
-{
- d = new QXmppServerPresencePrivate(this);
-}
-
-QXmppServerPresence::~QXmppServerPresence()
-{
- delete d;
-}
-
-/// Returns the list of available resources for the given local JID.
-///
-/// \param bareJid
-
-QList<QXmppPresence> QXmppServerPresence::availablePresences(const QString &bareJid) const
-{
- return d->presences.value(bareJid).values();
-}
-
-int QXmppServerPresence::extensionPriority() const
-{
- // FIXME: until we can handle presence errors, we need to
- // keep this extension last.
- return -1000;
-}
-
-bool QXmppServerPresence::handleStanza(const QDomElement &element)
-{
- if (element.tagName() != QLatin1String("presence"))
- return false;
-
- const QString domain = server()->domain();
- const QString from = element.attribute("from");
- const QString type = element.attribute("type");
- const QString to = element.attribute("to");
-
- if (to == domain) {
- // presence to the local domain
-
- // we only want available or unavailable presences from local users
- if ((!type.isEmpty() && type != QLatin1String("unavailable"))
- || (jidToDomain(from) != domain))
- return true;
-
- const QString bareFrom = jidToBareJid(from);
- bool isInitial = false;
-
- if (type.isEmpty()) {
- QXmppPresence presence;
- presence.parse(element);
-
- // record the presence for future use
- isInitial = !d->presences.value(bareFrom).contains(from);
- d->presences[bareFrom][from] = presence;
- } else {
- d->presences[bareFrom].remove(from);
- if (d->presences[bareFrom].isEmpty())
- d->presences.remove(bareFrom);
- }
-
- // broadcast it to subscribers
- foreach (const QString &subscriber, d->collectSubscribers(from)) {
- // avoid loop
- if (subscriber == to)
- continue;
- QDomElement changed = element.cloneNode(true).toElement();
- changed.setAttribute("to", subscriber);
- server()->handleElement(changed);
- }
-
- // get presences from subscriptions
- if (isInitial) {
- foreach (const QString &subscription, d->collectSubscriptions(from)) {
- if (jidToDomain(subscription) != domain) {
- QXmppPresence probe;
- probe.setType(QXmppPresence::Probe);
- probe.setFrom(from);
- probe.setTo(subscription);
- server()->sendPacket(probe);
- } else {
- QXmppPresence push;
- foreach (push, availablePresences(subscription)) {
- push.setTo(from);
- server()->sendPacket(push);
- }
- }
- }
- }
-
- // the presence was for us, stop here
- return true;
- } else {
- // directed presence
- if ((type.isEmpty() || type == QLatin1String("unavailable")) && jidToDomain(from) == domain) {
- // available or unavailable presence from local user
- if (type.isEmpty())
- d->subscribers[from].insert(to);
- else {
- d->subscribers[from].remove(to);
- if (d->subscribers[from].isEmpty())
- d->subscribers.remove(from);
- }
- } else if (type == QLatin1String("error") && jidToDomain(to) == domain) {
- // error presence to a local user
- d->subscribers[to].remove(from);
- if (d->subscribers[to].isEmpty())
- d->subscribers.remove(to);
- }
-
- // the presence was not for us
- return false;
- }
-}
-
-QSet<QString> QXmppServerPresence::presenceSubscribers(const QString &jid)
-{
- return d->subscribers.value(jid);
-}
-
-QXmppServerPresence* QXmppServerPresence::instance(QXmppServer *server)
-{
- foreach (QXmppServerExtension *extension, server->extensions()) {
- QXmppServerPresence *presenceExtension = qobject_cast<QXmppServerPresence*>(extension);
- if (presenceExtension)
- return presenceExtension;
- }
- return 0;
-}
-
-bool QXmppServerPresence::start()
-{
- bool check;
- Q_UNUSED(check);
-
- check = connect(server(), SIGNAL(clientDisconnected(QString)),
- this, SLOT(_q_clientDisconnected(QString)));
- Q_ASSERT(check);
-
- return true;
-}
-
-void QXmppServerPresence::stop()
-{
- disconnect(server(), SIGNAL(clientDisconnected(QString)),
- this, SLOT(_q_clientDisconnected(QString)));
-}
-
-void QXmppServerPresence::_q_clientDisconnected(const QString &jid)
-{
- Q_ASSERT(!jid.isEmpty());
-
- // check the user exited cleanly
- const bool hadPresence = d->presences.value(jidToBareJid(jid)).contains(jid);
- if (hadPresence) {
- // the client had sent an initial available presence but did
- // not sent an unavailable presence, synthesize it
- QDomDocument doc;
- QDomElement presence = doc.createElement("presence");
- presence.setAttribute("from", jid);
- presence.setAttribute("type", "unavailable");
- presence.setAttribute("to", server()->domain());
- server()->handleElement(presence);
- } else {
- // synthesize unavailable presence to directed presence receivers
- foreach (const QString &recipient, presenceSubscribers(jid)) {
- QDomDocument doc;
- QDomElement presence = doc.createElement("presence");
- presence.setAttribute("from", jid);
- presence.setAttribute("type", "unavailable");
- presence.setAttribute("to", recipient);
- server()->handleElement(presence);
- }
- }
-}
-
-// PLUGIN
-
-class QXmppServerPresencePlugin : public QXmppServerPlugin
-{
-public:
- QXmppServerExtension *create(const QString &key)
- {
- if (key == QLatin1String("presence"))
- return new QXmppServerPresence;
- else
- return 0;
- };
-
- QStringList keys() const
- {
- return QStringList() << QLatin1String("presence");
- };
-};
-
-Q_EXPORT_STATIC_PLUGIN2(mod_presence, QXmppServerPresencePlugin)
-
diff --git a/src/server/mod_presence.h b/src/server/mod_presence.h
deleted file mode 100644
index 6e80a136..00000000
--- a/src/server/mod_presence.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2008-2011 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_PRESENCE_H
-#define QXMPP_SERVER_PRESENCE_H
-
-#include "QXmppServerExtension.h"
-
-class QXmppPresence;
-class QXmppServerPresencePrivate;
-
-/// \brief QXmppServer extension for presence handling.
-///
-
-class QXMPP_EXPORT QXmppServerPresence : public QXmppServerExtension
-{
- Q_OBJECT
- Q_CLASSINFO("ExtensionName", "presence");
-
-public:
- QXmppServerPresence();
- ~QXmppServerPresence();
-
- QList<QXmppPresence> availablePresences(const QString &bareJid) const;
- int extensionPriority() const;
- bool handleStanza(const QDomElement &element);
- QSet<QString> presenceSubscribers(const QString &jid);
- bool start();
- void stop();
-
- static QXmppServerPresence* instance(QXmppServer *server);
-
-private slots:
- void _q_clientDisconnected(const QString &jid);
-
-private:
- friend class QXmppServerPresencePrivate;
- QXmppServerPresencePrivate *d;
-};
-
-#endif
diff --git a/src/server/server.pri b/src/server/server.pri
index 604cb5c4..718119a8 100644
--- a/src/server/server.pri
+++ b/src/server/server.pri
@@ -1,6 +1,5 @@
# Headers
INSTALL_HEADERS += \
- server/mod_presence.h \
server/QXmppDialback.h \
server/QXmppIncomingClient.h \
server/QXmppIncomingServer.h \
@@ -19,6 +18,3 @@ SOURCES += \
server/QXmppPasswordChecker.cpp \
server/QXmppServer.cpp \
server/QXmppServerExtension.cpp
-
-# Plugins
-SOURCES += server/mod_presence.cpp