aboutsummaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorManjeet Dahiya <manjeetdahiya@gmail.com>2009-09-09 17:55:25 +0000
committerManjeet Dahiya <manjeetdahiya@gmail.com>2009-09-09 17:55:25 +0000
commitf281e53af318f951c42bd701fc5634cd8aa1b33e (patch)
tree1ff3a91ebbce76401f0575fc602dadceea5174d9 /source
parent0b606b76e679c587fb14c2472de1b809954f29bf (diff)
downloadqxmpp-f281e53af318f951c42bd701fc5634cd8aa1b33e.tar.gz
Fix for Issue 4:Cannot repackage message when receiving partial message.
vCard cleanups
Diffstat (limited to 'source')
-rw-r--r--source/QXmppStream.cpp30
-rw-r--r--source/QXmppStream.h4
-rw-r--r--source/QXmppUtils.cpp5
-rw-r--r--source/QXmppUtils.h2
-rw-r--r--source/QXmppVCard.cpp13
-rw-r--r--source/QXmppVCard.h2
-rw-r--r--source/QXmppVCardManager.cpp1
-rw-r--r--source/QXmppVCardManager.h3
8 files changed, 40 insertions, 20 deletions
diff --git a/source/QXmppStream.cpp b/source/QXmppStream.cpp
index 65a480ae..95cc929a 100644
--- a/source/QXmppStream.cpp
+++ b/source/QXmppStream.cpp
@@ -82,8 +82,8 @@ QXmppStream::QXmppStream(QXmppClient* client)
&m_roster, SLOT(rosterIqReceived(const QXmppRosterIq&)));
Q_ASSERT(check);
- check = QObject::connect(this, SIGNAL(vCardIqReceived(const QXmppRosterIq&)),
- &m_vCardManager, SLOT(vCardIqReceived(const QXmppRosterIq&)));
+ check = QObject::connect(this, SIGNAL(vCardIqReceived(const QXmppVCard&)),
+ &m_vCardManager, SLOT(vCardIqReceived(const QXmppVCard&)));
Q_ASSERT(check);
}
@@ -122,6 +122,7 @@ void QXmppStream::socketHostFound()
void QXmppStream::socketConnected()
{
+ flushDataBuffer();
log(QString("Connected"));
emit connected();
sendStartStream();
@@ -129,6 +130,7 @@ void QXmppStream::socketConnected()
void QXmppStream::socketDisconnected()
{
+ flushDataBuffer();
log(QString("Disconnected"));
emit disconnected();
}
@@ -149,7 +151,7 @@ void QXmppStream::socketError(QAbstractSocket::SocketError ee)
void QXmppStream::socketReadReady()
{
QByteArray data = m_socket.readAll();
- log("SERVER:" + data);
+ log("SERVER [COULD BE PARTIAL DATA]:" + data);
parser(data);
}
@@ -157,21 +159,26 @@ void QXmppStream::parser(const QByteArray& data)
{
QDomDocument doc;
QByteArray completeXml;
- if(hasStartStreamElement(data))
+
+ m_dataBuffer = m_dataBuffer + data;
+
+ if(hasStartStreamElement(m_dataBuffer))
{
- completeXml = data + streamRootElementEnd;
+ completeXml = m_dataBuffer + streamRootElementEnd;
}
else if(hasEndStreamElement(data))
{
- completeXml = streamRootElementStart + data;
+ completeXml = streamRootElementStart + m_dataBuffer;
}
else
{
- completeXml = streamRootElementStart + data + streamRootElementEnd;
+ completeXml = streamRootElementStart + m_dataBuffer + streamRootElementEnd;
}
if(doc.setContent(completeXml, true))
{
+ log("SERVER:" + m_dataBuffer);
+ flushDataBuffer();
// data has valid elements and is not a start or end stream
QDomElement nodeRecv = doc.documentElement().firstChildElement();
while(!nodeRecv.isNull())
@@ -397,6 +404,10 @@ void QXmppStream::parser(const QByteArray& data)
nodeRecv = nodeRecv.nextSiblingElement();
}
}
+ else
+ {
+ //wait for complete packet
+ }
}
@@ -638,3 +649,8 @@ QXmppVCardManager& QXmppStream::getVCardManager()
{
return m_vCardManager;
}
+
+void QXmppStream::flushDataBuffer()
+{
+ m_dataBuffer.clear();
+}
diff --git a/source/QXmppStream.h b/source/QXmppStream.h
index 037f082d..132fd40b 100644
--- a/source/QXmppStream.h
+++ b/source/QXmppStream.h
@@ -97,7 +97,7 @@ private:
QString m_sessionId;
QString m_bindId;
QString m_rosterReqId;
-
+ QByteArray m_dataBuffer;
QSslSocket m_socket;
bool m_sessionAvaliable;
QAbstractSocket::SocketError m_socketError;
@@ -127,6 +127,8 @@ private:
void processIq(const QXmppIq&);
void processBindIq(const QXmppBind&);
void processRosterIq(const QXmppRosterIq&);
+
+ void flushDataBuffer();
};
#endif // QXMPPSTREAM_H
diff --git a/source/QXmppUtils.cpp b/source/QXmppUtils.cpp
index 04c2a4ab..b5339985 100644
--- a/source/QXmppUtils.cpp
+++ b/source/QXmppUtils.cpp
@@ -29,6 +29,7 @@
#include <QByteArray>
#include <QBuffer>
#include <QImageReader>
+#include <QCryptographicHash>
QString jidToResource(const QString& jid)
{
@@ -121,9 +122,9 @@ QString getImageType(const QByteArray& image)
return "image/unknown";
}
-QString getImageHash(const QByteArray& image)
+QByteArray getImageHash(const QByteArray& image)
{
- return "";
+ return QCryptographicHash::hash(image, QCryptographicHash::Sha1);
}
QImage getImageFromByteArray(const QByteArray& image)
diff --git a/source/QXmppUtils.h b/source/QXmppUtils.h
index cb753003..635b80b8 100644
--- a/source/QXmppUtils.h
+++ b/source/QXmppUtils.h
@@ -50,7 +50,7 @@ QString escapeString(const QString& str);
QString unescapeString(const QString& str);
QString getImageType(const QByteArray& image);
-QString getImageHash(const QByteArray& image);
+QByteArray getImageHash(const QByteArray& image);
QImage getImageFromByteArray(const QByteArray& image);
#endif // QXMPPUTILS_H
diff --git a/source/QXmppVCard.cpp b/source/QXmppVCard.cpp
index 35333319..1d4b9509 100644
--- a/source/QXmppVCard.cpp
+++ b/source/QXmppVCard.cpp
@@ -85,17 +85,20 @@ QByteArray QXmppVCard::toXmlElementFromChild() const
stream << ">";
helperToXmlAddElement(stream, "FN", getFullName());
- stream << "<PHOTO";
- helperToXmlAddElement(stream, "TYPE", getImageType(getPhoto()));
- helperToXmlAddElement(stream, "BINVAL", getPhoto());
- stream << "</PHOTO>";
+ if(!getPhoto().isEmpty())
+ {
+ stream << "<PHOTO";
+ helperToXmlAddElement(stream, "TYPE", getImageType(getPhoto()));
+ helperToXmlAddElement(stream, "BINVAL", getPhoto());
+ stream << "</PHOTO>";
+ }
stream << "</vCard>";
return data.toAscii();
}
-const QImage& QXmppVCard::getPhotoAsImage() const
+QImage QXmppVCard::getPhotoAsImage() const
{
return getImageFromByteArray(getPhoto());
}
diff --git a/source/QXmppVCard.h b/source/QXmppVCard.h
index fc8a76c9..b4c7af2c 100644
--- a/source/QXmppVCard.h
+++ b/source/QXmppVCard.h
@@ -39,7 +39,7 @@ public:
QString getFullName() const;
void setFullName(const QString&);
- const QImage& getPhotoAsImage() const;
+ QImage getPhotoAsImage() const;
const QByteArray& getPhoto() const;
void setPhoto(const QByteArray&);
diff --git a/source/QXmppVCardManager.cpp b/source/QXmppVCardManager.cpp
index aa391477..b97b55b8 100644
--- a/source/QXmppVCardManager.cpp
+++ b/source/QXmppVCardManager.cpp
@@ -23,7 +23,6 @@
#include "QXmppVCardManager.h"
-#include "QXmppVCard.h"
#include "QXmppUtils.h"
QXmppVCardManager::QXmppVCardManager(QXmppClient* client) :
diff --git a/source/QXmppVCardManager.h b/source/QXmppVCardManager.h
index 97e37574..9e8adcc4 100644
--- a/source/QXmppVCardManager.h
+++ b/source/QXmppVCardManager.h
@@ -27,8 +27,7 @@
#include <QObject>
#include "QXmppClient.h"
-
-class QXmppVCard;
+#include "QXmppVCard.h"
class QXmppVCardManager : public QObject
{