|
@@ -188,7 +188,6 @@ void HttpSkipResponseCommand::poolConnection() const
|
|
|
|
|
|
bool HttpSkipResponseCommand::processResponse()
|
|
bool HttpSkipResponseCommand::processResponse()
|
|
{
|
|
{
|
|
- int statusCode;
|
|
|
|
if(httpResponse_->isRedirect()) {
|
|
if(httpResponse_->isRedirect()) {
|
|
int rnum =
|
|
int rnum =
|
|
httpResponse_->getHttpRequest()->getRequest()->getRedirectCount();
|
|
httpResponse_->getHttpRequest()->getRequest()->getRedirectCount();
|
|
@@ -198,42 +197,43 @@ bool HttpSkipResponseCommand::processResponse()
|
|
}
|
|
}
|
|
httpResponse_->processRedirect();
|
|
httpResponse_->processRedirect();
|
|
return prepareForRetry(0);
|
|
return prepareForRetry(0);
|
|
- } else if((statusCode = httpResponse_->getStatusCode()) >= 400) {
|
|
|
|
- if(statusCode == 401) {
|
|
|
|
- if(getOption()->getAsBool(PREF_HTTP_AUTH_CHALLENGE) &&
|
|
|
|
- !httpResponse_->getHttpRequest()->authenticationUsed() &&
|
|
|
|
- getDownloadEngine()->getAuthConfigFactory()->activateBasicCred
|
|
|
|
- (getRequest()->getHost(), getRequest()->getPort(),
|
|
|
|
- getRequest()->getDir(), getOption().get())) {
|
|
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ auto statusCode = httpResponse_->getStatusCode();
|
|
|
|
+ if (statusCode >= 400) {
|
|
|
|
+ switch (statusCode) {
|
|
|
|
+ case 401:
|
|
|
|
+ if (getOption()->getAsBool(PREF_HTTP_AUTH_CHALLENGE) &&
|
|
|
|
+ !httpResponse_->getHttpRequest()->authenticationUsed() &&
|
|
|
|
+ getDownloadEngine()->getAuthConfigFactory()->activateBasicCred(
|
|
|
|
+ getRequest()->getHost(), getRequest()->getPort(),
|
|
|
|
+ getRequest()->getDir(), getOption().get())) {
|
|
return prepareForRetry(0);
|
|
return prepareForRetry(0);
|
|
- } else {
|
|
|
|
- throw DL_ABORT_EX2(EX_AUTH_FAILED,
|
|
|
|
- error_code::HTTP_AUTH_FAILED);
|
|
|
|
}
|
|
}
|
|
- } else if(statusCode == 404) {
|
|
|
|
- if(getOption()->getAsInt(PREF_MAX_FILE_NOT_FOUND) == 0) {
|
|
|
|
|
|
+ throw DL_ABORT_EX2(EX_AUTH_FAILED, error_code::HTTP_AUTH_FAILED);
|
|
|
|
+ case 404:
|
|
|
|
+ if (getOption()->getAsInt(PREF_MAX_FILE_NOT_FOUND) == 0) {
|
|
throw DL_ABORT_EX2(MSG_RESOURCE_NOT_FOUND,
|
|
throw DL_ABORT_EX2(MSG_RESOURCE_NOT_FOUND,
|
|
error_code::RESOURCE_NOT_FOUND);
|
|
error_code::RESOURCE_NOT_FOUND);
|
|
}
|
|
}
|
|
throw DL_RETRY_EX2(MSG_RESOURCE_NOT_FOUND,
|
|
throw DL_RETRY_EX2(MSG_RESOURCE_NOT_FOUND,
|
|
error_code::RESOURCE_NOT_FOUND);
|
|
error_code::RESOURCE_NOT_FOUND);
|
|
- } else if(statusCode == 503) {
|
|
|
|
|
|
+ case 503:
|
|
// Only retry if pretry-wait > 0. Hammering 'busy' server is not
|
|
// Only retry if pretry-wait > 0. Hammering 'busy' server is not
|
|
// a good idea.
|
|
// a good idea.
|
|
- if(getOption()->getAsInt(PREF_RETRY_WAIT) > 0) {
|
|
|
|
|
|
+ if (getOption()->getAsInt(PREF_RETRY_WAIT) > 0) {
|
|
throw DL_RETRY_EX2(fmt(EX_BAD_STATUS, statusCode),
|
|
throw DL_RETRY_EX2(fmt(EX_BAD_STATUS, statusCode),
|
|
error_code::HTTP_SERVICE_UNAVAILABLE);
|
|
error_code::HTTP_SERVICE_UNAVAILABLE);
|
|
- } else {
|
|
|
|
- throw DL_ABORT_EX2(fmt(EX_BAD_STATUS, statusCode),
|
|
|
|
- error_code::HTTP_SERVICE_UNAVAILABLE);
|
|
|
|
}
|
|
}
|
|
- } else {
|
|
|
|
throw DL_ABORT_EX2(fmt(EX_BAD_STATUS, statusCode),
|
|
throw DL_ABORT_EX2(fmt(EX_BAD_STATUS, statusCode),
|
|
- error_code::HTTP_PROTOCOL_ERROR);
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- return prepareForRetry(0);
|
|
|
|
|
|
+ error_code::HTTP_SERVICE_UNAVAILABLE);
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ throw DL_ABORT_EX2(fmt(EX_BAD_STATUS, statusCode),
|
|
|
|
+ error_code::HTTP_PROTOCOL_ERROR);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ return prepareForRetry(0);
|
|
}
|
|
}
|
|
|
|
|
|
void HttpSkipResponseCommand::disableSocketCheck()
|
|
void HttpSkipResponseCommand::disableSocketCheck()
|