#!/usr/bin/perl -w
-use Encode;
use File::Basename;
use Cwd 'abs_path';
use I18N::Langinfo qw'langinfo CODESET';
die "$0: no $FEXLIB\n" unless -d $FEXLIB;
# import from fex.pp
-our ($logdir,$spooldir,$debug);
+our (@logdir,$spooldir,$debug);
# load common code, local config : $HOME/lib/fex.ph
require "$FEXLIB/fex.pp" or die "$0: cannot load $FEXLIB/fex.pp - $!\n";
$CTYPE = langinfo(CODESET());
binmode(STDOUT,":encoding($CTYPE)");
-$log = shift || "$logdir/fexsrv.log";
+$log = shift || $logdir[0].'/fexsrv.log';
$ignore = join('|',qw(
(CONNECT|CONTINUE).*(crawl|msnbot|obertux)
GET./fup\?showstatus
GET./FAQ/faq\.css
GET./FAQ/jquery\.js
- GET./10+.B
GET.*Arrow\.gif
GET./apple-touch
+ GET./browserconfig\.xml
User-Agent:.*(Webnote|FeedFetcher|\w+bot|bot/|Website.Watcher|crawler|spider|searchme|Yandex|Slurp|ScoutJet|findlinks|urlmon|nagios)
User-Agent:.fnb.*quak
From:.*(msnbot|yandex|googlebot|webcrawler)
printf " TO=\"%s\"\n",$to;
$cgi = '';
if ($comment = slurp("$ddir/comment")) {
- printf " COMMENT=\"%s\"\n",decode_utf8($comment,0)||'';
+ printf " COMMENT=\"%s\"\n",utf8decode($comment)||'';
}
if (not -f "$ddir/data" and $_ = slurp("$ddir/error")) {
s/\n.*//s;
read_skey($1);
print "\n";
}
+ if ($debug and $pid and $cgi) {
+ &read_debug_log;
+ };
+ $pid = $cgi = '';
}
sleep 1;
- if ($debug and $pid and $cgi) {
- &read_debug_log;
- $pid = $cgi = '';
- };
}
for (1..2) {
sleep 1;
- @log = `ls -rt $logdir/.debug/*_${pid}.$cgi 2>/dev/null`;
+ @log = `ls -rt $logdir[0]/.debug/*_${pid}.$cgi 2>/dev/null`;
if ($log = $log[-1] and open $log,$log) {
# binmode($log,":encoding(UTF-8)");
while (<$log>) {
$_ = <$log>;
my $v = <$log>||'';
$v =~ s/[\r\n]+//;
- printf " %s=\"%s\"\n",$p,decode_utf8($v,0)||$v if $v;
+ printf " %s=\"%s\"\n",$p,utf8decode($v)||$v if $v;
read_akey($v) if $p eq 'AKEY';
read_skey($v) if $p eq 'SKEY';
} elsif (/^(Param|Exp): (\w+=".+")/) {
close $skey;
}
}
+
+
+sub utf8decode {
+ local $_ = shift;
+ s/([\xC0-\xDF])([\x80-\xBF])/chr(ord($1)<<6&0xC0|ord($2)&0x3F)/eg;
+ return $_;
+}