From 570d45311fc7f493f60dac7a271245bc123c7b4d Mon Sep 17 00:00:00 2001 From: Manjeet Dahiya Date: Tue, 14 Sep 2010 16:19:41 +0000 Subject: * use capabilities() from the discoveryManager * move presenceExtensions() from outgoingClientStream to clientPrivate --- src/QXmppClient.cpp | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) (limited to 'src/QXmppClient.cpp') diff --git a/src/QXmppClient.cpp b/src/QXmppClient.cpp index 8b420932..6d3b1542 100644 --- a/src/QXmppClient.cpp +++ b/src/QXmppClient.cpp @@ -42,11 +42,13 @@ #include "QXmppVersionManager.h" #include "QXmppEntityTimeManager.h" #include "QXmppDiscoveryManager.h" +#include "QXmppDiscoveryIq.h" +#include "QXmppConstants.h" class QXmppClientPrivate { public: - QXmppClientPrivate(); + QXmppClientPrivate(QXmppClient *); QList extensions; QXmppOutgoingClient* stream; ///< Pointer to QXmppOutgoingClient object a wrapper over @@ -63,13 +65,36 @@ public: QXmppVersionManager *versionManager; ///< Pointer to the version manager QHash interfaces; + + QXmppElementList presenceExtensions() const; + + QXmppClient *client; }; -QXmppClientPrivate::QXmppClientPrivate() +QXmppClientPrivate::QXmppClientPrivate(QXmppClient *parentClient) : stream(0), clientPresence(QXmppPresence::Available), - reconnectionManager(0) + reconnectionManager(0), client(parentClient) +{ +} + +QXmppElementList QXmppClientPrivate::presenceExtensions() const { + QXmppDiscoveryManager* ext = client->findExtension(); + if(!ext) + return QXmppElementList(); + + QXmppElementList extensions; + + QXmppElement caps; + caps.setTagName("c"); + caps.setAttribute("xmlns", ns_capabilities); + caps.setAttribute("hash", "sha-1"); + caps.setAttribute("node", QString(capabilities_node)); + caps.setAttribute("ver", ext->capabilities().verificationString().toBase64()); + extensions << caps; + + return extensions; } /// \mainpage @@ -116,10 +141,10 @@ QXmppClientPrivate::QXmppClientPrivate() QXmppClient::QXmppClient(QObject *parent) : QObject(parent), - d(new QXmppClientPrivate) + d(new QXmppClientPrivate(this)) { d->stream = new QXmppOutgoingClient(this); - d->clientPresence.setExtensions(d->stream->presenceExtensions()); + d->clientPresence.setExtensions(d->presenceExtensions()); bool check = connect(d->stream, SIGNAL(elementReceived(const QDomElement&, bool&)), this, SLOT(slotElementReceived(const QDomElement&, bool&))); @@ -253,7 +278,7 @@ void QXmppClient::connectToServer(const QXmppConfiguration& config, } d->clientPresence = initialPresence; - d->clientPresence.setExtensions(d->stream->presenceExtensions()); + d->clientPresence.setExtensions(d->presenceExtensions()); d->stream->connectToHost(); } @@ -442,7 +467,7 @@ void QXmppClient::setClientPresence(const QXmppPresence& presence) else { d->clientPresence = presence; - d->clientPresence.setExtensions(d->stream->presenceExtensions()); + d->clientPresence.setExtensions(d->presenceExtensions()); sendPacket(d->clientPresence); } } -- cgit v1.2.3