From 298b5e0c11154c7b1bbfbd6a301974aeb64f3b47 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Sat, 28 Aug 2010 09:39:09 +0000 Subject: we can receive both a stream start and stream end at once --- src/QXmppStream.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'src/QXmppStream.cpp') diff --git a/src/QXmppStream.cpp b/src/QXmppStream.cpp index fd1f38f9..e3d9d737 100644 --- a/src/QXmppStream.cpp +++ b/src/QXmppStream.cpp @@ -164,14 +164,13 @@ bool QXmppStream::sendData(const QByteArray &data) bool QXmppStream::sendElement(const QDomElement &element) { // prepare packet - QBuffer buffer; - buffer.open(QIODevice::ReadWrite); - QXmlStreamWriter writer(&buffer); + QByteArray data; + QXmlStreamWriter xmlStream(&data); const QStringList omitNamespaces = QStringList() << ns_client << ns_server; - helperToXmlAddDomElement(&writer, element, omitNamespaces); + helperToXmlAddDomElement(&xmlStream, element, omitNamespaces); // send packet - return sendData(buffer.data()); + return sendData(data); } /// Sends an XMPP packet to the peer. @@ -263,19 +262,18 @@ void QXmppStream::socketReadyRead() endStreamRegex.setMinimal(true); // check whether we need to add stream start / end elements - QByteArray completeXml; + QByteArray completeXml = d->dataBuffer; const QString strData = QString::fromUtf8(d->dataBuffer); bool streamStart = false; if(strData.contains(startStreamRegex)) { - completeXml = d->dataBuffer + streamRootElementEnd; streamStart = true; d->streamStart = startStreamRegex.cap(0).toUtf8(); } - else if(strData.contains(endStreamRegex)) - completeXml = d->streamStart + d->dataBuffer; else - completeXml = d->streamStart + d->dataBuffer + streamRootElementEnd; + completeXml.prepend(d->streamStart); + if(!strData.contains(endStreamRegex)) + completeXml.append(streamRootElementEnd); // check whether we have a valid XML document QDomDocument doc; -- cgit v1.2.3