From: Christian Kamm Date: Wed, 2 Mar 2016 12:52:14 +0000 (+0100) Subject: Checksums: Content checksums for all uploads #4375 X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~1308^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=7ed7512f272caac5ad7668087259a46ed2873401;p=nextcloud-desktop.git Checksums: Content checksums for all uploads #4375 --- diff --git a/src/libsync/checksums.cpp b/src/libsync/checksums.cpp index 1e4e29539..99101fd24 100644 --- a/src/libsync/checksums.cpp +++ b/src/libsync/checksums.cpp @@ -114,6 +114,15 @@ bool downloadChecksumEnabled() return enabled; } +QByteArray contentChecksumType() +{ + static QByteArray type = qgetenv("OWNCLOUD_CONTENT_CHECKSUM_TYPE"); + if (!type.isNull()) { // can set to "" to disable checksumming + return type; + } + return "SHA1"; +} + ComputeChecksum::ComputeChecksum(QObject* parent) : QObject(parent) { diff --git a/src/libsync/checksums.h b/src/libsync/checksums.h index 30a040301..519c74b71 100644 --- a/src/libsync/checksums.h +++ b/src/libsync/checksums.h @@ -37,6 +37,10 @@ bool uploadChecksumEnabled(); /// Checks OWNCLOUD_DISABLE_CHECKSUM_DOWNLOAD bool downloadChecksumEnabled(); +/// Checks OWNCLOUD_CONTENT_CHECKSUM_TYPE (default: SHA1) +QByteArray contentChecksumType(); + + /** * Computes the checksum of a file. * \ingroup libsync diff --git a/src/libsync/propagateupload.cpp b/src/libsync/propagateupload.cpp index 1d76434cd..896cd4125 100644 --- a/src/libsync/propagateupload.cpp +++ b/src/libsync/propagateupload.cpp @@ -219,23 +219,18 @@ void PropagateUploadFileQNAM::slotComputeContentChecksum() _stopWatch.start(); - QByteArray contentChecksumType; - // We currently only do content checksums for the particular .eml case - // This should be done more generally in the future! - if (filePath.endsWith(QLatin1String(".eml"), Qt::CaseInsensitive)) { - contentChecksumType = "MD5"; - } + QByteArray checksumType = contentChecksumType(); // Maybe the discovery already computed the checksum? - if (_item->_contentChecksumType == contentChecksumType + if (_item->_contentChecksumType == checksumType && !_item->_contentChecksum.isEmpty()) { - slotComputeTransmissionChecksum(contentChecksumType, _item->_contentChecksum); + slotComputeTransmissionChecksum(checksumType, _item->_contentChecksum); return; } // Compute the content checksum. auto computeChecksum = new ComputeChecksum(this); - computeChecksum->setChecksumType(contentChecksumType); + computeChecksum->setChecksumType(checksumType); connect(computeChecksum, SIGNAL(done(QByteArray,QByteArray)), SLOT(slotComputeTransmissionChecksum(QByteArray,QByteArray)));