diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-09-12 15:52:41 +0200 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-09-12 15:52:41 +0200 |
| commit | 07d537a2573f1dd06dd69ba6a5e2fa97357c443b (patch) | |
| tree | ba452c274480fea96348d14b4653dc481119e7c5 /src | |
| parent | f9b26e12f593b185a15674e3ddda0b56d05b43c6 (diff) | |
| download | qxmpp-07d537a2573f1dd06dd69ba6a5e2fa97357c443b.tar.gz | |
test stream initiation IQ serialisation / parsing
Diffstat (limited to 'src')
| -rw-r--r-- | src/base/QXmppStreamInitiationIq.cpp | 28 | ||||
| -rw-r--r-- | src/base/QXmppStreamInitiationIq.h | 9 | ||||
| -rw-r--r-- | src/client/QXmppTransferManager.cpp | 44 | ||||
| -rw-r--r-- | src/client/QXmppTransferManager.h | 1 |
4 files changed, 32 insertions, 50 deletions
diff --git a/src/base/QXmppStreamInitiationIq.cpp b/src/base/QXmppStreamInitiationIq.cpp index 361701ec..7b1b4b89 100644 --- a/src/base/QXmppStreamInitiationIq.cpp +++ b/src/base/QXmppStreamInitiationIq.cpp @@ -37,6 +37,16 @@ void QXmppStreamInitiationIq::setFeatureForm(const QXmppDataForm &form) m_featureForm = form; } +QXmppTransferFileInfo QXmppStreamInitiationIq::fileInfo() const +{ + return m_fileInfo; +} + +void QXmppStreamInitiationIq::setFileInfo(const QXmppTransferFileInfo &fileInfo) +{ + m_fileInfo = fileInfo; +} + QString QXmppStreamInitiationIq::mimeType() const { return m_mimeType; @@ -57,11 +67,6 @@ void QXmppStreamInitiationIq::setProfile(QXmppStreamInitiationIq::Profile profil m_profile = profile; } -QXmppElementList QXmppStreamInitiationIq::siItems() const -{ - return m_siItems; -} - QString QXmppStreamInitiationIq::siId() const { return m_siId; @@ -72,11 +77,6 @@ void QXmppStreamInitiationIq::setSiId(const QString &id) m_siId = id; } -void QXmppStreamInitiationIq::setSiItems(const QXmppElementList &items) -{ - m_siItems = items; -} - /// \cond bool QXmppStreamInitiationIq::isStreamInitiationIq(const QDomElement &element) { @@ -99,8 +99,8 @@ void QXmppStreamInitiationIq::parseElementFromChild(const QDomElement &element) { if (itemElement.tagName() == "feature" && itemElement.namespaceURI() == ns_feature_negotiation) { m_featureForm.parse(itemElement.firstChildElement()); - } else { - m_siItems.append(QXmppElement(itemElement)); + } else if (itemElement.tagName() == "file" && itemElement.namespaceURI() == ns_stream_initiation_file_transfer) { + m_fileInfo.parse(itemElement); } itemElement = itemElement.nextSiblingElement(); } @@ -114,8 +114,8 @@ void QXmppStreamInitiationIq::toXmlElementFromChild(QXmlStreamWriter *writer) co helperToXmlAddAttribute(writer, "mime-type", m_mimeType); if (m_profile == FileTransfer) helperToXmlAddAttribute(writer, "profile", ns_stream_initiation_file_transfer); - foreach (const QXmppElement &item, m_siItems) - item.toXml(writer); + if (!m_fileInfo.isNull()) + m_fileInfo.toXml(writer); if (!m_featureForm.isNull()) { writer->writeStartElement("feature"); writer->writeAttribute("xmlns", ns_feature_negotiation); diff --git a/src/base/QXmppStreamInitiationIq.h b/src/base/QXmppStreamInitiationIq.h index 2feb5e7e..27e59afd 100644 --- a/src/base/QXmppStreamInitiationIq.h +++ b/src/base/QXmppStreamInitiationIq.h @@ -28,6 +28,7 @@ #include "QXmppDataForm.h" #include "QXmppIq.h" +#include "QXmppTransferManager.h" class QDomElement; class QXmlStreamWriter; @@ -43,6 +44,9 @@ public: QXmppDataForm featureForm() const; void setFeatureForm(const QXmppDataForm &form); + QXmppTransferFileInfo fileInfo() const; + void setFileInfo(const QXmppTransferFileInfo &info); + QString mimeType() const; void setMimeType(const QString &mimeType); @@ -52,9 +56,6 @@ public: QString siId() const; void setSiId(const QString &id); - QXmppElementList siItems() const; - void setSiItems(const QXmppElementList &items); - static bool isStreamInitiationIq(const QDomElement &element); protected: @@ -65,10 +66,10 @@ protected: private: QXmppDataForm m_featureForm; + QXmppTransferFileInfo m_fileInfo; QString m_mimeType; Profile m_profile; QString m_siId; - QXmppElementList m_siItems; }; #endif diff --git a/src/client/QXmppTransferManager.cpp b/src/client/QXmppTransferManager.cpp index 146bd08d..dd23a851 100644 --- a/src/client/QXmppTransferManager.cpp +++ b/src/client/QXmppTransferManager.cpp @@ -134,6 +134,15 @@ void QXmppTransferFileInfo::setSize(qint64 size) d->size = size; } +bool QXmppTransferFileInfo::isNull() const +{ + return d->date.isNull() + && d->description.isEmpty() + && d->hash.isEmpty() + && d->name.isEmpty() + && d->size == 0; +} + QXmppTransferFileInfo& QXmppTransferFileInfo::operator=(const QXmppTransferFileInfo &other) { d = other.d; @@ -1359,26 +1368,7 @@ QXmppTransferJob *QXmppTransferManager::sendFile(const QString &jid, QIODevice * return job; } - // prepare negotiation - QXmppElementList items; - - QXmppElement file; - file.setTagName("file"); - file.setAttribute("xmlns", ns_stream_initiation_file_transfer); - file.setAttribute("date", QXmppUtils::datetimeToString(job->fileDate())); - file.setAttribute("hash", job->fileHash().toHex()); - file.setAttribute("name", job->fileName()); - file.setAttribute("size", QString::number(job->fileSize())); - if (!fileInfo.description().isEmpty()) - { - QXmppElement desc; - desc.setTagName("desc"); - desc.setValue(fileInfo.description()); - file.appendChild(desc); - } - items.append(file); - - // add supported stream methods + // collect supported stream methods QXmppDataForm form; form.setType(QXmppDataForm::Form); @@ -1408,8 +1398,8 @@ QXmppTransferJob *QXmppTransferManager::sendFile(const QString &jid, QIODevice * request.setType(QXmppIq::Set); request.setTo(jid); request.setProfile(QXmppStreamInitiationIq::FileTransfer); + request.setFileInfo(job->d->fileInfo); request.setFeatureForm(form); - request.setSiItems(items); request.setSiId(job->d->sid); job->d->requestId = request.id(); client()->sendPacket(request); @@ -1594,6 +1584,7 @@ void QXmppTransferManager::streamInitiationSetReceived(const QXmppStreamInitiati job->d->offerId = iq.id(); job->d->sid = iq.siId(); job->d->mimeType = iq.mimeType(); + job->d->fileInfo = iq.fileInfo(); foreach (const QXmppDataForm::Field &field, iq.featureForm().fields()) { if (field.key() == "stream-method") { QPair<QString, QString> option; @@ -1605,17 +1596,6 @@ void QXmppTransferManager::streamInitiationSetReceived(const QXmppStreamInitiati } } } - foreach (const QXmppElement &item, iq.siItems()) - { - if (item.tagName() == "file" && item.attribute("xmlns") == ns_stream_initiation_file_transfer) - { - job->d->fileInfo.setDate(QXmppUtils::datetimeFromString(item.attribute("date"))); - job->d->fileInfo.setHash(QByteArray::fromHex(item.attribute("hash").toAscii())); - job->d->fileInfo.setName(item.attribute("name")); - job->d->fileInfo.setSize(item.attribute("size").toLongLong()); - job->d->fileInfo.setDescription(item.firstChildElement("desc").value()); - } - } // select a method supported by both parties int sharedMethods = (offeredMethods & d->supportedMethods); diff --git a/src/client/QXmppTransferManager.h b/src/client/QXmppTransferManager.h index a14e075f..71068b27 100644 --- a/src/client/QXmppTransferManager.h +++ b/src/client/QXmppTransferManager.h @@ -65,6 +65,7 @@ public: qint64 size() const; void setSize(qint64 size); + bool isNull() const; QXmppTransferFileInfo& operator=(const QXmppTransferFileInfo &other); bool operator==(const QXmppTransferFileInfo &other) const; |
