diff options
| author | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2010-09-14 16:19:41 +0000 |
|---|---|---|
| committer | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2010-09-14 16:19:41 +0000 |
| commit | 570d45311fc7f493f60dac7a271245bc123c7b4d (patch) | |
| tree | 3fd5260b394a516b5c5c97a079975e4614602017 /src/QXmppClient.cpp | |
| parent | 020ff45efd9ada776dd8a7e35dbe6792c9dd264b (diff) | |
| download | qxmpp-570d45311fc7f493f60dac7a271245bc123c7b4d.tar.gz | |
* use capabilities() from the discoveryManager
* move presenceExtensions() from outgoingClientStream to clientPrivate
Diffstat (limited to 'src/QXmppClient.cpp')
| -rw-r--r-- | src/QXmppClient.cpp | 39 |
1 files changed, 32 insertions, 7 deletions
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<QXmppClientExtension*> extensions; QXmppOutgoingClient* stream; ///< Pointer to QXmppOutgoingClient object a wrapper over @@ -63,13 +65,36 @@ public: QXmppVersionManager *versionManager; ///< Pointer to the version manager QHash<QString,QXmppInvokable*> 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<QXmppDiscoveryManager*>(); + 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); } } |
