aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-09-20 14:49:07 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-09-20 14:49:07 +0000
commit020139fb910b56150ab63bb8b8327f210401da81 (patch)
tree3660d69ddbb160acbdbe05d5d7de6dbd2de248af /src
parent1754f0061451107f63082e3b57b639dae260e1e9 (diff)
downloadqxmpp-020139fb910b56150ab63bb8b8327f210401da81.tar.gz
make QXmppRosterManager a QXmppClientExtension
Diffstat (limited to 'src')
-rw-r--r--src/QXmppClient.cpp3
-rw-r--r--src/QXmppOutgoingClient.cpp7
-rw-r--r--src/QXmppOutgoingClient.h2
-rw-r--r--src/QXmppRosterManager.cpp50
-rw-r--r--src/QXmppRosterManager.h13
5 files changed, 40 insertions, 35 deletions
diff --git a/src/QXmppClient.cpp b/src/QXmppClient.cpp
index ab845a08..7ee748d4 100644
--- a/src/QXmppClient.cpp
+++ b/src/QXmppClient.cpp
@@ -195,7 +195,8 @@ QXmppClient::QXmppClient(QObject *parent)
// create managers
// TODO move manager references to d->extensions
- d->rosterManager = new QXmppRosterManager(d->stream, this);
+ d->rosterManager = new QXmppRosterManager(this);
+ addExtension(d->rosterManager);
d->archiveManager = new QXmppArchiveManager;
addExtension(d->archiveManager);
diff --git a/src/QXmppOutgoingClient.cpp b/src/QXmppOutgoingClient.cpp
index b4ea2f2a..b3336e36 100644
--- a/src/QXmppOutgoingClient.cpp
+++ b/src/QXmppOutgoingClient.cpp
@@ -42,7 +42,6 @@
#include "QXmppBindIq.h"
#include "QXmppPingIq.h"
#include "QXmppRpcIq.h"
-#include "QXmppRosterIq.h"
#include "QXmppSessionIq.h"
#include <QBuffer>
@@ -444,12 +443,6 @@ void QXmppOutgoingClient::handleStanza(const QDomElement &nodeRecv)
}
}
}
- else if(QXmppRosterIq::isRosterIq(nodeRecv))
- {
- QXmppRosterIq rosterIq;
- rosterIq.parse(nodeRecv);
- emit rosterIqReceived(rosterIq);
- }
// extensions
// XEP-0009: Jabber-RPC
diff --git a/src/QXmppOutgoingClient.h b/src/QXmppOutgoingClient.h
index 831882ea..c87c5b14 100644
--- a/src/QXmppOutgoingClient.h
+++ b/src/QXmppOutgoingClient.h
@@ -36,7 +36,6 @@ class QSslError;
class QXmppConfiguration;
class QXmppPresence;
class QXmppIq;
-class QXmppRosterIq;
class QXmppMessage;
class QXmppRpcResponseIq;
class QXmppRpcErrorIq;
@@ -73,7 +72,6 @@ signals:
void presenceReceived(const QXmppPresence&);
void messageReceived(const QXmppMessage&);
void iqReceived(const QXmppIq&);
- void rosterIqReceived(const QXmppRosterIq&);
// XEP-0009: Jabber-RPC
void rpcCallInvoke(const QXmppRpcInvokeIq &invoke);
diff --git a/src/QXmppRosterManager.cpp b/src/QXmppRosterManager.cpp
index fadfaccd..4ca9f011 100644
--- a/src/QXmppRosterManager.cpp
+++ b/src/QXmppRosterManager.cpp
@@ -22,33 +22,28 @@
*
*/
+#include <QDomElement>
+#include "QXmppClient.h"
+#include "QXmppPresence.h"
+#include "QXmppRosterIq.h"
#include "QXmppRosterManager.h"
#include "QXmppUtils.h"
-#include "QXmppRosterIq.h"
-#include "QXmppPresence.h"
-#include "QXmppOutgoingClient.h"
-QXmppRosterManager::QXmppRosterManager(QXmppOutgoingClient* stream, QObject *parent)
- : QObject(parent),
- m_stream(stream),
- m_isRosterReceived(false)
+QXmppRosterManager::QXmppRosterManager(QXmppClient* client)
+ : m_isRosterReceived(false)
{
- bool check = QObject::connect(m_stream, SIGNAL(connected()),
+ bool check = QObject::connect(client, SIGNAL(connected()),
this, SLOT(connected()));
Q_ASSERT(check);
- check = QObject::connect(m_stream, SIGNAL(disconnected()),
+ check = QObject::connect(client, SIGNAL(disconnected()),
this, SLOT(disconnected()));
Q_ASSERT(check);
- check = QObject::connect(m_stream, SIGNAL(presenceReceived(const QXmppPresence&)),
+ check = QObject::connect(client, SIGNAL(presenceReceived(const QXmppPresence&)),
this, SLOT(presenceReceived(const QXmppPresence&)));
Q_ASSERT(check);
-
- check = QObject::connect(m_stream, SIGNAL(rosterIqReceived(const QXmppRosterIq&)),
- this, SLOT(rosterIqReceived(const QXmppRosterIq&)));
- Q_ASSERT(check);
}
QXmppRosterManager::~QXmppRosterManager()
@@ -62,9 +57,9 @@ void QXmppRosterManager::connected()
{
QXmppRosterIq roster;
roster.setType(QXmppIq::Get);
- roster.setFrom(m_stream->configuration().jid());
+ roster.setFrom(client()->configuration().jid());
m_rosterReqId = roster.id();
- m_stream->sendPacket(roster);
+ client()->sendPacket(roster);
}
void QXmppRosterManager::disconnected()
@@ -74,6 +69,21 @@ void QXmppRosterManager::disconnected()
m_isRosterReceived = false;
}
+bool QXmppRosterManager::handleStanza(QXmppStream *stream, const QDomElement &element)
+{
+ Q_UNUSED(stream);
+
+ if(element.tagName() == "iq" && QXmppRosterIq::isRosterIq(element))
+ {
+ QXmppRosterIq rosterIq;
+ rosterIq.parse(element);
+ rosterIqReceived(rosterIq);
+ return true;
+ }
+
+ return false;
+}
+
void QXmppRosterManager::presenceReceived(const QXmppPresence& presence)
{
QString jid = presence.from();
@@ -94,12 +104,12 @@ void QXmppRosterManager::presenceReceived(const QXmppPresence& presence)
emit presenceChanged(bareJid, resource);
break;
case QXmppPresence::Subscribe:
- if (m_stream->configuration().autoAcceptSubscriptions())
+ if (client()->configuration().autoAcceptSubscriptions())
{
QXmppPresence presence;
presence.setTo(jid);
presence.setType(QXmppPresence::Subscribed);
- m_stream->sendPacket(presence);
+ client()->sendPacket(presence);
}
break;
default:
@@ -118,7 +128,7 @@ void QXmppRosterManager::rosterIqReceived(const QXmppRosterIq& rosterIq)
// send result iq
QXmppIq returnIq(QXmppIq::Result);
returnIq.setId(rosterIq.id());
- m_stream->sendPacket(returnIq);
+ client()->sendPacket(returnIq);
// store updated entries and notify changes
const QList<QXmppRosterIq::Item> items = rosterIq.items();
@@ -141,7 +151,7 @@ void QXmppRosterManager::rosterIqReceived(const QXmppRosterIq& rosterIq)
QXmppPresence presence;
presence.setTo(item.bareJid());
presence.setType(QXmppPresence::Subscribe);
- m_stream->sendPacket(presence);
+ client()->sendPacket(presence);
}
}
break;
diff --git a/src/QXmppRosterManager.h b/src/QXmppRosterManager.h
index 03dea22c..6ceca453 100644
--- a/src/QXmppRosterManager.h
+++ b/src/QXmppRosterManager.h
@@ -30,11 +30,11 @@
#include <QSet>
#include <QStringList>
+#include "QXmppClientExtension.h"
#include "QXmppRosterIq.h"
class QXmppRosterIq;
class QXmppPresence;
-class QXmppOutgoingClient;
/// \brief The QXmppRosterManager class provides access to a connected client's roster.
///
@@ -60,7 +60,7 @@ class QXmppOutgoingClient;
///
/// \ingroup Managers
-class QXmppRosterManager : public QObject
+class QXmppRosterManager : public QXmppClientExtension
{
Q_OBJECT
@@ -68,7 +68,7 @@ public:
// FIXME : is this class really necessary?
typedef QXmppRosterIq::Item QXmppRosterEntry;
- QXmppRosterManager(QXmppOutgoingClient* stream, QObject *parent = 0);
+ QXmppRosterManager(QXmppClient* stream);
~QXmppRosterManager();
bool isRosterReceived();
@@ -81,6 +81,9 @@ public:
QXmppPresence getPresence(const QString& bareJid,
const QString& resource) const;
+ /// \cond
+ bool handleStanza(QXmppStream *stream, const QDomElement &element);
+ /// \endcond
// deprecated in release 0.2.0
/// \cond
@@ -102,8 +105,6 @@ signals:
void rosterChanged(const QString& bareJid);
private:
- //reverse pointer to stream
- QXmppOutgoingClient* m_stream;
//map of bareJid and its rosterEntry
QMap<QString, QXmppRosterIq::Item> m_entries;
// map of resources of the jid and map of resources and presences
@@ -117,6 +118,8 @@ private slots:
void connected();
void disconnected();
void presenceReceived(const QXmppPresence&);
+
+private:
void rosterIqReceived(const QXmppRosterIq&);
};