Added SpeedyCGI, partly fixed HTTP::Daemon
Christian Hansen [Thu, 5 May 2005 21:44:07 +0000 (21:44 +0000)]
lib/Catalyst/Engine.pm
lib/Catalyst/Engine/CGI.pm
lib/Catalyst/Engine/CGI/APR.pm
lib/Catalyst/Engine/CGI/Base.pm
lib/Catalyst/Engine/FastCGI.pm
lib/Catalyst/Engine/FastCGI/APR.pm
lib/Catalyst/Engine/FastCGI/Base.pm
lib/Catalyst/Engine/HTTP/Daemon.pm
lib/Catalyst/Engine/SpeedyCGI.pm [new file with mode: 0644]
lib/Catalyst/Engine/SpeedyCGI/Base.pm [new file with mode: 0644]

index b42f8bf..0aeefac 100644 (file)
@@ -361,14 +361,14 @@ Finalize headers.
 
 sub finalize_headers { }
 
-=item $c->handler( $class, $engine )
+=item $c->handler( $class, @arguments )
 
 Handles the request.
 
 =cut
 
 sub handler {
-    my ( $class, $engine ) = @_;
+    my ( $class, @arguments ) = @_;
 
     # Always expect worst case!
     my $status = -1;
@@ -376,7 +376,7 @@ sub handler {
         my @stats = ();
 
         my $handler = sub {
-            my $c = $class->prepare($engine);
+            my $c = $class->prepare(@arguments);
             $c->{stats} = \@stats;
             $c->dispatch;
             return $c->finalize;
@@ -410,7 +410,7 @@ sub handler {
     return $status;
 }
 
-=item $c->prepare($engine)
+=item $c->prepare(@arguments)
 
 Turns the engine-specific request( Apache, CGI ... )
 into a Catalyst context .
@@ -418,7 +418,7 @@ into a Catalyst context .
 =cut
 
 sub prepare {
-    my ( $class, $engine ) = @_;
+    my ( $class, @arguments ) = @_;
 
     my $c = bless {
         counter => {},
@@ -454,7 +454,7 @@ sub prepare {
         $c->res->headers->header( 'X-Catalyst' => $Catalyst::VERSION );
     }
 
-    $c->prepare_request($engine);
+    $c->prepare_request(@arguments);
     $c->prepare_connection;
     $c->prepare_headers;
     $c->prepare_cookies;
index 9305c1b..0044681 100644 (file)
@@ -5,6 +5,8 @@ use base 'Catalyst::Engine::CGI::Base';
 
 use CGI;
 
+__PACKAGE__->mk_accessors('cgi');
+
 =head1 NAME
 
 Catalyst::Engine::CGI - The CGI Engine
@@ -37,6 +39,16 @@ application module:
 The performance of this way of using Catalyst is not expected to be
 useful in production applications, but it may be helpful for development.
 
+=head1 METHODS
+
+=over 4
+
+=item $c->cgi
+
+Contains the C<CGI> object.
+
+=back
+
 =head1 OVERLOADED METHODS
 
 This class overloads some methods from C<Catalyst::Engine::CGI::Base>.
index 93a181b..964e879 100644 (file)
@@ -9,6 +9,8 @@ use APR::Request;
 use APR::Request::CGI;
 use APR::Request::Param;
 
+__PACKAGE__->mk_accessors('apr');
+
 =head1 NAME
 
 Catalyst::Engine::CGI::APR - The CGI APR Engine
@@ -31,7 +33,17 @@ A script using the Catalyst::Engine::CGI::APR module might look like:
 
 =head1 DESCRIPTION
 
-This Catalyst engine uses C<APR::Request> for parsing of message body.
+This Catalyst engine uses C<APR::Request::CGI> for parsing of message body.
+
+=head1 METHODS
+
+=over 4
+
+=item $c->apr
+
+Contains the C<APR::Request::CGI> object.
+
+=back
 
 =head1 OVERLOADED METHODS
 
@@ -48,7 +60,7 @@ sub prepare_parameters {
 
     my @params;
 
-    $c->cgi->param->do( sub {
+    $c->apr->param->do( sub {
         my ( $field, $value ) = @_;
         push( @params, $field, $value );
         return 1;    
@@ -63,7 +75,7 @@ sub prepare_parameters {
 
 sub prepare_request {
     my $c = shift;
-    $c->cgi( APR::Request::CGI->new( APR::Pool->new ) );
+    $c->apr( APR::Request::CGI->handle( APR::Pool->new ) );
 }
 
 =item $c->prepare_uploads
@@ -75,7 +87,7 @@ sub prepare_uploads {
 
     my @uploads;
 
-    $c->cgi->upload->do( sub {
+    $c->apr->upload->do( sub {
         my ( $field, $upload ) = @_;
 
         my $object = Catalyst::Request::Upload->new(
@@ -97,8 +109,7 @@ sub prepare_uploads {
 
 =head1 SEE ALSO
 
-L<Catalyst>, L<Catalyst::Engine>, L<Catalyst::Engine::CGI::Base>, 
-sL<APR::Request>.
+L<Catalyst>, L<APR::Request::CGI>, L<Catalyst::Engine::CGI::Base>.
 
 =head1 AUTHOR
 
index bc4ef87..3b62454 100644 (file)
@@ -3,12 +3,9 @@ package Catalyst::Engine::CGI::Base;
 use strict;
 use base 'Catalyst::Engine';
 
-use IO::File ();
 use URI;
 use URI::http;
 
-__PACKAGE__->mk_accessors('cgi');
-
 =head1 NAME
 
 Catalyst::Engine::CGI::Base - Base class for CGI Engines
@@ -17,16 +14,6 @@ Catalyst::Engine::CGI::Base - Base class for CGI Engines
 
 This is a base class for CGI engines.
 
-=head1 METHODS
-
-=over 4
-
-=item $c->cgi
-
-This config parameter contains the C<CGI> object.
-
-=back
-
 =head1 OVERLOADED METHODS
 
 This class overloads some methods from C<Catalyst::Engine>.
@@ -64,10 +51,9 @@ sub finalize_headers {
 sub prepare_body {
     my $c = shift;
     
-    my $handle = IO::File->new_from_fd( fileno(STDIN), IO::File::O_RDONLY );
-    my $body   = undef;  
+    my $body = undef;
     
-    while ( $handle->sysread( my $buffer, 8192 ) ) {
+    while ( read( STDIN, my $buffer, 8192 ) ) {
         $body .= $buffer;
     }
     
index 9619d78..e9215f8 100644 (file)
@@ -27,9 +27,49 @@ A script using the Catalyst::Engine::FastCGI module might look like:
 
 This is the Catalyst engine for FastCGI.
 
+=head1 OVERLOADED METHODS
+
+This class overloads some methods from C<Catalyst::Engine::FastCGI::Base>.
+
+=over 4
+
+=item $c->prepare_body
+
+=cut
+
+sub prepare_body { 
+    shift->Catalyst::Engine::CGI::prepare_body(@_);
+}
+
+=item $c->prepare_parameters
+
+=cut
+
+sub prepare_parameters { 
+    shift->Catalyst::Engine::CGI::prepare_parameters(@_);
+}
+
+=item $c->prepare_request
+
+=cut
+
+sub prepare_request {
+    my ( $c, $fastcgi, @arguments ) = @_;
+    $c->SUPER::prepare_request($fastcgi);
+    $c->Catalyst::Engine::CGI::prepare_request(@arguments);
+}
+
+=item $c->prepare_uploads
+
+=cut
+
+sub prepare_uploads { 
+    shift->Catalyst::Engine::CGI::prepare_uploads(@_);
+}
+
 =head1 SEE ALSO
 
-L<Catalyst>, L<Catalyst::Engine::CGI>.
+L<Catalyst>, L<Catalyst::Engine::FastCGI::Base>, L<Catalyst::Engine::CGI>.
 
 =head1 AUTHOR
 
index cb9d95d..5e412dc 100644 (file)
@@ -27,9 +27,49 @@ A script using the Catalyst::Engine::FastCGI::APR module might look like:
 
 This is the Catalyst engine for FastCGI and APR.
 
+=head1 OVERLOADED METHODS
+
+This class overloads some methods from C<Catalyst::Engine::FastCGI::Base>.
+
+=over 4
+
+=item $c->prepare_body
+
+=cut
+
+sub prepare_body { 
+    shift->Catalyst::Engine::CGI::APR::prepare_body(@_);
+}
+
+=item $c->prepare_parameters
+
+=cut
+
+sub prepare_parameters { 
+    shift->Catalyst::Engine::CGI::APR::prepare_parameters(@_);
+}
+
+=item $c->prepare_request
+
+=cut
+
+sub prepare_request {
+    my ( $c, $fastcgi, @arguments ) = @_;
+    $c->SUPER::prepare_request($fastcgi);
+    $c->Catalyst::Engine::CGI::APR::prepare_request(@arguments);
+}
+
+=item $c->prepare_uploads
+
+=cut
+
+sub prepare_uploads { 
+    shift->Catalyst::Engine::CGI::APR::prepare_uploads(@_);
+}
+
 =head1 SEE ALSO
 
-L<Catalyst>, L<Catalyst::Engine::CGI::APR>.
+L<Catalyst>, L<Catalyst::Engine::FastCGI::Base>, L<Catalyst::Engine::CGI::APR>.
 
 =head1 AUTHOR
 
index ee353b0..e3315dc 100644 (file)
@@ -1,8 +1,12 @@
 package Catalyst::Engine::FastCGI::Base;
 
 use strict;
+use base 'Catalyst::Engine::CGI::Base';
+
 use FCGI;
 
+__PACKAGE__->mk_accessors('fastcgi');
+
 =head1 NAME
 
 Catalyst::Engine::FastCGI::Base - Base class for FastCGI Engines
@@ -15,15 +19,38 @@ This is a base class for FastCGI engines.
 
 =over 4
 
+=item $c->fastcgi
+
+Contains the C<FCGI::Request> object.
+
+=back
+
+=head1 OVERLOADED METHODS
+
+This class overloads some methods from C<Catalyst::Engine::CGI::Base>.
+
+=over 4
+
+=item $c->prepare_request
+
+=cut
+
+sub prepare_request {
+    my ( $c, $fastcgi ) = @_;
+    $c->fastcgi($fastcgi);
+}
+
 =item $c->run
 
 =cut
 
 sub run {
-    my $class   = shift;
+    my ( $class, @arguments ) = @_;
+    
     my $request = FCGI::Request();
-    while ( $request->Accept() >= 0 ) {
-        $class->handler;
+    
+    while ( $request->Accept >= 0 ) {
+        $class->handler( $request, @arguments );
     }
 }
 
@@ -31,7 +58,7 @@ sub run {
 
 =head1 SEE ALSO
 
-L<Catalyst>.
+L<Catalyst>, L<FCGI>, L<Catalyst::Engine::CGI::Base>.
 
 =head1 AUTHOR
 
index ec6ffcd..bcfd4c8 100644 (file)
@@ -43,7 +43,7 @@ sub run {
     my $class = shift;
     my $port  = shift || 3000;
 
-    my $daemon = Catalyst::Engine::HTTP::Base::struct->new(
+    my $daemon = Catalyst::Engine::HTTP::Catalyst->new(
         Listen    => SOMAXCONN,
         LocalPort => $port,
         ReuseAddr => 1,
diff --git a/lib/Catalyst/Engine/SpeedyCGI.pm b/lib/Catalyst/Engine/SpeedyCGI.pm
new file mode 100644 (file)
index 0000000..0afabff
--- /dev/null
@@ -0,0 +1,86 @@
+package Catalyst::Engine::SpeedyCGI;
+
+use strict;
+use base qw(Catalyst::Engine::SpeedyCGI::Base Catalyst::Engine::CGI);
+
+=head1 NAME
+
+Catalyst::Engine::SpeedyCGI - Catalyst SpeedyCGI Engine
+
+=head1 SYNOPSIS
+
+A script using the Catalyst::Engine::SpeedyCGI module might look like:
+
+    #!/usr/bin/speedy -w
+
+    BEGIN { 
+       $ENV{CATALYST_ENGINE} = 'SpeedyCGI';
+    }
+
+    use strict;
+    use lib '/path/to/MyApp/lib';
+    use MyApp;
+
+    MyApp->run;
+
+=head1 DESCRIPTION
+
+This is the Catalyst engine for SpeedyCGI.
+
+=head1 OVERLOADED METHODS
+
+This class overloads some methods from C<Catalyst::Engine::SpeedyCGI::Base>.
+
+=over 4
+
+=item $c->prepare_body
+
+=cut
+
+sub prepare_body { 
+    shift->Catalyst::Engine::CGI::prepare_body(@_);
+}
+
+=item $c->prepare_parameters
+
+=cut
+
+sub prepare_parameters { 
+    shift->Catalyst::Engine::CGI::prepare_parameters(@_);
+}
+
+=item $c->prepare_request
+
+=cut
+
+sub prepare_request {
+    my ( $c, $speedycgi, @arguments ) = @_;
+    $c->SUPER::prepare_request($speedycgi);
+    $c->Catalyst::Engine::CGI::prepare_request(@arguments);
+}
+
+=item $c->prepare_uploads
+
+=cut
+
+sub prepare_uploads { 
+    shift->Catalyst::Engine::CGI::prepare_uploads(@_);
+}
+
+=head1 SEE ALSO
+
+L<Catalyst>, L<Catalyst::Engine::SpeedyCGI::Base>, L<Catalyst::Engine::CGI>.
+
+=head1 AUTHOR
+
+Sebastian Riedel, C<sri@cpan.org>
+Christian Hansen, C<ch@ngmedia.com>
+
+=head1 COPYRIGHT
+
+This program is free software, you can redistribute it and/or modify it under
+the same terms as Perl itself.
+
+=cut
+
+1;
diff --git a/lib/Catalyst/Engine/SpeedyCGI/Base.pm b/lib/Catalyst/Engine/SpeedyCGI/Base.pm
new file mode 100644 (file)
index 0000000..6c89c4c
--- /dev/null
@@ -0,0 +1,70 @@
+package Catalyst::Engine::SpeedyCGI::Base;
+
+use strict;
+use base 'Catalyst::Engine::CGI::Base';
+
+use CGI::SpeedyCGI;
+
+__PACKAGE__->mk_accessors('speedycgi');
+
+=head1 NAME
+
+Catalyst::Engine::SpeedyCGI::Base - Base class for SpeedyCGI Engines
+
+=head1 DESCRIPTION
+
+This is a base class for SpeedyCGI engines.
+
+=head1 METHODS
+
+=over 4
+
+=item $c->speedycgi
+
+Contains the C<CGI::SpeedyCGI> object.
+
+=back
+
+=head1 OVERLOADED METHODS
+
+This class overloads some methods from C<Catalyst::Engine::CGI::Base>.
+
+=over 4
+
+=item $c->prepare_request
+
+=cut
+
+sub prepare_request {
+    my ( $c, $speedycgi ) = @_;
+    $c->speedycgi($speedycgi);
+}
+
+=item $c->run
+
+=cut
+
+sub run {
+    my ( $class, @arguments ) = @_; 
+    $class->handler( CGI::SpeedyCGI->new, @arguments );
+}
+
+=back
+
+=head1 SEE ALSO
+
+L<Catalyst>, L<CGI::SpeedyCGI>, L<Catalyst::Engine::CGI::Base>.
+
+=head1 AUTHOR
+
+Sebastian Riedel, C<sri@cpan.org>
+Christian Hansen, C<ch@ngmedia.com>
+
+=head1 COPYRIGHT
+
+This program is free software, you can redistribute it and/or modify it under
+the same terms as Perl itself.
+
+=cut
+
+1;