sub handle {
my $self = shift->new;
my $length = $ENV{'CONTENT_LENGTH'} || 0;
if (!$length) {
$self->response(HTTP::Response->new(411)) # LENGTH REQUIRED
} elsif (defined $SOAP::Constants::MAX_CONTENT_SIZE && $length > $SOAP::Constants::MAX_CONTENT_SIZE) {
$self->response(HTTP::Response->new(413)) # REQUEST ENTITY TOO LARGE
} else {
my $content; binmode(STDIN); read(STDIN,$content,$length);
$self->request(HTTP::Request->new(
$ENV{'REQUEST_METHOD'} || '' => $ENV{'SCRIPT_NAME'},
HTTP::Headers->new(map {(/^HTTP_(.+)/i ? $1 : $_) => $ENV{$_}} keys %ENV),
$content,
));
$self->SUPER::handle;
}
# imitate nph- cgi for IIS (pointed by Murray Nesbitt)
my $status = defined($ENV{'SERVER_SOFTWARE'}) && $ENV{'SERVER_SOFTWARE'}=~/IIS/
? $ENV{SERVER_PROTOCOL} || 'HTTP/1.0' : 'Status:';
my $code = $self->response->code;
binmode(STDOUT); print STDOUT
"$status $code ", HTTP::Status::status_message($code),
"\015\012", $self->response->headers_as_string,
"\015\012", $self->response->content;
}
####
# imitate nph- cgi for IIS (pointed by Murray Nesbitt)
- my $status = defined($ENV{'SERVER_SOFTWARE'}) && $ENV{'SERVER_SOFTWARE'}=~/IIS/
- ? $ENV{SERVER_PROTOCOL} || 'HTTP/1.0' : 'Status:';
+ my $status;
+ if ($self->{'nph'}) {
+ $status = $ENV{SERVER_PROTOCOL} || 'HTTP/1.0';
+ } else {
+ $status = defined($ENV{'SERVER_SOFTWARE'}) && $ENV{'SERVER_SOFTWARE'}=~/IIS/
+ ? $ENV{SERVER_PROTOCOL} || 'HTTP/1.0' : 'Status:';
+ }
my $code = $self->response->code;
####
sub nph {
my $self = shift;
$self->{'nph'} = 1;
return $self;
}
####
SOAP::Transport::HTTP::CGI
->dispatch_to ('/home/hue/lang/perl/modules', 'HelloWorld')
->nph
->handle;