package Apache::Debug; use Cwd 'fastcwd'; use vars qw($VERSION); $VERSION = "1.61"; sub import { local $^W = 0; shift; my(%args) = @_; return unless exists $args{level}; print STDERR "Apache::Debug: [@_]\n"; $Apache::Registry::Debug = $args{level}; $^M = 'a' x (1<<16); require Carp; $SIG{__DIE__} = \&Carp::confess; } #from HTTP::Status my %StatusCode = ( 100 => 'Continue', 101 => 'Switching Protocols', 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Moved Temporarily', 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Large', 415 => 'Unsupported Media Type', 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported', ); sub dump { my($r, $status) = (shift,shift); my $srv = $r->server; my $conn = $r->connection; my %headers = $r->headers_in; my $host = $r->get_remote_host; my $cwd = fastcwd; $r->status($status); $r->content_type("text/html"); $r->content_language("en"); $r->no_cache(1); $r->header_out("X-Debug-Version" => q$Id: Debug.pm,v 1.7 1999/01/18 04:31:13 ask Exp $); $r->send_http_header; return 0 if $r->header_only; # should not generate a body my $title = "$status $StatusCode{$status}"; $r->write_client(join("\n", "", "
", ($@ ? "$@\n" : ""), "cwd=$cwd\n"));
for (
qw(
method uri protocol path_info filename
allow_options
)
)
{
$r->print(sprintf "\$r->%-17s : %s\n", $_, $r->$_() );
}
for (
qw(
server_admin
server_hostname
port
)
)
{
$r->print(sprintf "\$s->%-17s : %s\n", $_, $srv->$_() );
}
for (
qw(
remote_host
remote_ip
remote_logname
user
auth_type
)
)
{
$r->print(sprintf "\$c->%-17s : %s\n", $_, $conn->$_() );
}
my $args = $r->args;
my %args = $r->args;
my %in = $r->content;
$r->print(
"\nscalar \$r->args : $args\n",
"\n\$r->args:\n",
(map { " $_ = $args{$_}\n" } sort keys %args),
"\n\$r->content:\n",
(map { " $_ = $in{$_}\n" } sort keys %in),
"\n\$r->headers_in:\n",
(map { sprintf " %-12s = %s\n", $_, $headers{$_} } sort keys %headers),
);
$r->print("\n\n");
return 0; #need to give a return status
}
1;
__END__
=head1 NAME
Apache::Debug - Utilities for debugging embedded perl code
=head1 SYNOPSIS
use Apache::Debug ();
Apache::Debug::dump($r, SERVER_ERROR, "Uh Oh!");
=head1 DESCRIPTION
This module sends what may be helpful debugging info to the client
rather that the error log.