diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-09-20 14:49:07 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-09-20 14:49:07 +0000 |
| commit | 020139fb910b56150ab63bb8b8327f210401da81 (patch) | |
| tree | 3660d69ddbb160acbdbe05d5d7de6dbd2de248af /src | |
| parent | 1754f0061451107f63082e3b57b639dae260e1e9 (diff) | |
| download | qxmpp-020139fb910b56150ab63bb8b8327f210401da81.tar.gz | |
make QXmppRosterManager a QXmppClientExtension
Diffstat (limited to 'src')
| -rw-r--r-- | src/QXmppClient.cpp | 3 | ||||
| -rw-r--r-- | src/QXmppOutgoingClient.cpp | 7 | ||||
| -rw-r--r-- | src/QXmppOutgoingClient.h | 2 | ||||
| -rw-r--r-- | src/QXmppRosterManager.cpp | 50 | ||||
| -rw-r--r-- | src/QXmppRosterManager.h | 13 |
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&); }; |
