Apache2-SSI
view release on metacpan or search on metacpan
lib/Apache2/SSI.pm view on Meta::CPAN
}
my( $key, $val );
my $headers = {};
while( $buf =~ s/([^\012]*)\012// )
{
my $line = $1;
# if we need to restore as content when illegal headers are found.
my $save = "$line\012";
$line =~ s/\015$//;
last unless( length( $line ) );
if( $line =~ /^([a-zA-Z0-9_\-.]+)\s*:\s*(.*)/ )
{
# $response->push_header( $key, $val ) if( $key );
$headers->{ $key } = $val if( $key );
( $key, $val ) = ( $1, $2 );
}
elsif( $line =~ /^\s+(.*)/ && $key )
{
$val .= " $1";
}
else
{
# $response->push_header( "Client-Bad-Header-Line" => $line );
$headers->{ 'Client-Bad-Header-Line' } = $line;
}
}
# $response->push_header( $key, $val ) if( $key );
$headers->{ $key } = $val if( $key );
return( $buf );
}
}
sub parse_expr
{
my $self = shift( @_ );
my $text = shift( @_ );
my $opts = $self->_get_args_as_hash( @_ );
$opts->{embedded} = 0 if( !exists( $opts->{embedded} ) );
$opts->{_depth} = ( $opts->{_depth} || 0 ) + 1;
return( $self->error( "Too deep recursion in parse_expr( '$text' )" ) ) if( $opts->{_depth} > 20 );
$opts->{_seen} ||= {};
return( $text ) if( ++$opts->{_seen}->{ $text } > 1 );
my $r = $self->apache_request;
my $env = $self->env;
my $prev_regexp_capture = $self->{_regexp_capture};
unless( $self->{_exp} )
{
$self->{_exp} = Apache2::Expression->new( legacy => 1, debug => $self->debug );
}
my $exp = $self->{_exp};
my $hash = {};
local $@;
# try-catch
eval
{
local $SIG{ALRM} = sub{ die( "Timeout!\n" ) };
alarm(90);
$hash = $exp->parse( $text );
alarm(0);
};
if( $@ )
{
return( $self->error( "Error parsing expression '$text': $@" ) );
}
my $res = [];
$opts->{top} = 1;
$opts->{_seen} = {} if( $opts->{top} );
foreach my $this ( @{$hash->{elements}} )
{
my $res2 = $self->ap2perl_expr( $this, [], $opts );
push( @$res, @$res2 );
}
return( join( ' ', @$res ) );
}
sub parse_expr_args
{
my $self = shift( @_ );
my $args = shift( @_ );
return( $self->error( "I was expecting an array reference, but instead got '$args'." ) ) if( !$self->_is_array( $args ) );
my $buff = [];
my $prev_regexp_capture = $self->{_regexp_capture};
my $r = $self->apache_request;
my $env = $self->env;
foreach my $this ( @$args )
{
my $res = $self->ap2perl_expr( $this, [] );
push( @$buff, @$res ) if( $res );
}
return( join( ', ', @$buff ) );
}
sub parse_flastmod
{
my( $self, $args ) = @_;
my $p = $self->find_file( $args );
unless( $p->code == 200 )
{
return( $self->errmsg );
}
return( $self->_lastmod( $p, $args->{timefmt} || $self->{timefmt} ) );
}
sub parse_fsize
{
my( $self, $args ) = @_;
my $f = $self->find_file( $args );
unless( $f->code == 200 )
{
return( $self->errmsg );
}
my $finfo = $f->finfo;
my $size = $finfo->size;
my $n = Module::Generic::Number->new( $size );
if( $self->{sizefmt} eq 'bytes' )
{
( run in 1.871 second using v1.01-cache-2.11-cpan-39bf76dae61 )