aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-09-12 15:52:41 +0200
committerJeremy Lainé <jeremy.laine@m4x.org>2012-09-12 15:52:41 +0200
commit07d537a2573f1dd06dd69ba6a5e2fa97357c443b (patch)
treeba452c274480fea96348d14b4653dc481119e7c5 /src
parentf9b26e12f593b185a15674e3ddda0b56d05b43c6 (diff)
downloadqxmpp-07d537a2573f1dd06dd69ba6a5e2fa97357c443b.tar.gz
test stream initiation IQ serialisation / parsing
Diffstat (limited to 'src')
-rw-r--r--src/base/QXmppStreamInitiationIq.cpp28
-rw-r--r--src/base/QXmppStreamInitiationIq.h9
-rw-r--r--src/client/QXmppTransferManager.cpp44
-rw-r--r--src/client/QXmppTransferManager.h1
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;