blob: 24110de40eb49073c7497fa2fb0937049e7fe3de [file] [log] [blame]
package Apache::Constants;
use mod_perl ();
{
no strict;
$VERSION = "1.09";
__PACKAGE__->mod_perl::boot($VERSION);
}
unless(defined &import) {
require Exporter;
require Apache::Constants::Exports;
*import = \&Exporter::import;
}
sub autoload {
if (defined &__AUTOLOAD) { #make extra sure we don't recurse
#why must we stringify first???
__AUTOLOAD() if "$Apache::Constants::AUTOLOAD";
goto &$Apache::Constants::AUTOLOAD;
}
else {
require Carp;
Carp::confess("__AUTOLOAD is undefined, ",
"trying to AUTOLOAD $Apache::Constants::AUTOLOAD");
}
}
if ($ENV{MOD_PERL}) {
#outside of mod_perl this will recurse looking for __AUTOLOAD, grr
*AUTOLOAD = \&autoload;
}
my %ConstNameCache = ();
sub export {
my $class = shift;
for my $new (@_) {
next if grep { $new eq $_ } @Apache::Constants::EXPORT_OK;
push @Apache::Constants::EXPORT_OK, $new;
if(%Apache::Constants::EXPORT) {
$Apache::Constants::EXPORT{$new} = 1;
}
}
}
sub name {
my($self, $const) = @_;
require Apache::Constants::Exports;
return $ConstNameCache{$const} if $ConstNameCache{$const};
for (@Apache::Constants::EXPORT,
@Apache::Constants::EXPORT_OK) {
if ((\&{$_})->() eq $const) {
return ($ConstNameCache{$const} = $_);
}
}
}
1;
__END__
=head1 NAME
Apache::Constants - Constants defined in apache header files
=head1 SYNOPSIS
use Apache::Constants;
use Apache::Constants ':common';
use Apache::Constants ':response';
=head1 DESCRIPTION
Server constants used by apache modules are defined in
B<httpd.h> and other header files, this module gives Perl access
to those constants.
=head1 EXPORT TAGS
=over 4
=item common
This tag imports the most commonly used constants.
OK
DECLINED
DONE
NOT_FOUND
FORBIDDEN
AUTH_REQUIRED
SERVER_ERROR
=item response
This tag imports the B<common> response codes, plus these
response codes:
DOCUMENT_FOLLOWS
MOVED
REDIRECT
USE_LOCAL_COPY
BAD_REQUEST
BAD_GATEWAY
RESPONSE_CODES
NOT_IMPLEMENTED
CONTINUE
NOT_AUTHORITATIVE
B<CONTINUE> and B<NOT_AUTHORITATIVE> are aliases for B<DECLINED>.
=item methods
This are the method numbers, commonly used with
the Apache B<method_number> method.
METHODS
M_CONNECT
M_DELETE
M_GET
M_INVALID
M_OPTIONS
M_POST
M_PUT
M_TRACE
M_PATCH
M_PROPFIND
M_PROPPATCH
M_MKCOL
M_COPY
M_MOVE
M_LOCK
M_UNLOCK
=item options
These constants are most commonly used with
the Apache B<allow_options> method:
OPT_NONE
OPT_INDEXES
OPT_INCLUDES
OPT_SYM_LINKS
OPT_EXECCGI
OPT_UNSET
OPT_INCNOEXEC
OPT_SYM_OWNER
OPT_MULTI
OPT_ALL
=item satisfy
These constants are most commonly used with
the Apache B<satisfies> method:
SATISFY_ALL
SATISFY_ANY
SATISFY_NOSPEC
=item remotehost
These constants are most commonly used with
the Apache B<get_remote_host> method:
REMOTE_HOST
REMOTE_NAME
REMOTE_NOLOOKUP
REMOTE_DOUBLE_REV
=item http
This is the full set of HTTP response codes:
(NOTE: not all implemented here)
HTTP_OK
HTTP_MOVED_TEMPORARILY
HTTP_MOVED_PERMANENTLY
HTTP_METHOD_NOT_ALLOWED
HTTP_NOT_MODIFIED
HTTP_UNAUTHORIZED
HTTP_FORBIDDEN
HTTP_NOT_FOUND
HTTP_BAD_REQUEST
HTTP_INTERNAL_SERVER_ERROR
HTTP_NOT_ACCEPTABLE
HTTP_NO_CONTENT
HTTP_PRECONDITION_FAILED
HTTP_SERVICE_UNAVAILABLE
HTTP_VARIANT_ALSO_VARIES
=item server
These are constants related to server version:
MODULE_MAGIC_NUMBER
SERVER_VERSION
SERVER_BUILT
=item config
These are constants related to configuration directives:
DECLINE_CMD
=item types
These are constants related to internal request types:
DIR_MAGIC_TYPE
=item override
These constants are used to control and test the context of configuration
directives.
OR_NONE
OR_LIMIT
OR_OPTIONS
OR_FILEINFO
OR_AUTHCFG
OR_INDEXES
OR_UNSET
OR_ALL
ACCESS_CONF
RSRC_CONF
=item args_how
RAW_ARGS
TAKE1
TAKE2
TAKE12
TAKE3
TAKE23
TAKE123
ITERATE
ITERATE2
FLAG
NO_ARGS
=back
=head1 Misuses
You should be aware of the issues relating to using constant
subroutines in Perl. For example this:
$r->custom_response(FORBIDDEN => "File size exceeds quota.");
will not set a custom response for C<FORBIDDEN>, but for the string
C<"FORBIDDEN">, which clearly isn't what is expected. You'll get an
error like this:
[Tue Apr 23 19:46:14 2002] null: Argument "FORBIDDEN" isn't
numeric in subroutine entry at ...
Therefore, the best solution is not to use the hash notation for
things that don't require it:
$r->custom_response(FORBIDDEN, "File size exceeds quota.");
Another important note is that instead of using HTTP codes, you should
use designed for that purpose constants. Therefore, this is wrong:
sub handler { return 200; }
The correct use is:
use Apache::Constants qw(OK);
sub handler { return OK; }
Also remember that C<OK != HTTP_OK>.
=head1 AUTHORS
Doug MacEachern, Gisle Aas and h2xs
=cut