-sub run {
- my $self = shift;
- return $self->handler();
-}
-
-sub get_request {
- shift->{cgi} = CGI::Simple->new();
-}
-
-
-sub parse_location {
- my $self = shift;
- my $cgi = $self->{cgi};
-
- # Reconstruct the request headers (as far as this is possible)
- $self->headers_in(Maypole::Headers->new);
- for my $http_header ($cgi->http) {
- (my $field_name = $http_header) =~ s/^HTTPS?_//;
- $self->headers_in->set($field_name => $cgi->http($http_header));
- }
-
- $self->{path} = $cgi->url( -absolute => 1, -path_info => 1 );
- my $loc = $cgi->url( -absolute => 1 );
- no warnings 'uninitialized';
- $self->{path} .= '/' if $self->{path} eq $loc;
- $self->{path} =~ s/^($loc)?\///;
- $self->parse_path;
- $self->parse_args;
-}
-
-sub parse_args {
- my $self = shift;
- my (%vars) = $self->{cgi}->Vars;
- while ( my ( $key, $value ) = each %vars ) {
- my @values = split "\0", $value;
- $vars{$key} = @values <= 1 ? $values[0] : \@values;
- }
- $self->{params} = {%vars};
- $self->{query} = {%vars};
-}
-
-sub send_output {
- my $r = shift;
-
- # Collect HTTP headers
- my %headers = (
- -type => $r->{content_type},
- -charset => $r->{document_encoding},
- -content_length => do { use bytes; length $r->{output} },
- );
- foreach ($r->headers_out->field_names) {
- next if /^Content-(Type|Length)/;
- $headers{"-$_"} = $r->headers_out->get($_);
- }
-
- print $r->{cgi}->header(%headers), $r->{output};
-}
-
-sub get_template_root {
- my $r = shift;
- $r->{cgi}->document_root . "/" . $r->{cgi}->url( -relative => 1 );
-}
-
-1;