Fixed field -> env bug
[catagits/HTTP-Request-AsCGI.git] / examples / daemon.pl
CommitLineData
3cdea3c7 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use CGI;
7use HTTP::Daemon;
8use HTTP::Request;
9use HTTP::Request::AsCGI;
10use HTTP::Response;
11
f93fc77c 12$SIG{'PIPE'} = 'IGNORE';
13
14my $server = HTTP::Daemon->new( LocalPort => 3000, ReuseAddr => 1 ) || die;
3cdea3c7 15
16print "Please contact me at: <URL:", $server->url, ">\n";
17
18while ( my $client = $server->accept ) {
f93fc77c 19
20 my %e = (
21 REMOTE_ADDR => $client->peerhost,
22 REMOTE_HOST => $client->peerhost,
23 REMOTE_PORT => $client->peerport
24 );
3cdea3c7 25
26 while ( my $request = $client->get_request ) {
27
2aaf55bc 28 CGI::initialize_globals();
29
f93fc77c 30 my $c = HTTP::Request::AsCGI->new( $request, %e )->setup;
3cdea3c7 31 my $q = CGI->new;
32
f93fc77c 33 print $q->header,
34 $q->start_html('Hello World'),
3cdea3c7 35 $q->h1('Hello World'),
36 $q->end_html;
37
38 $c->restore;
39
f93fc77c 40 my $message = "HTTP/1.1 200\x0d\x0a";
3cdea3c7 41
42 while ( my $line = $c->stdout->getline ) {
43 $message .= $line;
44 last if $line =~ /^\x0d?\x0a$/;
45 }
46
47 my $response = HTTP::Response->parse($message);
f93fc77c 48
49 if ( my $code = $response->header('Status') ) {
50 $response->code($code);
51 }
52
53 $response->header( Connection => 'close' );
54 $response->protocol( $request->protocol );
3cdea3c7 55 $response->content( sub {
56 if ( $c->stdout->read( my $buffer, 4096 ) ) {
57 return $buffer;
58 }
59 return undef;
60 });
61
62 $client->send_response($response);
f93fc77c 63 $client->close;
3cdea3c7 64 }
65
f93fc77c 66 #$client->close;
3cdea3c7 67}