generalize reading post input
[perl/plp/.git] / PLP / Apache.pm
index 217546fbe1abae70c64e711694d7722fc4aa97ce..bc788811252a533e48457aca4529033cc1325b2a 100644 (file)
@@ -4,19 +4,37 @@ use strict;
 
 our $VERSION = '1.00';
 
+use PLP;
+
+use constant MP2 => (
+       defined $ENV{MOD_PERL_API_VERSION} and $ENV{MOD_PERL_API_VERSION} >= 2
+);
+
+BEGIN {
+       if (MP2) {
+               require Apache2::Const;
+               require Apache2::RequestRec;
+               require Apache2::RequestUtil;
+               require Apache2::RequestIO;
+       } else {
+               require Apache::Constants;
+       }
+}
+
 # mod_perl initializer: returns 0 on success, Apache error code on failure
 sub init {
        our $r = shift;
 
        $PLP::print = 'PLP::Apache::print';
+       $PLP::read = \&read;
        
        $ENV{PLP_FILENAME} = my $filename = $r->filename;
        
        unless (-f $filename) {
-               return Apache::Constants::NOT_FOUND();
+               return MP2 ? Apache2::Const::HTTP_NOT_FOUND() : Apache::Constants::NOT_FOUND();
        }
        unless (-r _) {
-               return Apache::Constants::FORBIDDEN();
+               return MP2 ? Apache2::Const::HTTP_FORBIDDEN() : Apache::Constants::FORBIDDEN();
        }
        
        $ENV{PLP_NAME} = $r->uri;
@@ -32,6 +50,12 @@ sub init {
        return 0; # OK
 }
 
+sub read ($) {
+       my ($bytes) = @_;
+       $r->read(my $data, $bytes);
+       return $data;
+}
+
 # FAST printing under mod_perl
 sub print {
        return unless grep length, @_;
@@ -39,5 +63,17 @@ sub print {
        $PLP::Apache::r->print(@_);
 }
 
+# This is the mod_perl handler.
+sub handler {
+       PLP::clean();
+       if (my $ret = init($_[0])) {
+               return $ret;
+       }
+       #S PLP::start($_[0]);
+       PLP::start();
+       no strict 'subs';
+       return MP2 ? Apache2::Const::OK() : Apache::Constants::OK();
+}
+
 1;