webengine/osswebengine/cache/cache_check.pl
changeset 10 a359256acfc6
child 15 60c5402cb945
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/cache/cache_check.pl	Thu Aug 27 07:44:59 2009 +0300
@@ -0,0 +1,181 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+#!/usr/bin/perl
+
+#use Encode;
+
+# open index file
+open INH,'<','\epoc32\winscw\c\system\cache\index.dat' or die "couldn't open index.dat";
+binmode INH;
+
+my @missing_files;
+my @missing_urls;
+
+my @cache_uris;
+my @cache_files;
+
+my @dir_items = GetDirContents();
+my @cache_content = ParseCacheIndex();
+my @extra_files;
+GetExtraFiles();
+
+$count = 0;
+print "\n\nMissing Items:\n";
+foreach (@missing_files) {
+  print "$_ - $missing_urls[$count++]\n";
+}
+
+print "\n\nExtra Files:\n";
+foreach (@extra_files) {
+  print "$_\n";
+}
+
+
+
+
+sub GetDirContents
+{
+  my @subdirectories = ( "0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f" );
+  my @diritems = ();
+  $index=0;
+  foreach (@subdirectories) 
+  {
+    opendir DIRHANDLE,"\\epoc32\\winscw\\c\\system\\cache\\@subdirectories[$index++]" or die "couldn't open cache directory";
+    my @tmp = readdir DIRHANDLE;
+    push @diritems, @tmp;
+  }
+
+  return @diritems;
+}
+
+sub ParseCacheIndex
+{
+  $filenames;
+  $numEntries = GetNumEntries();
+
+  print "Index contains $numEntries items\n";
+
+  while($numEntries)
+  {
+    @urifilenamearray = GetNextFilename();
+    print "@urifilenamearray[1] - @urifilenamearray[0]\n";
+    push @filenames, @urifilenamearray[0];
+    push @filenames, @urifilenamearray[1];
+    $numEntries--;
+    CheckFilePresent(@urifilenamearray[1], @urifilenamearray[0]);
+    push @cache_files, @urifilenamearray[1];
+    push @cache_urls, @urifilenamearray[0];
+  }  
+
+  return @filenames;
+}
+
+sub GetNumEntries
+{
+  read (INH, $buffer, 4);  #throw away version number
+  read (INH, $buffer, 4);  # read num of 16-bit chars in dir stub
+  $charcount = unpack("l",$buffer);
+  read (INH, $buffer, $charcount*2); #throw away dir stub
+  read (INH, $buffer, 4); # read entry count
+  $value = unpack("l",$buffer);
+  return $value;
+}
+
+sub GetNextFilename
+{
+  my @return = ();
+
+  read (INH, $buffer, 4);
+  # get URI
+  $stringlen = unpack("l",$buffer);
+  read (INH, $buffer, $stringlen);
+
+  @return[0] = $buffer;
+#  print "$stringlen chars in URI:\n$buffer\n";
+
+  # get unicode filename
+#  read (INH, $buffer, 4);
+#  $stringlen = unpack("l", $buffer);
+
+  $stringlen = 8;
+  my @filename_array = ();
+  if($stringlen)
+  {
+    # convert $buffer from unicode to ascii
+    while($stringlen) {
+      read (INH, $buffer, 2);
+      $string = unpack("a",$buffer);
+      #print "$string";
+      push @filename_array, $string;
+      $stringlen--;
+    }
+  }
+  @return[1] = join '',@filename_array;
+  #print "\n\n";
+  # gobble rest of item up to header data
+  read (INH, $buffer, 24);
+
+  read (INH, $buffer, 4);
+  $stringlen = unpack("l",$buffer);
+  read (INH, $buffer, $stringlen);	# throw away header data.
+
+  return @return;
+}
+
+sub CheckFilePresent()
+{
+  my $filename = $_[0];
+  my $url = $_[1];
+  
+  my $fqname = "\\epoc32\\winscw\\c\\system\\cache\\". (substr $filename, -1, 1) . "\\" . $filename;
+  
+  my $FILE;
+  open FILE, $fqname or MissingItem($filename, $url);
+}
+
+sub MissingItem()
+{
+  push @missing_files, $_[0];
+  push @missing_urls,  $_[1];
+}
+
+sub GetExtraFiles()
+{
+  # dir_items contains list of all filenames in all directories.
+  my $dirnum = -1;
+  my @dirnames = ( "0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f" );
+  
+  foreach $item (@dir_items)
+  {
+    my $match = 0;
+    if($item eq '.')
+    {
+      $dirnum++;
+    }
+    elsif($item ne '..') # filter out directories
+    {
+      foreach (@cache_files)
+      {
+        $match = 1 if($_ eq $item);
+      }
+      if($match == 0)
+      {
+        my $fqname = "\\epoc32\\winscw\\c\\system\\cache\\".@dirnames[$dirnum]."\\".$item;
+        push @extra_files, $fqname;
+      }
+    }
+  }
+}
\ No newline at end of file