flag_truncs.pl
上传用户:liugui
上传日期:2007-01-04
资源大小:822k
文件大小:2k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. #!/usr/local/bin/perl
  2. # flag_truncs.pl - martin hamilton <m.t.hamilton@lut.ac.uk>
  3. #
  4. # Check the CERN/Harvest/Netscape cache for truncated objects
  5. # - i.e. those for which there is a "Content-length:" HTTP header,
  6. #   and this does not match the size of the cached object
  7. # $Id: flag_truncs.pl,v 1.1.1.1 1996/02/22 06:23:57 wessels Exp $
  8. require "getopts.pl";
  9. require "stat.pl";
  10. &Getopts("cd");
  11. # -c -> just count the number of objects with a Content-length header
  12. # -d -> turn on debugging output
  13. # pass filenames on command line or via STDIN
  14. @things = $#ARGV >= 0 ? @ARGV : <STDIN>; 
  15. $total_objects = 0, $content_length = 0;
  16. # iterate through them
  17. foreach $thing (@things) {
  18.   chop $thing;
  19.   $opt_d && (print STDERR ">> inspecting: $thingn");
  20.   next if -d "$thing"; # don't want directories
  21.   $size = (stat($thing))[$ST_SIZE]||next;
  22.   $opt_d && (print STDERR ">> stat: $sizen");
  23.   print "$thingn", next if ($size == 0);
  24.   $total_objects++;
  25.   $count = 0, $expected = 0;
  26.   open(IN, "$thing") || die "Can't open cached object $thing: $!";
  27.   while(<IN>) {
  28.     $count += length($_);
  29.     chop;
  30.     print STDERR ">> inspecting $_n" if $opt_d;
  31.     last if /^(s+|)$/; # drop out after the end of the HTTP headers
  32.     # skip if cached file appeared since script started running
  33.     if (-M $_ < 0) {
  34.       print STDERR ">> skipping $_n" if $opt_d;
  35.       next;
  36.     }
  37.     
  38.     if (/^Content-length:s+(d+)/i) {
  39.       $expected = $1;
  40.       $content_length++;
  41.     }
  42.   }
  43.   close(IN);
  44.   next if $opt_c;
  45.   next if $expected == 0; # no Content-length header
  46.   # looked at the headers now
  47.   $difference = $size - $count;
  48.   $opt_d && print STDERR ">> real: ", $difference, ", expected: $expectedn";
  49.   if ($difference != $expected) {
  50.     print "$thing (expected: $expected, got: $difference)n";
  51.   }
  52. }
  53. print "$content_length out of $total_objects had Content-length: headern"
  54.   if $opt_c;