Hello Michael,
there was no special intention - I simple wanted to give the downloader more than just one chance to do it's job. For this I needed a value so I simple choosed "5".
But I'm also fine with "3" or any other suggestion.
Best regards,
-Stefan
Hello,
What is the rationale for five attempts? Why not three?
-Michael
On 23 Mar 2022, at 04:04, Stefan Schantl stefan.schantl@ipfire.org wrote:
Signed-off-by: Stefan Schantl stefan.schantl@ipfire.org
config/cfgroot/ids-functions.pl | 38 ++++++++++++++++++++++++------
1 file changed, 28 insertions(+), 10 deletions(-)
diff --git a/config/cfgroot/ids-functions.pl b/config/cfgroot/ids- functions.pl index eb276030b..c8bc52b1b 100644 --- a/config/cfgroot/ids-functions.pl +++ b/config/cfgroot/ids-functions.pl @@ -256,6 +256,10 @@ sub downloadruleset ($) { # If no provider is given default to "all". $provider //= 'all';
+ # The amount of download attempts before giving up and + # logging an error. + my $max_dl_attempts = 5;
# Hash to store the providers and access id's, for which rules should be downloaded. my %sheduled_providers = ();
@@ -364,19 +368,33 @@ sub downloadruleset ($) { # Pass the requested url to the downloader. my $request = HTTP::Request->new(GET => $url);
- # Perform the request and save the output into the tmpfile. - my $response = $downloader->request($request, $tmpfile); + my $dl_attempt = 1; + my $response;
- # Check if there was any error. - unless ($response->is_success) { - # Obtain error. - my $error = $response->content; + # Download and retry on failure. + while ($dl_attempt <= $max_dl_attempts) { + # Perform the request and save the output into the tmpfile. + $response = $downloader->request($request, $tmpfile);
- # Log error message. - &_log_to_syslog("Unable to download the ruleset. ($error)"); + # Check if the download was successfull. + if($response->is_success) { + # Break loop. + last;
- # Return "1" - false. - return 1; + # Check if we ran out of download re-tries. + } elsif ($dl_attempt eq $max_dl_attempts) { + # Obtain error. + my $error = $response->content;
+ # Log error message. + &_log_to_syslog("Unable to download the ruleset. ($error)");
+ # Return "1" - false. + return 1; + }
+ # Increase download attempt counter. + $dl_attempt++; }
# Obtain the connection headers.
2.30.2