You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
244 lines
6.8 KiB
244 lines
6.8 KiB
#
|
|
# $Id: Status.pm,v 1.26 1999/11/22 10:43:24 gisle Exp $
|
|
|
|
package HTTP::Status;
|
|
|
|
use strict;
|
|
require 5.002; # becase we use prototypes
|
|
|
|
=head1 NAME
|
|
|
|
HTTP::Status - HTTP Status code processing
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
use HTTP::Status;
|
|
|
|
if ($rc != RC_OK) {
|
|
print status_message($rc), "\n";
|
|
}
|
|
|
|
if (is_success($rc)) { ... }
|
|
if (is_error($rc)) { ... }
|
|
if (is_redirect($rc)) { ... }
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
I<HTTP::Status> is a library of routines for defining and
|
|
classifying HTTP status codes for libwww-perl. Status codes are
|
|
used to encode the overall outcome of a HTTP response message. Codes
|
|
correspond to those defined in RFC 2616 and RFC 2518.
|
|
|
|
=head1 CONSTANTS
|
|
|
|
The following constant functions can be used as mnemonic status code
|
|
names:
|
|
|
|
RC_CONTINUE (100)
|
|
RC_SWITCHING_PROTOCOLS (101)
|
|
RC_PROCESSING (102)
|
|
|
|
RC_OK (200)
|
|
RC_CREATED (201)
|
|
RC_ACCEPTED (202)
|
|
RC_NON_AUTHORITATIVE_INFORMATION (203)
|
|
RC_NO_CONTENT (204)
|
|
RC_RESET_CONTENT (205)
|
|
RC_PARTIAL_CONTENT (206)
|
|
RC_MULTI_STATUS (207)
|
|
|
|
RC_MULTIPLE_CHOICES (300)
|
|
RC_MOVED_PERMANENTLY (301)
|
|
RC_FOUND (302)
|
|
RC_SEE_OTHER (303)
|
|
RC_NOT_MODIFIED (304)
|
|
RC_USE_PROXY (305)
|
|
RC_TEMPORARY_REDIRECT (307)
|
|
|
|
RC_BAD_REQUEST (400)
|
|
RC_UNAUTHORIZED (401)
|
|
RC_PAYMENT_REQUIRED (402)
|
|
RC_FORBIDDEN (403)
|
|
RC_NOT_FOUND (404)
|
|
RC_METHOD_NOT_ALLOWED (405)
|
|
RC_NOT_ACCEPTABLE (406)
|
|
RC_PROXY_AUTHENTICATION_REQUIRED (407)
|
|
RC_REQUEST_TIMEOUT (408)
|
|
RC_CONFLICT (409)
|
|
RC_GONE (410)
|
|
RC_LENGTH_REQUIRED (411)
|
|
RC_PRECONDITION_FAILED (412)
|
|
RC_REQUEST_ENTITY_TOO_LARGE (413)
|
|
RC_REQUEST_URI_TOO_LARGE (414)
|
|
RC_UNSUPPORTED_MEDIA_TYPE (415)
|
|
RC_REQUEST_RANGE_NOT_SATISFIABLE (416)
|
|
RC_EXPECTATION_FAILED (417)
|
|
RC_UNPROCESSABLE_ENTITY (422)
|
|
RC_LOCKED (423)
|
|
RC_FAILED_DEPENDENCY (424)
|
|
|
|
RC_INTERNAL_SERVER_ERROR (500)
|
|
RC_NOT_IMPLEMENTED (501)
|
|
RC_BAD_GATEWAY (502)
|
|
RC_SERVICE_UNAVAILABLE (503)
|
|
RC_GATEWAY_TIMEOUT (504)
|
|
RC_HTTP_VERSION_NOT_SUPPORTED (505)
|
|
RC_INSUFFICIENT_STORAGE (507)
|
|
|
|
=cut
|
|
|
|
#####################################################################
|
|
|
|
use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
|
|
|
|
require Exporter;
|
|
@ISA = qw(Exporter);
|
|
@EXPORT = qw(is_info is_success is_redirect is_error status_message);
|
|
@EXPORT_OK = qw(is_client_error is_server_error);
|
|
$VERSION = sprintf("%d.%02d", q$Revision: 1.26 $ =~ /(\d+)\.(\d+)/);
|
|
|
|
# Note also addition of mnemonics to @EXPORT below
|
|
|
|
my %StatusCode = (
|
|
100 => 'Continue',
|
|
101 => 'Switching Protocols',
|
|
102 => 'Processing', # WebDAV
|
|
200 => 'OK',
|
|
201 => 'Created',
|
|
202 => 'Accepted',
|
|
203 => 'Non-Authoritative Information',
|
|
204 => 'No Content',
|
|
205 => 'Reset Content',
|
|
206 => 'Partial Content',
|
|
207 => 'Multi-Status', # WebDAV
|
|
300 => 'Multiple Choices',
|
|
301 => 'Moved Permanently',
|
|
302 => 'Found',
|
|
303 => 'See Other',
|
|
304 => 'Not Modified',
|
|
305 => 'Use Proxy',
|
|
307 => 'Temporary Redirect',
|
|
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',
|
|
416 => 'Request Range Not Satisfiable',
|
|
417 => 'Expectation Failed',
|
|
422 => 'Unprocessable Entity', # WebDAV
|
|
423 => 'Locked', # WebDAV
|
|
424 => 'Failed Dependency', # WebDAV
|
|
500 => 'Internal Server Error',
|
|
501 => 'Not Implemented',
|
|
502 => 'Bad Gateway',
|
|
503 => 'Service Unavailable',
|
|
504 => 'Gateway Timeout',
|
|
505 => 'HTTP Version Not Supported',
|
|
507 => 'Insufficient Storage', # WebDAV
|
|
);
|
|
|
|
my $mnemonicCode = '';
|
|
my ($code, $message);
|
|
while (($code, $message) = each %StatusCode) {
|
|
# create mnemonic subroutines
|
|
$message =~ tr/a-z \-/A-Z__/;
|
|
$mnemonicCode .= "sub RC_$message () { $code }\t";
|
|
# make them exportable
|
|
$mnemonicCode .= "push(\@EXPORT, 'RC_$message');\n";
|
|
}
|
|
# warn $mnemonicCode; # for development
|
|
eval $mnemonicCode; # only one eval for speed
|
|
die if $@;
|
|
|
|
# backwards compatibility
|
|
*RC_MOVED_TEMPORARILY = \&RC_FOUND; # 302 was renamed in the standard
|
|
push(@EXPORT, "RC_MOVED_TEMPORARILY");
|
|
|
|
|
|
=head1 FUNCTIONS
|
|
|
|
The following additional functions are provided. Most of them are
|
|
exported by default.
|
|
|
|
=over 4
|
|
|
|
=item status_message($code)
|
|
|
|
The status_message() function will translate status codes to human
|
|
readable strings. The string is the same as found in the constant
|
|
names above. If the $code is unknown, then C<undef> is returned.
|
|
|
|
=cut
|
|
|
|
sub status_message ($)
|
|
{
|
|
$StatusCode{$_[0]};
|
|
}
|
|
|
|
=item is_info($code)
|
|
|
|
Return TRUE if C<$code> is an I<Informational> status code. This
|
|
class of status code indicates a provisional response which can't have
|
|
any content.
|
|
|
|
=item is_success($code)
|
|
|
|
Return TRUE if C<$code> is a I<Successful> status code.
|
|
|
|
=item is_redirect($code)
|
|
|
|
Return TRUE if C<$code> is a I<Redirection> status code. This class of
|
|
status code indicates that further action needs to be taken by the
|
|
user agent in order to fulfill the request.
|
|
|
|
=item is_error($code)
|
|
|
|
Return TRUE if C<$code> is an I<Error> status code. The function
|
|
return TRUE for both client error or a server error status codes.
|
|
|
|
=item is_client_error($code)
|
|
|
|
Return TRUE if C<$code> is an I<Client Error> status code. This class
|
|
of status code is intended for cases in which the client seems to have
|
|
erred.
|
|
|
|
This function is B<not> exported by default.
|
|
|
|
=item is_server_error($code)
|
|
|
|
Return TRUE if C<$code> is an I<Server Error> status code. This class
|
|
of status codes is intended for cases in which the server is aware
|
|
that it has erred or is incapable of performing the request.
|
|
|
|
This function is B<not> exported by default.
|
|
|
|
=back
|
|
|
|
=cut
|
|
|
|
sub is_info ($) { $_[0] >= 100 && $_[0] < 200; }
|
|
sub is_success ($) { $_[0] >= 200 && $_[0] < 300; }
|
|
sub is_redirect ($) { $_[0] >= 300 && $_[0] < 400; }
|
|
sub is_error ($) { $_[0] >= 400 && $_[0] < 600; }
|
|
sub is_client_error ($) { $_[0] >= 400 && $_[0] < 500; }
|
|
sub is_server_error ($) { $_[0] >= 500 && $_[0] < 600; }
|
|
|
|
1;
|
|
|
|
=head1 BUGS
|
|
|
|
Wished @EXPORT_OK had been used instead of @EXPORT in the beginning.
|
|
Now too much is exported by default.
|
|
|
|
=cut
|