aboutsummaryrefslogtreecommitdiff
path: root/src
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
parent020ff45efd9ada776dd8a7e35dbe6792c9dd264b (diff)
downloadqxmpp-570d45311fc7f493f60dac7a271245bc123c7b4d.tar.gz
* use capabilities() from the discoveryManager
* move presenceExtensions() from outgoingClientStream to clientPrivate
Diffstat (limited to 'src')
-rw-r--r--src/QXmppClient.cpp39
-rw-r--r--src/QXmppDiscoveryManager.h2
-rw-r--r--src/QXmppOutgoingClient.cpp61
-rw-r--r--src/QXmppOutgoingClient.h2
4 files changed, 33 insertions, 71 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);
}
}
diff --git a/src/QXmppDiscoveryManager.h b/src/QXmppDiscoveryManager.h
index dd4cdade..2cad8ef1 100644
--- a/src/QXmppDiscoveryManager.h
+++ b/src/QXmppDiscoveryManager.h
@@ -42,6 +42,7 @@ public:
/// \cond
QStringList discoveryFeatures() const;
bool handleStanza(QXmppStream *stream, const QDomElement &element);
+ QXmppDiscoveryIq capabilities();
/// \endcond
signals:
@@ -49,7 +50,6 @@ signals:
void itemsReceived(const QXmppDiscoveryIq&);
private:
- QXmppDiscoveryIq capabilities();
};
#endif // QXMPPDISCOVERYMANAGER_H
diff --git a/src/QXmppOutgoingClient.cpp b/src/QXmppOutgoingClient.cpp
index 0348d1db..97f97c02 100644
--- a/src/QXmppOutgoingClient.cpp
+++ b/src/QXmppOutgoingClient.cpp
@@ -808,64 +808,3 @@ void QXmppOutgoingClient::addFeatures(const QStringList &features)
{
d->extraFeatures << features;
}
-
-// TODO: use the one in discoveryManager
-QXmppDiscoveryIq QXmppOutgoingClient::capabilities() const
-{
- QXmppDiscoveryIq iq;
- iq.setType(QXmppIq::Result);
- iq.setQueryType(QXmppDiscoveryIq::InfoQuery);
-
- // features
- QStringList features;
- features
- << ns_rpc // XEP-0009: Jabber-RPC
- << ns_disco_info // XEP-0030: Service Discovery
- << ns_ibb // XEP-0047: In-Band Bytestreams
- << ns_vcard // XEP-0054: vcard-temp
- << ns_bytestreams // XEP-0065: SOCKS5 Bytestreams
- << ns_chat_states // XEP-0085: Chat State Notifications
- << ns_stream_initiation // XEP-0095: Stream Initiation
- << ns_stream_initiation_file_transfer // XEP-0096: SI File Transfer
- << ns_capabilities // XEP-0115 : Entity Capabilities
- << ns_jingle // XEP-0166 : Jingle
- << ns_jingle_rtp // XEP-0167 : Jingle RTP Sessions
- << ns_jingle_rtp_audio
- << ns_jingle_ice_udp // XEP-0176 : Jingle ICE-UDP Transport Method
- << ns_ping; // XEP-0199: XMPP Ping
- features << d->extraFeatures;
- iq.setFeatures(features);
-
- // identities
- QList<QXmppDiscoveryIq::Identity> identities;
- QXmppDiscoveryIq::Identity identity;
-
- identity.setCategory("automation");
- identity.setType("rpc");
- identities.append(identity);
-
- identity.setCategory("client");
- identity.setType("pc");
- identity.setName(QString("%1 %2").arg(qApp->applicationName(), qApp->applicationVersion()));
- identities.append(identity);
-
- iq.setIdentities(identities);
- return iq;
-}
-
-QXmppElementList QXmppOutgoingClient::presenceExtensions() const
-{
- QXmppElementList extensions;
-
- QXmppElement caps;
- caps.setTagName("c");
- caps.setAttribute("xmlns", ns_capabilities);
- caps.setAttribute("hash", "sha-1");
- caps.setAttribute("node", QString(capabilities_node));
- // TODO: refer the capabilities() in discoveryManager
- caps.setAttribute("ver", capabilities().verificationString().toBase64());
- extensions << caps;
-
- return extensions;
-}
-
diff --git a/src/QXmppOutgoingClient.h b/src/QXmppOutgoingClient.h
index f8f6e9d2..67634422 100644
--- a/src/QXmppOutgoingClient.h
+++ b/src/QXmppOutgoingClient.h
@@ -78,7 +78,6 @@ public:
QXmppConfiguration& configuration();
void addFeatures(const QStringList &features);
- QXmppElementList presenceExtensions() const;
signals:
void error(QXmppClient::Error);
@@ -138,7 +137,6 @@ private slots:
void pingTimeout();
private:
- QXmppDiscoveryIq capabilities() const;
void sendAuthDigestMD5ResponseStep1(const QString& challenge);
void sendAuthDigestMD5ResponseStep2(const QString& challenge);
void sendNonSASLAuth(bool plaintext);