Fixing HTTP.pm
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Engine / HTTP.pm
CommitLineData
ca61af20 1package Catalyst::Engine::HTTP;
45374ac6 2
3use strict;
75fd617a 4use base 'Catalyst::Engine::Test';
45374ac6 5
03978da9 6use IO::Socket qw(AF_INET SOCK_STREAM SOMAXCONN);
45374ac6 7
8=head1 NAME
9
ca61af20 10Catalyst::Engine::HTTP - Catalyst HTTP Engine
45374ac6 11
12=head1 SYNOPSIS
13
ca61af20 14A script using the Catalyst::Engine::HTTP module might look like:
45374ac6 15
16 #!/usr/bin/perl -w
17
ca61af20 18 BEGIN { $ENV{CATALYST_ENGINE} = 'HTTP' }
45374ac6 19
20 use strict;
21 use lib '/path/to/MyApp/lib';
22 use MyApp;
23
24 MyApp->run;
25
26=head1 DESCRIPTION
27
28This is the Catalyst engine specialized for development and testing.
29
30=head1 OVERLOADED METHODS
31
75fd617a 32This class overloads some methods from C<Catalyst::Engine::Test>.
45374ac6 33
34=over 4
35
36=item $c->run
37
38=cut
39
40$SIG{'PIPE'} = 'IGNORE';
41
42sub run {
43 my $class = shift;
44 my $port = shift || 3000;
45
ca61af20 46 my $daemon = Catalyst::Engine::HTTP::Catalyst->new(
03978da9 47 Listen => SOMAXCONN,
45374ac6 48 LocalPort => $port,
03978da9 49 ReuseAddr => 1,
50 Type => SOCK_STREAM,
45374ac6 51 );
52
66d9e175 53 unless ($daemon) {
54 die("Failed to create daemon: $!\n");
45374ac6 55 }
56
b333ca6b 57 my $base = URI->new( $daemon->url )->canonical;
58
59 printf( "You can connect to your server at %s\n", $base );
45374ac6 60
72766821 61 while ( my $connection = $daemon->accept ) {
45374ac6 62
1a80619d 63 $connection->timeout(5);
64
45374ac6 65 while ( my $request = $connection->get_request ) {
66
67 $request->uri->scheme('http'); # Force URI::http
b333ca6b 68 $request->uri->host( $base->host );
523d44ec 69 $request->uri->port( $base->port );
45374ac6 70
75fd617a 71 my $lwp = Catalyst::Engine::Test::LWP->new(
45374ac6 72 address => $connection->peerhost,
1a80619d 73 hostname => gethostbyaddr( $connection->peeraddr, AF_INET ),
74 request => $request,
75 response => HTTP::Response->new
45374ac6 76 );
77
6f4e1683 78 $class->handler($lwp);
79 $connection->send_response( $lwp->response );
1a80619d 80
81 if ( $class->debug ) {
82 $class->log->info( sprintf( "Peer %s:%d",$connection->peerhost, $connection->peerport ) );
83 }
84
45374ac6 85 }
86
87 $connection->close;
88 undef($connection);
89 }
90}
91
92=back
93
94=head1 SEE ALSO
95
96L<Catalyst>, L<HTTP::Daemon>.
97
98=head1 AUTHOR
99
100Sebastian Riedel, C<sri@cpan.org>
101Christian Hansen, C<ch@ngmedia.com>
102
103=head1 COPYRIGHT
104
105This program is free software, you can redistribute it and/or modify it under
106the same terms as Perl itself.
107
108=cut
109
ca61af20 110package Catalyst::Engine::HTTP::Catalyst;
45374ac6 111
112use strict;
113use base 'HTTP::Daemon';
114
115sub product_tokens {
116 "Catalyst/$Catalyst::VERSION";
117}
118
1191;