package ftp;

use Net::FTP;

use install_any;
use log;

# non-rentrant!!

my $retr;

1;


sub new {
    my %options = (Passive => 1);
    $options{Firewall} = $ENV{PROXY} if $ENV{PROXY};
    $options{Port} = $ENV{PROXYPORT} if $ENV{PROXYPORT};
    my @l;
    unless ($ENV{HOST}) {
	# must be in kickstart, using URLPREFIX to find out information
	($ENV{LOGIN}, $ENV{PASSWORD}, $ENV{HOST}, $ENV{PREFIX}) = @l =
	  $ENV{URLPREFIX} =~ m|
       ://
       (?: ([^:]*)              # login
           (?: :([^@]*))?       # password
       @)?
       ([^/]*)                	# host
       /?(.*)			# prefix
      |x;
    }
    unless ($ENV{LOGIN}) {
	$ENV{LOGIN} = 'anonymous';
	$ENV{PASSWORD} = 'mdkinst@test';
    }

    my $host = $ENV{HOST};
    if ($host !~ /^[.\d]+$/) {
	$host = join ".", unpack "C4", (gethostbyname $host)[4];
    }

    my $ftp = Net::FTP->new($host, %options) or die;
    $ftp->login($ENV{LOGIN}, $ENV{PASSWORD}) or die;
    $ftp->binary;

    $ftp;
}


sub getFile($) {
    $ftp ||= new();
    $retr->close if $retr;
    $retr = $ftp->retr($ENV{PREFIX} . "/" . install_any::relGetFile($_[0]));
}