package RWDE::Web::SCGIadapter;

use strict;
use warnings;

use CGI;
use SCGI::Request;

use Error qw(:try);
use RWDE::Exceptions;

use base qw(RWDE::Web::CGIadapter);

use vars qw($VERSION);
$VERSION = sprintf "%d", q$Revision: 566 $ =~ /(\d+)/;

# set up the SCGI interaction and return the new object.  called from
# superclass new() method.
sub initialize {
  my $self = shift;
  my $params = shift;

  my $sock = $$params{sock};
  my $req = SCGI::Request->_new($sock,1); # blocking socket mode

  $req->read_env;
  %ENV = %{$req->env};

  my $cgi;

  if ($req->env->{REQUEST_METHOD} eq 'POST') {
    # read $req->connection, my $body, $req->env->{CONTENT_LENGTH};
    local *STDIN = $req->connection;
    $cgi = CGI->new();
  } else {
    $cgi = CGI->new();
  }

  CGI->_reset_globals;

  $self->{req} = $cgi;

  return;
}

sub run_command {
	my ($self, $params) = @_;

  try{
    RWDE::Web::CommandProxy->execute({ req => $self });
  }

  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;