#! /usr/bin/perl
package RWDE::Web::FCGIadapter;
use strict;
use warnings;
use CGI;
use FCGI;
use Error qw(:try);
use RWDE::Exceptions;
use base qw(CGI RWDE::Web::CGIadapter);
our($Ext_Request);
use vars qw($VERSION);
$VERSION = sprintf "%d", q$Revision: 566 $ =~ /(\d+)/;
# workaround for known bug in libfcgi
while ((my $ignore) = each %ENV) { }
# set up the FCGI connection. called from superclass new() method
# calls FCGI's accept() method.
sub initialize {
my ($self, $params) = @_;
if ($Ext_Request) {
return unless $Ext_Request->Accept() >= 0;
} else {
return unless FCGI::accept() >= 0;
}
CGI->_reset_globals;
$self->{req} = $CGI::Q = CGI->new($params);
return;
}
# override the initialization behavior so that
# state is NOT maintained between invocations
sub save_request {
# no-op
}
sub run {
my ($self, $params) = @_;
# it should fork here and enter the blocking while loop
# for the child only, the parent should make note who
# got deployed listening to which port and continue monitoring
while (my $req = $self->new()) {
try{
RWDE::Web::CommandProxy->execute({ req => $req });
}
catch Error with{
my $ex = shift;
$self->syslog_msg('info', "dispatch caught: $ex");
$self->syslog_msg('info', "This is beyond unusual, exceptions are caught here to avoid server going down");
}
}
return();
}
1;