From 30c69f182049d456ce8d37df72a9c4456afab789 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Thu, 26 Aug 2010 11:27:41 +0000 Subject: remove experimental QXmppClient::elementReceived() in favour of an extension mechanisms --- src/QXmppClient.cpp | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'src/QXmppClient.cpp') diff --git a/src/QXmppClient.cpp b/src/QXmppClient.cpp index 9732b959..d15e16e0 100644 --- a/src/QXmppClient.cpp +++ b/src/QXmppClient.cpp @@ -44,6 +44,7 @@ class QXmppClientPrivate public: QXmppClientPrivate(); + QList extensions; QXmppOutgoingClient* stream; ///< Pointer to QXmppOutgoingClient object a wrapper over ///< TCP socket and XMPP protocol QXmppPresence clientPresence; ///< Stores the current presence of the connected client @@ -115,7 +116,7 @@ QXmppClient::QXmppClient(QObject *parent) d->clientPresence.setExtensions(d->stream->presenceExtensions()); bool check = connect(d->stream, SIGNAL(elementReceived(const QDomElement&, bool&)), - this, SIGNAL(elementReceived(const QDomElement&, bool&))); + this, SLOT(slotElementReceived(const QDomElement&, bool&))); Q_ASSERT(check); check = connect(d->stream, SIGNAL(messageReceived(const QXmppMessage&)), @@ -177,9 +178,20 @@ QXmppClient::QXmppClient(QObject *parent) QXmppClient::~QXmppClient() { + foreach (QXmppClientExtension *extension, d->extensions) + delete d; delete d; } +/// Registers a new extension with the client. +/// +/// \param extension + +void QXmppClient::addExtension(QXmppClientExtension *extension) +{ + d->extensions << extension; +} + /// Returns a modifiable reference to the current configuration of QXmppClient. /// \return Reference to the QXmppClient's configuration for the connection. @@ -464,6 +476,23 @@ QXmppVCardManager& QXmppClient::vCardManager() return *d->vCardManager; } +/// Give extensions a chance to handle incoming stanzas. +/// +/// \param element +/// \param handled + +void QXmppClient::slotElementReceived(const QDomElement &element, bool &handled) +{ + foreach (QXmppClientExtension *extension, d->extensions) + { + if (extension->handleStanza(d->stream, element)) + { + handled = true; + return; + } + } +} + void QXmppClient::addInvokableInterface( QXmppInvokable *interface ) { d->interfaces[ interface->metaObject()->className() ] = interface; -- cgit v1.2.3