aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-09-10 09:53:25 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-09-10 09:53:25 +0000
commit134781f6cfa3b75ebd91b7028e0e9de709d86702 (patch)
treee88f9e63e645029093ba5d6c65ab96a8a59f6c3a /src
parent966067c17e939bb4b03fee41ecaa468a3f836c4e (diff)
downloadqxmpp-134781f6cfa3b75ebd91b7028e0e9de709d86702.tar.gz
refactor QXmppVersionManager as a client extension
Diffstat (limited to 'src')
-rw-r--r--src/QXmppClient.cpp4
-rw-r--r--src/QXmppOutgoingClient.cpp8
-rw-r--r--src/QXmppOutgoingClient.h4
-rw-r--r--src/QXmppVersionManager.cpp64
-rw-r--r--src/QXmppVersionManager.h16
5 files changed, 41 insertions, 55 deletions
diff --git a/src/QXmppClient.cpp b/src/QXmppClient.cpp
index 6266cebc..d3bf7e55 100644
--- a/src/QXmppClient.cpp
+++ b/src/QXmppClient.cpp
@@ -175,7 +175,9 @@ QXmppClient::QXmppClient(QObject *parent)
d->mucManager = new QXmppMucManager(d->stream, this);
d->transferManager = new QXmppTransferManager(d->stream, this);
d->vCardManager = new QXmppVCardManager(d->stream, this);
- d->versionManager = new QXmppVersionManager(d->stream, this);
+
+ d->versionManager = new QXmppVersionManager;
+ addExtension(d->versionManager);
}
/// Destructor, destroys the QXmppClient object.
diff --git a/src/QXmppOutgoingClient.cpp b/src/QXmppOutgoingClient.cpp
index f52f4309..f4ec1bc1 100644
--- a/src/QXmppOutgoingClient.cpp
+++ b/src/QXmppOutgoingClient.cpp
@@ -52,7 +52,6 @@
#include "QXmppSessionIq.h"
#include "QXmppStreamInitiationIq.h"
#include "QXmppVCardIq.h"
-#include "QXmppVersionIq.h"
#include <QBuffer>
#include <QCoreApplication>
@@ -586,13 +585,6 @@ void QXmppOutgoingClient::handleStanza(const QDomElement &nodeRecv)
sendNonSASLAuth(plainText);
}
}
- // XEP-0092: Software Version
- else if(QXmppVersionIq::isVersionIq(nodeRecv))
- {
- QXmppVersionIq versionIq;
- versionIq.parse(nodeRecv);
- emit versionIqReceived(versionIq);
- }
// XEP-0095: Stream Initiation
else if(QXmppStreamInitiationIq::isStreamInitiationIq(nodeRecv))
{
diff --git a/src/QXmppOutgoingClient.h b/src/QXmppOutgoingClient.h
index 4efca3c2..3aafdd44 100644
--- a/src/QXmppOutgoingClient.h
+++ b/src/QXmppOutgoingClient.h
@@ -56,7 +56,6 @@ class QXmppJingleIq;
class QXmppMucAdminIq;
class QXmppMucOwnerIq;
class QXmppStreamInitiationIq;
-class QXmppVersionIq;
class QXmppOutgoingClientPrivate;
@@ -126,9 +125,6 @@ signals:
// XEP-0166: Jingle
void jingleIqReceived(const QXmppJingleIq&);
- // XEP-0092: Software Version
- void versionIqReceived(const QXmppVersionIq&);
-
protected:
/// \cond
// Overridable methods
diff --git a/src/QXmppVersionManager.cpp b/src/QXmppVersionManager.cpp
index 4ee5c687..46db6cea 100644
--- a/src/QXmppVersionManager.cpp
+++ b/src/QXmppVersionManager.cpp
@@ -21,56 +21,56 @@
*
*/
+#include <QCoreApplication>
+#include <QDomElement>
+
#include "QXmppVersionManager.h"
#include "QXmppOutgoingClient.h"
#include "QXmppVersionIq.h"
#include "QXmppGlobal.h"
-#include <QCoreApplication>
-
-QXmppVersionManager::QXmppVersionManager(QXmppOutgoingClient* stream, QObject *parent)
- : QObject(parent),
- m_stream(stream)
+bool QXmppVersionManager::handleStanza(QXmppStream *stream, const QDomElement &element)
{
- bool check = QObject::connect(m_stream, SIGNAL(versionIqReceived(const QXmppVersionIq&)),
- this, SLOT(versionIqReceived(const QXmppVersionIq&)));
- Q_ASSERT(check);
- Q_UNUSED(check);
-}
-
-void QXmppVersionManager::versionIqReceived(const QXmppVersionIq& versionIq)
-{
- if(versionIq.type() == QXmppIq::Get)
+ if (element.tagName() == "iq" && QXmppVersionIq::isVersionIq(element))
{
- // respond to query
- QXmppVersionIq responseIq;
- responseIq.setType(QXmppIq::Result);
- responseIq.setId(versionIq.id());
- responseIq.setTo(versionIq.from());
+ QXmppVersionIq versionIq;
+ versionIq.parse(element);
- QString name = qApp->applicationName();
- if(name.isEmpty())
- name = "Based on QXmpp";
- responseIq.setName(name);
+ if(versionIq.type() == QXmppIq::Get)
+ {
+ // respond to query
+ QXmppVersionIq responseIq;
+ responseIq.setType(QXmppIq::Result);
+ responseIq.setId(versionIq.id());
+ responseIq.setTo(versionIq.from());
- QString version = qApp->applicationVersion();
- if(version.isEmpty())
- version = QXmppVersion();
- responseIq.setVersion(version);
+ QString name = qApp->applicationName();
+ if(name.isEmpty())
+ name = "Based on QXmpp";
+ responseIq.setName(name);
- // TODO set OS aswell
+ QString version = qApp->applicationVersion();
+ if(version.isEmpty())
+ version = QXmppVersion();
+ responseIq.setVersion(version);
- m_stream->sendPacket(responseIq);
+ // TODO set OS aswell
+ stream->sendPacket(responseIq);
+ }
+
+ emit versionReceived(versionIq);
+ return true;
}
- emit versionReceived(versionIq);
+ return false;
}
void QXmppVersionManager::requestVersion(const QString& jid)
{
QXmppVersionIq request;
request.setType(QXmppIq::Get);
- request.setFrom(m_stream->configuration().jid());
+ request.setFrom(client()->configuration().jid());
request.setTo(jid);
- m_stream->sendPacket(request);
+ client()->sendPacket(request);
}
+
diff --git a/src/QXmppVersionManager.h b/src/QXmppVersionManager.h
index 8d7a19ce..6b748f51 100644
--- a/src/QXmppVersionManager.h
+++ b/src/QXmppVersionManager.h
@@ -24,7 +24,7 @@
#ifndef QXMPPVERSIONMANAGER_H
#define QXMPPVERSIONMANAGER_H
-#include <QObject>
+#include "QXmppClientExtension.h"
class QXmppOutgoingClient;
class QXmppVersionIq;
@@ -34,23 +34,19 @@ class QXmppVersionIq;
///
/// \ingroup Managers
-class QXmppVersionManager : public QObject
+class QXmppVersionManager : public QXmppClientExtension
{
Q_OBJECT
public:
- QXmppVersionManager(QXmppOutgoingClient* stream, QObject *parent = 0);
void requestVersion(const QString& jid);
+ /// \cond
+ bool handleStanza(QXmppStream *stream, const QDomElement &element);
+ /// \endcond
+
signals:
void versionReceived(const QXmppVersionIq&);
-
-private slots:
- void versionIqReceived(const QXmppVersionIq&);
-
-private:
- // reference to the xmpp stream (no ownership)
- QXmppOutgoingClient* m_stream;
};
#endif // QXMPPVERSIONMANAGER_H