home *** CD-ROM | disk | FTP | other *** search
/ CLIX - Fazer Clix Custa Nix / CLIX-CD.cdr / mac / lib / auto / LWP / UserAgent / mirror.al < prev    next >
Text File  |  1997-12-13  |  1KB  |  46 lines

  1. # NOTE: Derived from :lib:LWP:UserAgent.pm.  Changes made here will be lost.
  2. package LWP::UserAgent;
  3.  
  4. sub mirror
  5. {
  6.     my($self, $url, $file) = @_;
  7.  
  8.     LWP::Debug::trace('()');
  9.     my $request = new HTTP::Request('GET', $url);
  10.  
  11.     if (-e $file) {
  12.     my($mtime) = (stat($file))[9];
  13.     if($mtime) {
  14.         $request->header('If-Modified-Since' =>
  15.                  HTTP::Date::time2str($mtime));
  16.     }
  17.     }
  18.     my $tmpfile = "$file-$$";
  19.  
  20.     my $response = $self->request($request, $tmpfile);
  21.     if ($response->is_success) {
  22.  
  23.     my $file_length = (stat($tmpfile))[7];
  24.     my($content_length) = $response->header('Content-length');
  25.  
  26.     if (defined $content_length and $file_length < $content_length) {
  27.         unlink($tmpfile);
  28.         die "Transfer truncated: " .
  29.         "only $file_length out of $content_length bytes received\n";
  30.     } elsif (defined $content_length and $file_length > $content_length) {
  31.         unlink($tmpfile);
  32.         die "Content-length mismatch: " .
  33.         "expected $content_length bytes, got $file_length\n";
  34.     } else {
  35.         # OK
  36.         rename($tmpfile, $file) or
  37.         die "Cannot rename '$tmpfile' to '$file': $!\n";
  38.     }
  39.     } else {
  40.     unlink($tmpfile);
  41.     }
  42.     return $response;
  43. }
  44.  
  45. 1;
  46.