summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThierry Vignaud <tv@mandriva.org>2009-04-08 11:54:20 +0000
committerThierry Vignaud <tv@mandriva.org>2009-04-08 11:54:20 +0000
commitf1c5acfa0a593ef6ac6cac6fa8d7fbaf7e8600af (patch)
treed65a4c4f77aa0169e65fa1f5f5c554ef860e5dac
parentbe1d6cb5d77de9e7c5ad33d7c4c39befdd258f70 (diff)
downloaddrakx-f1c5acfa0a593ef6ac6cac6fa8d7fbaf7e8600af.tar
drakx-f1c5acfa0a593ef6ac6cac6fa8d7fbaf7e8600af.tar.gz
drakx-f1c5acfa0a593ef6ac6cac6fa8d7fbaf7e8600af.tar.bz2
drakx-f1c5acfa0a593ef6ac6cac6fa8d7fbaf7e8600af.tar.xz
drakx-f1c5acfa0a593ef6ac6cac6fa8d7fbaf7e8600af.zip
(install::http::get_file_and_size) just use curl instead of using our
own http stack (thus fixing unable to set up network addittional media, #48887)
-rw-r--r--perl-install/install/NEWS2
-rw-r--r--perl-install/install/http.pm59
2 files changed, 23 insertions, 38 deletions
diff --git a/perl-install/install/NEWS b/perl-install/install/NEWS
index 4d58c8348..137205d66 100644
--- a/perl-install/install/NEWS
+++ b/perl-install/install/NEWS
@@ -1,5 +1,7 @@
- include vmmouse driver (#49654)
- media management:
+ o just use curl instead of using our own http stack to retrieve
+ files from network (thus fixing #48887)
o tell urpmi to read synthesis before adding supplementary network
media in order to be able to install the 'basesystem' package
diff --git a/perl-install/install/http.pm b/perl-install/install/http.pm
index cacce8b0d..a0c6b8175 100644
--- a/perl-install/install/http.pm
+++ b/perl-install/install/http.pm
@@ -1,12 +1,10 @@
package install::http; # $Id$
-use IO::Socket;
-
-my $sock;
-
+use urpm::download;
+use common;
+# to be killed once callers got fixed
sub close() {
- $sock->close if $sock;
}
sub getFile {
@@ -32,45 +30,30 @@ sub get_file_and_size_ {
}
sub get_file_and_size {
- local ($^W) = 0;
-
my ($url) = @_;
- $sock->close if $sock;
# can be used for ftp urls (with http proxy)
- my ($host, $port, $path) = parse_http_url($url);
+ my ($host) = parse_http_url($url);
defined $host or return undef;
- my $use_http_proxy = $ENV{PROXY} && $ENV{PROXYPORT};
-
- $sock = IO::Socket::INET->new(PeerAddr => $use_http_proxy ? $ENV{PROXY} : $host,
- PeerPort => $use_http_proxy ? $ENV{PROXYPORT} : $port || 80,
- Proto => 'tcp',
- Timeout => 60) or die "can not connect $@";
- $sock->autoflush;
- print $sock join("\015\012" =>
- "GET " . ($use_http_proxy ? $url : $path) . " HTTP/1.0",
- "Host: $host" . ($port && ":$port"),
- "User-Agent: DrakX/vivelinuxabaszindozs",
- "", "");
-
- #- skip until empty line
- my $now = 0;
- my ($last, $buf, $tmp);
- my $read = sub { sysread($sock, $buf, 1) or die ''; $tmp .= $buf };
- do {
- $last = $now;
- &$read; &$read if $buf =~ /\015/;
- $now = $buf =~ /\012/;
- } until $now && $last;
-
- if ($tmp =~ /^(.*\b(\d+)\b.*)/ && $2 == 200) {
- my ($size) = $tmp =~ /^Content-Length:\s*(\d+)\015?$/m;
- $size, $sock;
- } else {
- log::l("HTTP error: $1");
- undef;
+ my $urpm = $::o->{packages};
+ my $cachedir = $urpm->{cachedir} || '/root';
+ my $file = $url;
+ $file =~ s!.*/!$cachedir/!;
+ unlink $file; # prevent "partial file" errors
+
+ if ($ENV{PROXY}) {
+ my ($proxy, $port) = urpm::download::parse_http_proxy(join(':', $ENV{PROXY}, $ENV{PROXYPORT}))
+ or die "bad proxy declaration\n";
+ $proxy .= ":1080" unless $port;
+ urpm::download::set_cmdline_proxy(http_proxy => "http://$proxy/");
}
+
+ my $res = urpm::download::sync_url($urpm, $url, dir => $cachedir);
+ $res or die N("retrieval of [%s] failed", $file) . "\n";
+ log::l("using $file (" . -s $file . ")");
+ open(my $f, $file);
+ +( -s $file, $f);
}
1;