Name:
	RequestLog
FullName:
	Logging HTTP Header Field Body Value in the Request
URI:
	IW:SuikaWiki:"Wiki//Log"

Description:
	Implementation of this module is temporary.
	Reimplementation is needed!

MODULE:
	our $LoggingName;
	sub add ($$) {
	  my ($name, $s) = @_;
	  return unless length $s;
	  $s =~ s/([^\x20-\x24\x26-\x5A\x5C-\x7E])/sprintf '%%%02X', unpack 'C', $1/ge;
	      $s =~ s/(bypass-client=\d+\.\d+\.)(\d+)\.(\d+)/$1.'[VAR['.('*' x length $2).']].[VAR['.('*' x length $3).']]'/ge;
	      $s =~ s/[0-5]\d:[0-5]\d:[0-5]\d GMT/[VAR[**]]:[VAR[**]]:[VAR[**]] GMT/g;
	      $s =~ s/, (?:[012]\d|3[01])(?=[ -][JFMASOND])/, [VAR[**]] /g;
	      $s =~ s/; length=([0-9]+)/'; length=[VAR['.('*' x length $1).']]'/ge;
	  my %ua;
	  for (split /\n/, $main::database{$main::PageName{'Log_'.$name}}) {
	    if (/^-\{(\d+)\} (.+)$/) {
	      my ($t, $n) = ($1, $2);
	      $n =~ tr/\x0A\x0D//d;
	      $ua{$n} = $t;
	    }
	  }
	  $ua{$s}++;
	  my $s = qq(#?SuikaWiki/0.9 interactive="yes"\n);
	  for (sort {$ua{$a} <=> $ua{$b}} keys %ua) {
	    $s .= sprintf qq(-{%d} %s\n), $ua{$_}, $_;
	  }
	  SuikaWiki::Plugin->_database->STORE ($main::PageName{'Log_'.$name} => $s, -touch => 0);
	}
	
	my $year = (gmtime)[5] + 1900;
	my @fields = (
	    [qw/ACCEPT AcceptType/],
	    [qw/ACCEPT_CHARSET AcceptCharset/],
	    [qw/ACCEPT_ENCODING AcceptEncoding/],
	    [qw/ACCEPT_LANGUAGE AcceptLanguage/],
	    [qw/TE AcceptTransferEncoding/],
	    [qw/CONNECTION Connection/],
	    [qw/ACCEPT_GEO AcceptGeo/],
	    [qw/KEEP_ALIVE KeepAlive/],
	    [qw/MIME_VERSION MIMEVersion/],
	    [qw/UA_COLOR UserAgentDisplayColor/],
	    [qw/UA_CPU UserAgentCPU/],
	    [qw/UA_OS UserAgentOS/],
	    [qw/UA_PIXELS UserAgentDisplaySize/],
	    [qw/CACHE_CONTROL CacheControl/],
	    [qw/PRAGMA Pragma/],
	    [qw/IF_MODIFIED_SINCE IMS/],
	    [qw/XONNECTION Xonnection:/],
	    [qw/XROXY_CONNECTION Xroxy-Connection:/],
	    [qw/UNLESS_MODIFIED_SINCE Unless-Modified-Since/],
	    [qw/XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX:/],
	    [qw/XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX:/],
	    [qw/RANGE Range:/],
	    [qw/REQUEST_RANGE Request-Range/],
	    [qw/FROM From:/],
	    [qw/DATE Date:/],
	    [qw/CONTENT_TRANSFER_ENCODING CTE/],
	    [qw/CONTENT_LANGUAGE Content-Language/],
	    [qw/CONTENT_DISPOSITION Content-Disposition/],
	    [qw/REFERRER Referrer/],
	    [qw/CONTENT_ENCODING Content-Encoding/],
	    [qw/CONTENT_FEATURES Content-Feature/],
	    [qw/ACCEPT_FEATURES Accept-Features/],
	    [qw/TRANSFER_ENCODING Transfer-Encoding/],
	    [qw/CONTENT_VERSION Content-Version/],
	    [qw/DERIVED_FROM Derived-From/],
	    [qw/IF_MATCH If-Match/],
	    [qw/IF_NONE_MATCH If-None-Match/],
#	    [qw/ /],
#	    [qw/ /],
#	    [qw/ /],
	  );
	  for (@fields) {
	    $main::PageName{'Log_'.$_->[0]} = 'Wiki//Log//'.$_->[1].'//'.$year;
	  }
	  $main::PageName{Log_CONTENT_TYPE} = 'Wiki//Log//ContentType//'.$year;
	  $main::PageName{Log_REQUEST_METHOD} = 'Wiki//Log//RequestMethod//'.$year;
	  push @{$SuikaWiki::Plugin::On{WikiDatabaseLoaded}}, sub {
	    for (map {$_->[0]} @fields) {
	      my $v = $main::ENV{'HTTP_'.$_};
	      add ($_ => $v);
	    }
	    add ('CONTENT_TYPE' => $main::ENV{CONTENT_TYPE});
	    add ('REQUEST_METHOD' => $main::ENV{REQUEST_METHOD});
	  };
	


POD:TO DO:
	- better storing format
	
	- Logging method should be more customizable (what mode? what's except?...)
POD:LICENSE:
	Copyright 2003 Wakaba <w@suika.fam.cx>
	
	%%GNUGPL2%%