use protocol defined in server-list.db for mirror communication

For each mirror server, a protocol can be specified in the
server-list.db database. However, it was not used for the
actual URL query to a mirror before.

This might be useful for deploy HTTPS pinning for Pakfire.
If a mirror is known to support HTTPS, all queries to it
will be made with this protocol.

This saves some overhead if HTTPS is enforced on a mirror
via 301 redirects. To enable this, the server-list.db
needs to be adjusted.

The second version of this patch only handles protocols
HTTP and HTTPS, since we do not expect anything else here
at the moment.

Partially fixes #11661.

Signed-off-by: Peter Müller <peter.mueller@link38.eu>
Cc: Michael Tremer <michael.tremer@ipfire.org>
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
Peter Müller
2018-03-28 05:41:50 +02:00
committed by Michael Tremer
parent 9f0999325d
commit 66a0f3646a

View File

@@ -31,6 +31,8 @@ use HTTP::Message;
use HTTP::Request;
use Net::Ping;
use Switch;
package Pakfire;
# A small color-hash :D
@@ -172,7 +174,18 @@ sub fetchfile {
}
$final_data = undef;
my $url = "http://$host/$file";
my $url;
switch ($proto) {
case "HTTP" { $url = "http://$host/$file"; }
case "HTTPS" { $url = "https://$host/$file"; }
else {
# skip all lines with unknown protocols
logger("DOWNLOAD WARNING: Skipping Host: $host due to unknown protocol ($proto) in mirror database");
next;
}
}
my $response;
unless ($bfile =~ /^counter.py\?.*/) {