package Apache2::ASP::HTTPContext::SubContext; use strict; use warnings 'all'; use base 'Apache2::ASP::HTTPContext'; #============================================================================== sub new { my ($class, %args) = @_; die "Required param 'parent' was not provided" unless $args{parent}; die "Param 'parent' isn't a Apache2::ASP::HTTPContext" unless $args{parent}->isa( 'Apache2::ASP::HTTPContext' ); $class = ref($class) || $class; my $s = bless \%args, $class; $Apache2::ASP::HTTPContext::instance = $s; return $s; }# end new() #============================================================================== sub setup_request { my ($s, $requestrec, $cgi) = @_; $s->{r} = $requestrec; $s->{cgi} = $cgi; $s->{connection} = $s->r->connection; my $resolver = $s->config->web->handler_resolver; $s->_load_class( $resolver ); $s->{handler} = $resolver->new()->resolve_request_handler( $s->r->uri ); return 1; }# end setup_request() #============================================================================== sub execute { my ($s, $args) = @_; # local $SIG{__DIE__} = \&Carp::confess; $s->_load_class( $s->config->web->handler_runner ); eval { $s->_load_class( $s->handler ); $s->config->web->handler_runner->new()->run_handler( $s->handler, $args ); }; if( $@ ) { $s->server->{LastError} = $@; return $s->handle_error; }# end if() $s->response->Flush; my $res = $s->{parent} ? $s->response->Status : $s->end_request(); if( $s->page && $s->page->directives->{OutputCache} && defined($s->{_cache_buffer}) ) { if( $res == 200 || $res == 0 ) { $s->page->_write_cache( \$s->{_cache_buffer} ); }# end if() }# end if() $res = 0 if $res =~ m/^200/; return $res; }# end execute() #============================================================================== sub get_prop { my ($s, $prop) = @_; $s->{parent}->get_prop($prop); }# end get_prop() #============================================================================== sub set_prop { my ($s) = shift; my $prop = shift; $s->{parent}->set_prop($prop, @_); }# end set_prop() sub config { shift->get_prop('config') } sub session { shift->get_prop('session') } sub server { shift->get_prop('server') } sub request { shift->get_prop('request') } sub response { shift->get_prop('response') } sub application { shift->get_prop('application') } sub stash { shift->get_prop('stash') } sub global_asa { shift->get_prop('global_asa') } sub _is_setup { shift->get_prop('_is_setup') } #============================================================================== sub rflush { my $s = shift; $s->{r}->rflush(); }# end rflush() #============================================================================== sub DESTROY { my $s = shift; if( my $parent = $s->{parent} ) { $Apache2::ASP::HTTPContext::instance = $parent; }# end if() undef(%$s); }# end DESTROY() 1;# return true: