no
strict
qw(refs)
;
use
vars
qw(@Days @Months $AUTOLOAD $LOADED $COUNT)
;
@Days
=
qw(Sun Mon Tue Wed Thu Fri Sat)
;
@Months
=
qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
;
sub
new {
my
(
$file
) =
@_
;
bless
{
current_callback
=>
'PerlHandler'
,
filename
=>
$file
,
remote_ip
=>
'127.0.0.1'
,
user
=>
undef
,
method
=>
'GET'
,
NoState
=> 1,
headers_in
=> Apache::ASP::CGI::Table->new,
headers_out
=> Apache::ASP::CGI::Table->new,
dir_config
=> Apache::ASP::CGI::Table->new,
subprocess_env
=> Apache::ASP::CGI::Table->new,
};
}
sub
AUTOLOAD {
$AUTOLOAD
=~ s/^(.*)::([^:]*)$/$2/;
shift
->{
$AUTOLOAD
};
}
sub
log_error {
shift
;
my
@times
=
localtime
;
printf
STDERR (
'[%s %s %02d %02d:%02d:%02d %d] [error] %s'
.
"\n"
,
$Days
[
$times
[6]],
$Months
[
$times
[4]],
$times
[3],
$times
[2],
$times
[1],
$times
[0],
$times
[5] + 1900,
join
(
''
,
@_
),
);
}
sub
connection {
shift
; }
sub
Run {
shift
if
(
ref
$_
[0] or
$_
[0] eq
'Apache::ASP'
);
local
$SIG
{__WARN__} = \
&Apache::ASP::Warn
;
my
(
$file
,
$match
,
%args
) =
@_
;
unless
(-e
$file
) {
warn
(
"$file does not exist for loading"
);
return
;
}
$match
||=
'.*'
;
if
(-d
$file
&& ! -l
$file
) {
$file
=~ s|/$||;
opendir
(DIR,
$file
) ||
die
(
"can't open $file for reading: $!"
);
my
@files
=
readdir
(DIR);
close
DIR;
unless
(
@files
) {
Apache::ASP::Load->log_error(
"[asp] $$ [WARN] can't read files in $file"
);
return
;
}
my
$top
;
if
(!
defined
$LOADED
) {
$top
= 1;
}
defined
$LOADED
or (
local
$LOADED
= 0);
defined
$COUNT
or (
local
$COUNT
= 0);
for
(
@files
) {
chomp
;
next
if
/^\.\.?$/;
&Run
(
"$file/$_"
,
$match
,
%args
);
}
if
(
$top
) {
Apache::ASP::Load->log_error(
"[asp] $$ (re)compiled $LOADED scripts of $COUNT loaded for $file"
);
}
return
;
}
unless
(
$file
=~ /
$match
/) {
if
(
$args
{Debug} and
$args
{Debug} < 0) {
Apache::ASP::Load->log_error(
"skipping compile of $file no match $match"
);
}
return
;
}
unless
(
$file
=~ /
$match
/) {
if
(
$args
{Debug} < 0) {
warn
(
"skipping compile of $file no match $match"
);
}
return
;
}
my
$r
= Apache::ASP::Load::new(
$file
);
for
my
$key
(
qw( Debug StatINC StatINCMatch )
,
@{Apache::ASP->CompileChecksumKeys}
)
{
$r
->dir_config->set(
$key
,
$args
{
$key
});
}
$r
->dir_config->set(
'NoState'
, 1);
$r
->dir_config->set(
'RegisterIncludes'
, 1);
if
((
defined
$args
{
'RegisterIncludes'
})) {
$r
->dir_config->set(
'RegisterIncludes'
,
$args
{
'RegisterIncludes'
});
}
eval
{
$COUNT
++;
my
$asp
= Apache::ASP->new(
$r
);
if
((
$COUNT
== 1) && (
$asp
->config(
'StatINC'
) ||
$asp
->config(
'StatINCMatch'
))) {
$asp
->StatINC;
}
my
$rv
=
$asp
->CompileInclude(
$asp
->{
'basename'
})
||
die
($@);
if
(
$args
{
'Execute'
}) {
local
*Apache::ASP::Response::Flush
=
sub
{};
$asp
->Run;
}
$asp
->DESTROY;
$LOADED
++;
};
$@ &&
warn
($@);
return
$LOADED
;
}
1;