From 10c093a617929db5c6b201dbf03d6070b12b36b4 Mon Sep 17 00:00:00 2001 From: Manjeet Dahiya Date: Tue, 27 Oct 2009 12:04:03 +0000 Subject: Issue 15: Implement XEP-0047 --- source/QXmppStream.cpp | 55 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 3 deletions(-) (limited to 'source/QXmppStream.cpp') 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 #include #include @@ -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 -- cgit v1.2.3