X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FRequest.pm;h=f26c06146c351c997f0985e8ed608ec60e93ccc5;hp=e6e8657300a5e97fb1a36ed706477dd59a1c92fa;hb=361b200364e49a6942316897e1e45d6c7663dfa7;hpb=0739a7ecb8f44518900a7d056d6d2837d553321a diff --git a/lib/Catalyst/Request.pm b/lib/Catalyst/Request.pm index e6e8657..f26c061 100644 --- a/lib/Catalyst/Request.pm +++ b/lib/Catalyst/Request.pm @@ -1,6 +1,6 @@ package Catalyst::Request; -use IO::Socket qw[AF_INET inet_aton]; +use Socket qw( getaddrinfo getnameinfo AI_NUMERICHOST NI_NAMEREQD NIx_NOSERV ); use Carp; use utf8; use URI::http; @@ -141,8 +141,8 @@ sub _build_body_data { } has _use_hash_multivalue => ( - is=>'ro', - required=>1, + is=>'ro', + required=>1, default=> sub {0}); # Amount of data to read from input on each pass @@ -251,7 +251,7 @@ sub prepare_body { my ( $self ) = @_; # If previously applied middleware created the HTTP::Body object, then we - # just use that one. + # just use that one. if(my $plack_body = $self->_has_env ? $self->env->{'plack.request.http.body'} : undef) { $self->_body($plack_body); @@ -283,7 +283,7 @@ sub prepare_body { # Ok if we get this far, we have to read psgi.input into the new body # object. Lets play nice with any plack app or other downstream, so # we create a buffer unless one exists. - + my $stream_buffer; if ($self->env->{'psgix.input.buffered'}) { # Be paranoid about previous psgi middleware or apps that read the @@ -435,11 +435,30 @@ sub body { has hostname => ( is => 'rw', - required => 1, lazy => 1, default => sub { my ($self) = @_; - gethostbyaddr( inet_aton( $self->address ), AF_INET ) || $self->address + my ( $err, $sockaddr ) = getaddrinfo( + $self->address, + # no service + '', + { flags => AI_NUMERICHOST } + ); + if ( $err ) { + $self->_log->warn("resolve of hostname failed: $err"); + return $self->address; + } + ( $err, my $hostname ) = getnameinfo( + $sockaddr->{addr}, + NI_NAMEREQD, + # we are only interested in the hostname, not the servicename + NIx_NOSERV + ); + if ( $err ) { + $self->_log->warn("resolve of hostname failed: $err"); + return $self->address; + } + return $hostname; }, ); @@ -774,7 +793,7 @@ sub param { # If anything in @_ is undef, carp about that, and remove it from # the list; - + my @params = grep { defined($_) ? 1 : do {carp "You called ->params with an undefined value"; 0} } @_; if ( @params == 1 ) { @@ -1125,7 +1144,7 @@ If parameters have already been set will clear the parameters and build them aga =head2 $self->env -Access to the raw PSGI env. +Access to the raw PSGI env. =head2 meta