diff options
| author | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2009-10-27 12:04:03 +0000 |
|---|---|---|
| committer | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2009-10-27 12:04:03 +0000 |
| commit | 10c093a617929db5c6b201dbf03d6070b12b36b4 (patch) | |
| tree | d9b1c4507fdb1969c3225f27b4632258c4916dc0 /source/QXmppStream.cpp | |
| parent | 239b2b15c3cfd9e4d7cc085ed31645d6ae6942ee (diff) | |
| download | qxmpp-10c093a617929db5c6b201dbf03d6070b12b36b4.tar.gz | |
Issue 15: Implement XEP-0047
Diffstat (limited to 'source/QXmppStream.cpp')
| -rw-r--r-- | source/QXmppStream.cpp | 55 |
1 files changed, 52 insertions, 3 deletions
diff --git a/source/QXmppStream.cpp b/source/QXmppStream.cpp index 44d8c5f2..4405e3b4 100644 --- a/source/QXmppStream.cpp +++ b/source/QXmppStream.cpp @@ -37,8 +37,12 @@ #include "QXmppVCard.h" #include "QXmppNonSASLAuth.h" #include "QXmppInformationRequestResult.h" +#include "QXmppIbbIqs.h" +#include "QXmppDataIq.h" +#include "QXmppIbbTransferManager.h" #include "QXmppLogger.h" + #include <QDomDocument> #include <QStringList> #include <QRegExp> @@ -216,10 +220,11 @@ void QXmppStream::parser(const QByteArray& data) { //TODO: Make a login error here. } - while(!nodeRecv.isNull()) { + QString ns = nodeRecv.namespaceURI(); + log("Namespace: " + ns + " Tag: " + nodeRecv.tagName() ); if(ns == ns_stream && nodeRecv.tagName() == "features") { bool nonSaslAvailable = nodeRecv.firstChildElement("auth"). @@ -365,12 +370,56 @@ void QXmppStream::parser(const QByteArray& data) qWarning("QXmppStream: iq type can't be empty"); QXmppIq iqPacket; // to emit - QDomElement elemen = nodeRecv.firstChildElement("error"); QXmppStanza::Error error = parseStanzaError(elemen); + if( QXmppIbbOpenIq::isIbbOpenIq( nodeRecv ) ) + { + QXmppIbbOpenIq openIqPacket; + openIqPacket.parse( nodeRecv ); + + QXmppIbbTransferJob *mgr = m_client->getIbbTransferManager()-> + getIbbTransferJob(openIqPacket.getId()); + mgr->gotOpen( openIqPacket ); + } + else if( QXmppIbbErrorIq::isIbbErrorIq( nodeRecv ) && + m_client->getIbbTransferManager()->isIbbTransferJobId( id )) + { + QXmppIbbErrorIq errorIqPacket; + errorIqPacket.parse(nodeRecv); + + QXmppIbbTransferJob *mgr = m_client->getIbbTransferManager()-> + getIbbTransferJob(errorIqPacket.getId()); + mgr->gotError( errorIqPacket ); + } + else if( QXmppIbbAckIq::isIbbAckIq( nodeRecv ) && + m_client->getIbbTransferManager()->isIbbTransferJobId( id )) + { + QXmppIbbAckIq ackIqPacket; + ackIqPacket.parse(nodeRecv); + + QXmppIbbTransferJob *mgr = m_client->getIbbTransferManager()->getIbbTransferJob(ackIqPacket.getId()); + mgr->gotAck(); + } + else if( QXmppDataIq::isDataIq( nodeRecv ) && + m_client->getIbbTransferManager()->isIbbTransferJobId( id )) + { + QXmppDataIq dataIqPacket; + dataIqPacket.parse(nodeRecv); - if(id == m_sessionId) + QXmppIbbTransferJob *mgr = m_client->getIbbTransferManager()->getIbbTransferJob(dataIqPacket.getId()); + mgr->gotData(dataIqPacket); + } + else if( QXmppIbbCloseIq::isIbbCloseIq( nodeRecv ) && + m_client->getIbbTransferManager()->isIbbTransferJobId( id )) + { + QXmppIbbCloseIq closeIqPacket; + closeIqPacket.parse(nodeRecv); + + QXmppIbbTransferJob *mgr = m_client->getIbbTransferManager()->getIbbTransferJob(closeIqPacket.getId()); + mgr->gotClose(closeIqPacket); + } + else if(id == m_sessionId) { // get back add configuration whether to send // roster and intial presence in beginning |
