Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Goetz <markus@woboq.com>2013-11-25 22:00:34 +0400
committerMarkus Goetz <markus@woboq.com>2013-11-25 22:01:04 +0400
commitac8296fb942ff30943aed5b4126033b33be85335 (patch)
treecd406fd6bb25a81edb3f1752eeba9b2280a14c01 /src/mirall
parentf47ce2fea67fd9e3702634ee588fcef1137d042e (diff)
Propagator: Check E-Tag when resuming
Should fix #756
Diffstat (limited to 'src/mirall')
-rw-r--r--src/mirall/owncloudpropagator.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/mirall/owncloudpropagator.cpp b/src/mirall/owncloudpropagator.cpp
index b527948cf..f148fa982 100644
--- a/src/mirall/owncloudpropagator.cpp
+++ b/src/mirall/owncloudpropagator.cpp
@@ -519,6 +519,7 @@ private:
QIODevice *_file;
QScopedPointer<ne_decompress, ScopedPointerHelpers> _decompress;
QString errorString;
+ QByteArray _expectedEtagForResume;
static int content_reader(void *userdata, const char *buf, size_t len)
{
@@ -574,17 +575,28 @@ private:
return;
}
- const char *etag = ne_get_response_header( req, "ETag" );
- if (!etag) {
- qDebug() << Q_FUNC_INFO << "No E-Tag reply by server, considering it invalid";
+ QByteArray etag = parseEtag(req);
+ if (etag.isEmpty()) {
+ qDebug() << Q_FUNC_INFO << "No E-Tag reply by server, considering it invalid" << ne_get_response_header(req, "etag");
that->errorString = QLatin1String("No E-Tag received from server, check Proxy/Gateway");
ne_set_error(that->_propagator->_session, "No E-Tag received from server, check Proxy/Gateway");
ne_add_response_body_reader( req, do_not_accept,
do_not_download_content_reader,
(void*) that );
return;
+ } else if (!that->_expectedEtagForResume.isEmpty() && that->_expectedEtagForResume != etag) {
+ qDebug() << Q_FUNC_INFO << "We received a different E-Tag for resuming!"
+ << QString::fromLatin1(that->_expectedEtagForResume.data()) << "vs"
+ << QString::fromLatin1(etag.data());
+ that->errorString = QLatin1String("We received a different E-Tag for resuming. Retrying next time.");
+ ne_set_error(that->_propagator->_session, "We received a different E-Tag for resuming. Retrying next time.");
+ ne_add_response_body_reader( req, do_not_accept,
+ do_not_download_content_reader,
+ (void*) that );
+ return;
}
+
const char *enc = ne_get_response_header( req, "Content-Encoding" );
qDebug("Content encoding ist <%s> with status %d", enc ? enc : "empty",
status ? status->code : -1 );
@@ -624,6 +636,7 @@ void PropagateDownloadFile::start()
_propagator->_journal->setDownloadInfo(_item._file, SyncJournalDb::DownloadInfo());
} else {
tmpFileName = progressInfo._tmpfile;
+ _expectedEtagForResume = progressInfo._etag;
}
}