Greetings. Below is what I've done to port Mason(CVS version)'s
ApacheHandler to Apache2; it deals mostly with the args-parsing
incompatibilities and changed method names.

I think some of these chunks will need some work to maintain
mod_perl 1.x compatibility, but as I don't have version 1 right
now, here's the preliminary results.

Thanks,
/Autrijus/

--- /home/autrijus/mason/dist/lib/HTML/Mason/ApacheHandler.pm   Tue Apr 16 12:56:02 
2002
+++ RT/MasonApacheHandler.pm    Fri May 24 00:05:50 2002
@@ -492,7 +507,7 @@
     }
 
     # If we're running as superuser, change file ownership to http user & group
-    if (!($> || $<) && $self->interp->files_written)
+    if (!($> || $<) && $self->interp->files_written and Apache->server->can('uid'))
     {
        chown Apache->server->uid, Apache->server->gid, $self->interp->files_written
            or system_error( "Can't change ownership of files written by interp 
object: $!\n" );
@@ -696,7 +711,7 @@
     #
     my (%args, $cgi_object);
     if ($self->args_method eq 'mod_perl') {
-       $r = Apache::Request->new($r);
+       $r = Apache->request($r);
        %args = $self->_mod_perl_args($r);
     } else {
        $cgi_object = CGI->new;
@@ -719,7 +734,7 @@
     # we call the version of the sub that sends its output to the
     # right place.
     #
-    my $print = \&Apache::print;
+    my $print = Apache->request->can('print');
 
     # Craft the request's out method to handle http headers, content
     # length, and HEAD requests.
@@ -780,9 +795,29 @@
     my ($self, $apr, $request) = @_;
 
     my %args;
-    foreach my $key ( $apr->param ) {
-       my @values = $apr->param($key);
-       $args{$key} = @values == 1 ? $values[0] : \@values;
+    
+    if ($apr->can('param')) {
+        foreach my $key ( $apr->param ) {
+           my @values = $apr->param($key);
+           $args{$key} = @values == 1 ? $values[0] : \@values;
+        }
+    }
+    else {
+        require CGI::Util;
+
+        my (@pairs) = split(/[&;]/, scalar $apr->args);
+        
+        foreach (@pairs) {
+           my ($param, $value) = split('=', $_, 2);
+           next unless defined $param;
+           $value = '' unless defined $value;
+           $param = CGI::Util::unescape($param);
+           $value = CGI::Util::unescape($value);
+           $args{$param} = $value;
+        }
+
+        my @contents = Apache->request->content;
+        %args = (@contents, %args) if @contents and ($#contents or $contents[0]);
     }
 
     return %args;

Attachment: msg02771/pgp00000.pgp
Description: PGP signature

Reply via email to