diff options
| author | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2009-09-09 17:55:25 +0000 |
|---|---|---|
| committer | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2009-09-09 17:55:25 +0000 |
| commit | f281e53af318f951c42bd701fc5634cd8aa1b33e (patch) | |
| tree | 1ff3a91ebbce76401f0575fc602dadceea5174d9 /source | |
| parent | 0b606b76e679c587fb14c2472de1b809954f29bf (diff) | |
| download | qxmpp-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.cpp | 30 | ||||
| -rw-r--r-- | source/QXmppStream.h | 4 | ||||
| -rw-r--r-- | source/QXmppUtils.cpp | 5 | ||||
| -rw-r--r-- | source/QXmppUtils.h | 2 | ||||
| -rw-r--r-- | source/QXmppVCard.cpp | 13 | ||||
| -rw-r--r-- | source/QXmppVCard.h | 2 | ||||
| -rw-r--r-- | source/QXmppVCardManager.cpp | 1 | ||||
| -rw-r--r-- | source/QXmppVCardManager.h | 3 |
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
{
|
