diff options
Diffstat (limited to 'perl-install/install/http.pm')
| -rw-r--r-- | perl-install/install/http.pm | 74 | 
1 files changed, 32 insertions, 42 deletions
| diff --git a/perl-install/install/http.pm b/perl-install/install/http.pm index cacce8b0d..db111564c 100644 --- a/perl-install/install/http.pm +++ b/perl-install/install/http.pm @@ -1,23 +1,18 @@ -package install::http; # $Id$ +package install::http; -use IO::Socket; - -my $sock; - - -sub close() { -    $sock->close if $sock; -} +use urpm::download; +use common; +use Cwd;  sub getFile { -    my ($url) = @_; -    my ($_size, $fh) = get_file_and_size($url) or return; +    my ($url, %o_options) = @_; +    my ($_size, $fh) = get_file_and_size($url, %o_options) or return;      $fh;  }  sub parse_http_url {      my ($url) = @_; -    $url =~ m,^(?:http|ftp)://([^/:]+)(?::(\d+))?(/\S*)?$,; +    $url =~ m,^(?:https?|ftp)://(?:[^:/]+:[^:/]+\@)?([^/:@]+)(?::(\d+))?(/\S*)?$,;  }  sub get_file_and_size_ { @@ -32,43 +27,38 @@ sub get_file_and_size_ {  }  sub get_file_and_size { -    local ($^W) = 0; - -    my ($url) = @_; -    $sock->close if $sock; +    my ($url, %o_options) = @_;      # 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", -		     "", ""); +    my $urpm = $::o->{packages}; +    if (!$urpm) { +        require install::pkgs; +        $urpm = install::pkgs::empty_packages($::o->{keep_unrequested_dependencies}); +	$urpm->{options}{'curl-options'} = '-s'; +    } -    #- 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; +    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 = eval { urpm::download::sync_url($urpm, $url, %o_options, dir => $cachedir) }; -    if ($tmp =~ /^(.*\b(\d+)\b.*)/ && $2 == 200) { -	my ($size) = $tmp =~ /^Content-Length:\s*(\d+)\015?$/m; -	$size, $sock; +    if ($res) { +        open(my $f, $file); +        (-s $file, $f);      } else { -	log::l("HTTP error: $1"); +        log::l("retrieval of [$file] failed");          undef;      }  } | 
