You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by brian d foy <ti...@sri.net> on 2000/09/14 00:19:00 UTC

does notes() work with custom_response()?

=head
should notes() be available to a handler installed with
custom_response()? 

notice the code below:
	
	0) handler() decides which function will handle the response
	and sets a note.
	
	1) in test(), if part of the uri contains /error/, then
	another note is set and a custom_response() is used.
	the error() routine handles the error().  it sees the
	note set by handler() but not by test(),
	
	2) in test(), if part of the uri contains /push/, then
	a note is set and error() is installed as a handler.
	error() then sees both notes.

should 1) propogate both notes? are things even designed to work that way?
=cut

package LinkBank5::ErrorTest;

use Apache::Constants;

sub handler
	{
	my $r = shift;
	my $uri = $r->uri;
	$r->notes( 'LB-handler' => "Run at @{[scalar localtime]}" );

	if( $uri =~ /test/ )
		{
		$r->push_handlers( PerlHandler => \&test ); 
		return OK;
		}
	if( $uri =~ /error/ )
		{
		$r->push_handlers( PerlHandler => \&error ); 
		return OK;
		}
	else { return DECLINED; }
	}
	
sub test
	{
	my $r = shift;
	my $uri = $r->uri;
	
 	#this note is not set, although the handler note is propogated
 	if( $uri =~ /error/ ) # e.g. /test/error
 		{
 		$r->notes('LB-Error' => 'Oops! i messed up');
 		$r->notes('error-notes' => 'Oops! i messed up');
 		$r->custom_response( SERVER_ERROR, "/error" );
 		
 		return SERVER_ERROR; #tested with OK and DECLINED too
 		}
 	#using a PushHandler works
 	elsif( $uri =~ /push/ ) # e.g. /test/push
 		{
 		$r->notes('LB-Push' => 'Oops! i messed up');
 		$r->push_handlers( PerlHandler => \&error );

 		return OK;
 		}
		
	$r->send_http_header;
	
	my $note = $r->notes('LB-handler');
	$r->print("I'm in test!\n");
	$r->print("The note is [$note]\n");
	
	return OK;
	}
		
sub error
	{
	my $r = shift;
	
	my $notes  = $r->notes;
	my $pnotes = $r->pnotes;
	
	$r->status( SERVER_ERROR );
	$r->send_http_header;
	
	$r->print("I'm in error!\n");
	
	print "Notes are -----\n";
	print map { "$_ => $$notes{$_}\n" } sort keys %$notes;

	print "PNotes are -----\n";
	print map { "$_ => $$pnotes{$_}\n" } sort keys %$pnotes;
	
	return OK;
	}
	
1;

__END__

--
brian d foy                              <br...@smithrenaud.com>
Director of Technology, Smith Renaud, Inc.
875 Avenue of the Americas, 2510, New York, NY  10001
	V: (212) 239-8985