bool FileServerTask::handleHttpRedirect() { QVariant redirect_attr = reply_->attribute(QNetworkRequest::RedirectionTargetAttribute); if (redirect_attr.isNull()) { return false; } if (redirect_count_++ > kMaxRedirects) { // simply treat too many redirects as server side error setHttpError(500); emit finished(false); qWarning("too many redirects for %s\n", toCStr(reply_->url().toString())); return true; } url_ = redirect_attr.toUrl(); if (url_.isRelative()) { url_ = reply_->url().resolved(url_); } qWarning("redirect to %s (from %s)\n", toCStr(url_.toString()), toCStr(reply_->url().toString())); reply_->deleteLater(); sendRequest(); return true; }
void FileServerTask::httpRequestFinished() { if (canceled_) { setError(FileNetworkTask::TaskCanceled, tr("task cancelled")); emit finished(false); return; } int code = reply_->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); if (code == 0 && reply_->error() != QNetworkReply::NoError) { NetworkStatusDetector::instance()->setNetworkFailure(); qWarning("[file server task] network error: %s\n", toCStr(reply_->errorString())); if (!maybeRetry()) { setError(FileNetworkTask::ApiRequestError, reply_->errorString()); emit finished(false); return; } return; } if (handleHttpRedirect()) { return; } if ((code / 100) == 4 || (code / 100) == 5) { qWarning("request failed for %s: status code %d\n", toCStr(reply_->url().toString()), code); if (!maybeRetry()) { setHttpError(code); emit finished(false); return; } return; } onHttpRequestFinished(); }
void FileServerTask::httpRequestFinished() { int code = reply_->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); if (code == 0 && reply_->error() != QNetworkReply::NoError) { qWarning("[file server task] network error: %s\n", toCStr(reply_->errorString())); setError(FileNetworkTask::ApiRequestError, reply_->errorString()); emit finished(false); return; } if (handleHttpRedirect()) { return; } if ((code / 100) == 4 || (code / 100) == 5) { qWarning("request failed for %s: status code %d\n", toCStr(reply_->url().toString()), code); setHttpError(code); emit finished(false); return; } onHttpRequestFinished(); }