aboutsummaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-02-03 16:16:54 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-02-03 16:16:54 +0000
commit4e3c8ca5c82c27cb81d69ac43f06b581eb5afe70 (patch)
tree395d9a4341da9bd3015b6e878e26d9897806c514 /source
parent468450f99b8549beb9bc1f68e50acbef728e6ad0 (diff)
downloadqxmpp-4e3c8ca5c82c27cb81d69ac43f06b581eb5afe70.tar.gz
integrate XEP-0136 into QXmppStream
Diffstat (limited to 'source')
-rw-r--r--source/QXmppStream.cpp43
-rw-r--r--source/QXmppStream.h10
-rw-r--r--source/source.pro2
3 files changed, 54 insertions, 1 deletions
diff --git a/source/QXmppStream.cpp b/source/QXmppStream.cpp
index 33394e48..1954b6bc 100644
--- a/source/QXmppStream.cpp
+++ b/source/QXmppStream.cpp
@@ -41,6 +41,7 @@
#include "QXmppDataIq.h"
#include "QXmppRpcIq.h"
#include "QXmppIbbTransferManager.h"
+#include "QXmppArchiveIq.h"
#include "QXmppPingIq.h"
#include "QXmppLogger.h"
#include "QXmppUtils.h"
@@ -57,7 +58,8 @@ static const QByteArray streamRootElementEnd = "</stream:stream>";
QXmppStream::QXmppStream(QXmppClient* client)
: QObject(client), m_client(client), m_roster(this),
- m_sessionAvaliable(false), m_vCardManager(m_client)
+ m_sessionAvaliable(false), m_vCardManager(m_client),
+ m_archiveManager(m_client)
{
bool check = QObject::connect(&m_socket, SIGNAL(hostFound()),
this, SLOT(socketHostFound()));
@@ -100,6 +102,18 @@ QXmppStream::QXmppStream(QXmppClient* client)
check = QObject::connect(this, SIGNAL(vCardIqReceived(const QXmppVCard&)),
&m_vCardManager, SLOT(vCardIqReceived(const QXmppVCard&)));
Q_ASSERT(check);
+
+ check = QObject::connect(this, SIGNAL(archiveChatIqReceived(const QXmppArchiveChatIq&)),
+ &m_archiveManager, SLOT(archiveChatIqReceived(const QXmppArchiveChatIq&)));
+ Q_ASSERT(check);
+
+ check = QObject::connect(this, SIGNAL(archiveListIqReceived(const QXmppArchiveListIq&)),
+ &m_archiveManager, SLOT(archiveListIqReceived(const QXmppArchiveListIq&)));
+ Q_ASSERT(check);
+
+ check = QObject::connect(this, SIGNAL(archivePrefIqReceived(const QXmppArchivePrefIq&)),
+ &m_archiveManager, SLOT(archivePrefIqReceived(const QXmppArchivePrefIq&)));
+ Q_ASSERT(check);
}
QXmppStream::~QXmppStream()
@@ -573,6 +587,28 @@ void QXmppStream::parser(const QByteArray& data)
sendNonSASLAuth(plainText);
}
}
+ // XEP-0136 message archiving
+ else if(QXmppArchiveChatIq::isArchiveChatIq(nodeRecv))
+ {
+ QXmppArchiveChatIq archiveIq;
+ archiveIq.parse(nodeRecv);
+ emit archiveChatIqReceived(archiveIq);
+ iqPacket = archiveIq;
+ }
+ else if(QXmppArchiveListIq::isArchiveListIq(nodeRecv))
+ {
+ QXmppArchiveListIq archiveIq;
+ archiveIq.parse(nodeRecv);
+ emit archiveListIqReceived(archiveIq);
+ iqPacket = archiveIq;
+ }
+ else if(QXmppArchivePrefIq::isArchivePrefIq(nodeRecv))
+ {
+ QXmppArchivePrefIq archiveIq;
+ archiveIq.parse(nodeRecv);
+ emit archivePrefIqReceived(archiveIq);
+ iqPacket = archiveIq;
+ }
// XEP-0199 ping
else if(QXmppPingIq::isPingIq(nodeRecv))
{
@@ -1029,3 +1065,8 @@ void QXmppStream::flushDataBuffer()
{
m_dataBuffer.clear();
}
+
+QXmppArchiveManager& QXmppStream::getArchiveManager()
+{
+ return m_archiveManager;
+}
diff --git a/source/QXmppStream.h b/source/QXmppStream.h
index 319abddd..469b51e6 100644
--- a/source/QXmppStream.h
+++ b/source/QXmppStream.h
@@ -31,6 +31,7 @@
#include "QXmppRoster.h"
#include "QXmppStanza.h"
#include "QXmppVCardManager.h"
+#include "QXmppArchiveManager.h"
class QDomElement;
@@ -45,6 +46,9 @@ class QXmppVCard;
class QXmppMessage;
class QXmppRpcResponseIq;
class QXmppRpcErrorIq;
+class QXmppArchiveChatIq;
+class QXmppArchiveListIq;
+class QXmppArchivePrefIq;
class QXmppStream : public QObject
{
@@ -57,6 +61,7 @@ public:
void acceptSubscriptionRequest(const QString& from, bool accept = true);
void sendSubscriptionRequest(const QString& to);
void disconnect();
+ QXmppArchiveManager& getArchiveManager();
QXmppRoster& getRoster();
QXmppVCardManager& getVCardManager();
void sendPacket(const QXmppPacket&);
@@ -89,6 +94,10 @@ signals:
void rpcCallResponse(const QXmppRpcResponseIq& result );
void rpcCallError(const QXmppRpcErrorIq& err );
+ void archiveChatIqReceived(const QXmppArchiveChatIq&);
+ void archiveListIqReceived(const QXmppArchiveListIq&);
+ void archivePrefIqReceived(const QXmppArchivePrefIq&);
+
private slots:
void socketHostFound();
void socketReadReady();
@@ -116,6 +125,7 @@ private:
QXmppVCardManager m_vCardManager;
+ QXmppArchiveManager m_archiveManager;
QXmppConfiguration& getConfiguration();
void parser(const QByteArray&);
diff --git a/source/source.pro b/source/source.pro
index ef66431d..352df88a 100644
--- a/source/source.pro
+++ b/source/source.pro
@@ -14,6 +14,7 @@ else {
# Header files
HEADERS += QXmppUtils.h \
+ QXmppArchiveManager.h \
QXmppBind.h \
QXmppClient.h \
QXmppConfiguration.h \
@@ -45,6 +46,7 @@ HEADERS += QXmppUtils.h \
# Source files
SOURCES += QXmppUtils.cpp \
+ QXmppArchiveManager.cpp \
QXmppBind.cpp \
QXmppClient.cpp \
QXmppConfiguration.cpp \