X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FResponse.pm;h=e7bc2d3f314d5acfcc63a5c3fac96a45cb937ecf;hb=0739a7ecb8f44518900a7d056d6d2837d553321a;hp=eb99ab76eceb413b1190dc3fd2bb01e3183e0e44;hpb=ca6d4ff660abd0bc8cd2e6590a5d8c76a5cae64a;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Response.pm b/lib/Catalyst/Response.pm index eb99ab7..e7bc2d3 100644 --- a/lib/Catalyst/Response.pm +++ b/lib/Catalyst/Response.pm @@ -103,12 +103,24 @@ has _context => ( clearer => '_clear_context', ); -before [qw(status headers content_encoding content_length content_type header)] => sub { +before [qw(status headers content_encoding content_length content_type )] => sub { my $self = shift; - $self->_context->log->warn( + $self->_context->log->warn( "Useless setting a header value after finalize_headers and the response callback has been called." . - " Not what you want." ) + " Since we don't support tail headers this will not work as you might expect." ) + if ( $self->_context && $self->finalized_headers && !$self->_has_response_cb && @_ ); +}; + +# This has to be different since the first param to ->header is the header name and presumably +# you should be able to request the header even after finalization, just not try to change it. +before 'header' => sub { + my $self = shift; + my $header = shift; + + $self->_context->log->warn( + "Useless setting a header value after finalize_headers and the response callback has been called." . + " Since we don't support tail headers this will not work as you might expect." ) if ( $self->_context && $self->finalized_headers && !$self->_has_response_cb && @_ ); }; @@ -134,6 +146,20 @@ sub write { return $len; } +sub unencoded_write { + my ( $self, $buffer ) = @_; + + # Finalize headers if someone manually writes output + $self->_context->finalize_headers unless $self->finalized_headers; + + $buffer = q[] unless defined $buffer; + + my $len = length($buffer); + $self->_writer->write($buffer); + + return $len; +} + sub finalize_headers { my ($self) = @_; return; @@ -468,6 +494,12 @@ http 1.1 webservers support this). If there is an encoding set, we encode each line of the response (the default encoding is UTF-8). +=head2 $res->unencoded_write( $data ) + +Works just like ->write but we don't apply any content encoding to C<$data>. Use +this if you are already encoding the $data or the data is arriving from an encoded +storage. + =head2 $res->write_fh Returns an instance of L, which is a lightweight @@ -524,7 +556,7 @@ finalized (there isn't one anyway) and you need to call the close method. Prints @data to the output stream, separated by $,. This lets you pass the response object to functions that want to write to an L. -=head2 $self->finalize_headers($c) +=head2 $res->finalize_headers() Writes headers to response if not already written