aboutsummaryrefslogtreecommitdiff
path: root/src/QXmppClient.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-08-26 11:27:41 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-08-26 11:27:41 +0000
commit30c69f182049d456ce8d37df72a9c4456afab789 (patch)
tree22e3e06a476ff005abf7098a7426e957bbab5aa8 /src/QXmppClient.cpp
parentd4c0573bbd8336576126417ad325bf04f0f5a753 (diff)
downloadqxmpp-30c69f182049d456ce8d37df72a9c4456afab789.tar.gz
remove experimental QXmppClient::elementReceived() in favour of an extension mechanisms
Diffstat (limited to 'src/QXmppClient.cpp')
-rw-r--r--src/QXmppClient.cpp31
1 files changed, 30 insertions, 1 deletions
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<QXmppClientExtension*> 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;