aboutsummaryrefslogtreecommitdiff
path: root/src/QXmppClient.cpp
diff options
context:
space:
mode:
authorManjeet Dahiya <manjeetdahiya@gmail.com>2010-09-14 16:19:41 +0000
committerManjeet Dahiya <manjeetdahiya@gmail.com>2010-09-14 16:19:41 +0000
commit570d45311fc7f493f60dac7a271245bc123c7b4d (patch)
tree3fd5260b394a516b5c5c97a079975e4614602017 /src/QXmppClient.cpp
parent020ff45efd9ada776dd8a7e35dbe6792c9dd264b (diff)
downloadqxmpp-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.cpp39
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);
}
}