X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine%2FHTTP.pm;h=97cd8d618abc6a4ba56274351fd4a499f407a100;hb=e8b299689361f7f8538d0f7adf70fc86fecba8b2;hp=9626f6689eb9878d6e4757846f4efd75afba2444;hpb=eb511a7855c9fea0951dcf730d04f0ea7f24a23d;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine/HTTP.pm b/lib/Catalyst/Engine/HTTP.pm index 9626f66..97cd8d6 100644 --- a/lib/Catalyst/Engine/HTTP.pm +++ b/lib/Catalyst/Engine/HTTP.pm @@ -12,10 +12,6 @@ use Socket; use IO::Socket::INET (); use IO::Select (); -# For PAR -require Catalyst::Engine::HTTP::Restarter; -require Catalyst::Engine::HTTP::Restarter::Watcher; - use constant CHUNKSIZE => 64 * 1024; use constant DEBUG => $ENV{CATALYST_HTTP_DEBUG} || 0; @@ -72,7 +68,8 @@ sub finalize_headers { # Should we keep the connection open? my $connection = $c->request->header('Connection'); - if ( $self->options->{keepalive} + if ( $self->options + && $self->options->{keepalive} && $connection && $connection =~ /^keep-alive$/i ) { @@ -159,7 +156,7 @@ around write => sub { # Prepend the headers if they have not yet been sent if ( $self->_has_header_buf ) { $self->_warn_on_write_error( - $self->$orig($self->_clear_header_buf) + $self->$orig($c, $self->_clear_header_buf) ); } @@ -343,7 +340,7 @@ sub run { use Config; $ENV{PERL5LIB} .= join $Config{path_sep}, @INC; - exec $^X, $0, @{ $options->{argv} }; + exec $^X, $0, @{ $options->{argv} || [] }; } exit; @@ -368,6 +365,9 @@ sub _handler { while (1) { my ( $path, $query_string ) = split /\?/, $uri, 2; + # URI is not the same as path. Remove scheme, domain name and port from it + $path =~ s{^https?://[^/?#]+}{}; + # Initialize CGI environment local %ENV = ( PATH_INFO => $path || '', @@ -535,13 +535,21 @@ sub _socket_data { peeraddr => $iaddr ? ( inet_ntoa($iaddr) || '127.0.0.1' ) : '127.0.0.1', - localname => gethostbyaddr( $localiaddr, AF_INET ) || 'localhost', + localname => _gethostbyaddr( $localiaddr ), localaddr => inet_ntoa($localiaddr) || '127.0.0.1', }; return $data; } +{ # If you have a crappy DNS server then these can be slow, so cache 'em + my %hostname_cache; + sub _gethostbyaddr { + my $ip = shift; + $hostname_cache{$ip} ||= gethostbyaddr( $ip, AF_INET ) || 'localhost'; + } +} + sub _inet_addr { unpack "N*", inet_aton( $_[0] ) } =head2 options