aboutsummaryrefslogtreecommitdiff
path: root/source/QXmppStream.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-03-04 11:07:13 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-03-04 11:07:13 +0000
commit2ad848c9f5f19769687723c260f2c3db8db3aa13 (patch)
tree86ef89a69614742d4486847657fe772719dcb7b7 /source/QXmppStream.cpp
parent8d2a59d20853d1c1ddb937196cfc9a10b67c6aad (diff)
downloadqxmpp-2ad848c9f5f19769687723c260f2c3db8db3aa13.tar.gz
integrate support for XEP-0092: Software Version
Diffstat (limited to 'source/QXmppStream.cpp')
-rw-r--r--source/QXmppStream.cpp122
1 files changed, 75 insertions, 47 deletions
diff --git a/source/QXmppStream.cpp b/source/QXmppStream.cpp
index a67e1aba..90f3fa92 100644
--- a/source/QXmppStream.cpp
+++ b/source/QXmppStream.cpp
@@ -46,7 +46,9 @@
#include "QXmppLogger.h"
#include "QXmppStreamInitiationIq.h"
#include "QXmppTransferManager.h"
+#include "QXmppVersionIq.h"
+#include <QCoreApplication>
#include <QDomDocument>
#include <QStringList>
#include <QRegExp>
@@ -539,8 +541,51 @@ void QXmppStream::parser(const QByteArray& data)
iqPacket = rosterIq;
}
// extensions
- // vCard - XEP-0054
- // http://xmpp.org/extensions/xep-0054.html
+
+ // XEP-0030: Service Discovery
+ else if(QXmppDiscoveryIq::isDiscoveryIq(nodeRecv))
+ {
+ QXmppDiscoveryIq discoIq;
+ discoIq.parse(nodeRecv);
+
+ if (discoIq.type() == QXmppIq::Get &&
+ discoIq.queryType() == QXmppDiscoveryIq::InfoQuery)
+ {
+ // respond to info query
+ QXmppInformationRequestResult qxmppFeatures;
+ qxmppFeatures.setId(id);
+ qxmppFeatures.setTo(from);
+ qxmppFeatures.setFrom(to);
+ sendPacket(qxmppFeatures);
+ } else {
+ emit discoveryIqReceived(discoIq);
+ }
+
+ iqPacket = discoIq;
+ }
+ // XEP-0047 In-Band Bytestreams
+ else if(QXmppIbbCloseIq::isIbbCloseIq(nodeRecv))
+ {
+ QXmppIbbCloseIq ibbCloseIq;
+ ibbCloseIq.parse(nodeRecv);
+ emit ibbCloseIqReceived(ibbCloseIq);
+ iqPacket = ibbCloseIq;
+ }
+ else if(QXmppIbbDataIq::isIbbDataIq(nodeRecv))
+ {
+ QXmppIbbDataIq ibbDataIq;
+ ibbDataIq.parse(nodeRecv);
+ emit ibbDataIqReceived(ibbDataIq);
+ iqPacket = ibbDataIq;
+ }
+ else if(QXmppIbbOpenIq::isIbbOpenIq(nodeRecv))
+ {
+ QXmppIbbOpenIq ibbOpenIq;
+ ibbOpenIq.parse(nodeRecv);
+ emit ibbOpenIqReceived(ibbOpenIq);
+ iqPacket = ibbOpenIq;
+ }
+ // XEP-0054: vcard-temp
else if(nodeRecv.firstChildElement("vCard").
namespaceURI() == ns_vcard)
{
@@ -549,24 +594,15 @@ void QXmppStream::parser(const QByteArray& data)
emit vCardIqReceived(vcardIq);
iqPacket = vcardIq;
}
- // XEP-0030 info query
- else if(nodeRecv.firstChildElement("query").
- namespaceURI() == ns_disco_info &&
- type == "get")
- {
- QXmppInformationRequestResult qxmppFeatures;
- qxmppFeatures.setId(id);
- qxmppFeatures.setTo(from);
- qxmppFeatures.setFrom(to);
- sendPacket(qxmppFeatures);
- }
- else if(QXmppDiscoveryIq::isDiscoveryIq(nodeRecv))
+ // XEP-0065: SOCKS5 Bytestreams
+ else if(QXmppByteStreamIq::isByteStreamIq(nodeRecv))
{
- QXmppDiscoveryIq discoIq;
- discoIq.parse(nodeRecv);
- emit discoveryIqReceived(discoIq);
- iqPacket = discoIq;
+ QXmppByteStreamIq byteStreamIq;
+ byteStreamIq.parse(nodeRecv);
+ emit byteStreamIqReceived(byteStreamIq);
+ iqPacket = byteStreamIq;
}
+ // XEP-0078: Non-SASL Authentication
else if(id == m_nonSASLAuthId && type == "result")
{
// successful Non-SASL Authentication
@@ -608,35 +644,27 @@ void QXmppStream::parser(const QByteArray& data)
sendNonSASLAuth(plainText);
}
}
- // XEP-0047 In-Band Bytestreams
- else if(QXmppIbbCloseIq::isIbbCloseIq(nodeRecv))
- {
- QXmppIbbCloseIq ibbCloseIq;
- ibbCloseIq.parse(nodeRecv);
- emit ibbCloseIqReceived(ibbCloseIq);
- iqPacket = ibbCloseIq;
- }
- else if(QXmppIbbDataIq::isIbbDataIq(nodeRecv))
+ // XEP-0092: Software Version
+ else if(QXmppVersionIq::isVersionIq(nodeRecv))
{
- QXmppIbbDataIq ibbDataIq;
- ibbDataIq.parse(nodeRecv);
- emit ibbDataIqReceived(ibbDataIq);
- iqPacket = ibbDataIq;
- }
- else if(QXmppIbbOpenIq::isIbbOpenIq(nodeRecv))
- {
- QXmppIbbOpenIq ibbOpenIq;
- ibbOpenIq.parse(nodeRecv);
- emit ibbOpenIqReceived(ibbOpenIq);
- iqPacket = ibbOpenIq;
- }
- // XEP-0065: SOCKS5 Bytestreams
- else if(QXmppByteStreamIq::isByteStreamIq(nodeRecv))
- {
- QXmppByteStreamIq byteStreamIq;
- byteStreamIq.parse(nodeRecv);
- emit byteStreamIqReceived(byteStreamIq);
- iqPacket = byteStreamIq;
+ QXmppVersionIq versionIq;
+ versionIq.parse(nodeRecv);
+
+ if (versionIq.type() == QXmppIq::Get)
+ {
+ // respond to query
+ QXmppVersionIq responseIq;
+ responseIq.setType(QXmppIq::Result);
+ responseIq.setId(id);
+ responseIq.setTo(from);
+ responseIq.setName(qApp->applicationName());
+ responseIq.setVersion(qApp->applicationVersion());
+ sendPacket(responseIq);
+ } else {
+ emit versionIqReceived(versionIq);
+ }
+
+ iqPacket = versionIq;
}
// XEP-0095: Stream Initiation
else if(QXmppStreamInitiationIq::isStreamInitiationIq(nodeRecv))
@@ -668,7 +696,7 @@ void QXmppStream::parser(const QByteArray& data)
emit archivePrefIqReceived(archiveIq);
iqPacket = archiveIq;
}
- // XEP-0199 ping
+ // XEP-0199: XMPP Ping
else if(QXmppPingIq::isPingIq(nodeRecv))
{
QXmppIq iq(QXmppIq::Result);