[Pkg-owncloud-commits] [owncloud-client] 98/470: Checksums: Compute content checksum on download #4375
Sandro Knauß
hefee-guest at moszumanska.debian.org
Thu May 12 16:24:49 UTC 2016
This is an automated email from the git hooks/post-receive script.
hefee-guest pushed a commit to branch master
in repository owncloud-client.
commit d6d350296033a4330eb2408751a9ae25998d34d0
Author: Christian Kamm <mail at ckamm.de>
Date: Wed Mar 2 14:20:36 2016 +0100
Checksums: Compute content checksum on download #4375
---
src/libsync/propagatedownload.cpp | 39 ++++++++++++++++++++++++++++++++-------
src/libsync/propagatedownload.h | 5 +++--
2 files changed, 35 insertions(+), 9 deletions(-)
diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp
index 60a0183..fd3b6a7 100644
--- a/src/libsync/propagatedownload.cpp
+++ b/src/libsync/propagatedownload.cpp
@@ -546,11 +546,11 @@ void PropagateDownloadFileQNAM::slotGetFinished()
}
// Do checksum validation for the download. If there is no checksum header, the validator
- // will also emit the validated() signal to continue the flow in slot downloadFinished()
+ // will also emit the validated() signal to continue the flow in slot transmissionChecksumValidated()
// as this is (still) also correct.
ValidateChecksumHeader *validator = new ValidateChecksumHeader(this);
connect(validator, SIGNAL(validated(QByteArray,QByteArray)),
- SLOT(downloadFinished(QByteArray,QByteArray)));
+ SLOT(transmissionChecksumValidated(QByteArray,QByteArray)));
connect(validator, SIGNAL(validationFailed(QString)),
SLOT(slotChecksumFail(QString)));
auto checksumHeader = job->reply()->rawHeader(checkSumHeaderC);
@@ -638,13 +638,38 @@ static void handleRecallFile(const QString &fn)
}
} // end namespace
-void PropagateDownloadFileQNAM::downloadFinished(const QByteArray& transportChecksumType,
- const QByteArray& transportChecksum)
+
+void PropagateDownloadFileQNAM::transmissionChecksumValidated(const QByteArray &checksumType, const QByteArray &checksum)
{
- // by default, reuse the transport checksum as content checksum
- _item->_contentChecksum = transportChecksum;
- _item->_contentChecksumType = transportChecksumType;
+ const auto theContentChecksumType = contentChecksumType();
+
+ // Reuse transmission checksum as content checksum.
+ //
+ // We could do this more aggressively and accept both MD5 and SHA1
+ // instead of insisting on the exactly correct checksum type.
+ if (theContentChecksumType == checksumType || theContentChecksumType.isEmpty()) {
+ return contentChecksumComputed(checksumType, checksum);
+ }
+
+ // Compute the content checksum.
+ auto computeChecksum = new ComputeChecksum(this);
+ computeChecksum->setChecksumType(theContentChecksumType);
+
+ connect(computeChecksum, SIGNAL(done(QByteArray,QByteArray)),
+ SLOT(contentChecksumComputed(QByteArray,QByteArray)));
+ computeChecksum->start(_tmpFile.fileName());
+}
+void PropagateDownloadFileQNAM::contentChecksumComputed(const QByteArray &checksumType, const QByteArray &checksum)
+{
+ _item->_contentChecksum = checksum;
+ _item->_contentChecksumType = checksumType;
+
+ downloadFinished();
+}
+
+void PropagateDownloadFileQNAM::downloadFinished()
+{
QString fn = _propagator->getFilePath(_item->_file);
// In case of file name clash, report an error
diff --git a/src/libsync/propagatedownload.h b/src/libsync/propagatedownload.h
index ba70d2a..32829fa 100644
--- a/src/libsync/propagatedownload.h
+++ b/src/libsync/propagatedownload.h
@@ -128,8 +128,9 @@ public:
private slots:
void slotGetFinished();
void abort() Q_DECL_OVERRIDE;
- void downloadFinished(const QByteArray& transportChecksumType = QByteArray(),
- const QByteArray &transportChecksum = QByteArray());
+ void transmissionChecksumValidated(const QByteArray& checksumType, const QByteArray& checksum);
+ void contentChecksumComputed(const QByteArray& checksumType, const QByteArray& checksum);
+ void downloadFinished();
void slotDownloadProgress(qint64,qint64);
void slotChecksumFail( const QString& errMsg );
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git
More information about the Pkg-owncloud-commits
mailing list