/*
* JBoss, Home of Professional Open Source.
* Copyright 2014 Red Hat, Inc., and individual contributors
* as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.undertow.util;
/**
* @author Stuart Douglas
*/
public class
StatusCodes {
//chosen simply because it gives no collisions
//if more codes are added this will need to be re-evaluated
private static final int
SIZE = 0x2df;
private static final
Entry[]
TABLE = new
Entry[
SIZE];
public static final int
CONTINUE = 100;
public static final int
SWITCHING_PROTOCOLS = 101;
public static final int
PROCESSING = 102;
public static final int
OK = 200;
public static final int
CREATED = 201;
public static final int
ACCEPTED = 202;
public static final int
NON_AUTHORITATIVE_INFORMATION = 203;
public static final int
NO_CONTENT = 204;
public static final int
RESET_CONTENT = 205;
public static final int
PARTIAL_CONTENT = 206;
public static final int
MULTI_STATUS = 207;
public static final int
ALREADY_REPORTED = 208;
public static final int
IM_USED = 226;
public static final int
MULTIPLE_CHOICES = 300;
public static final int
MOVED_PERMANENTLY = 301;
@
Deprecated //typo, but left in for now due to backwards compat
public static final int
MOVED_PERMENANTLY =
MOVED_PERMANENTLY;
public static final int
FOUND = 302;
public static final int
SEE_OTHER = 303;
public static final int
NOT_MODIFIED = 304;
public static final int
USE_PROXY = 305;
public static final int
TEMPORARY_REDIRECT = 307;
public static final int
PERMANENT_REDIRECT = 308;
public static final int
BAD_REQUEST = 400;
public static final int
UNAUTHORIZED = 401;
public static final int
PAYMENT_REQUIRED = 402;
public static final int
FORBIDDEN = 403;
public static final int
NOT_FOUND = 404;
public static final int
METHOD_NOT_ALLOWED = 405;
public static final int
NOT_ACCEPTABLE = 406;
public static final int
PROXY_AUTHENTICATION_REQUIRED = 407;
public static final int
REQUEST_TIME_OUT = 408;
public static final int
CONFLICT = 409;
public static final int
GONE = 410;
public static final int
LENGTH_REQUIRED = 411;
public static final int
PRECONDITION_FAILED = 412;
public static final int
REQUEST_ENTITY_TOO_LARGE = 413;
public static final int
REQUEST_URI_TOO_LARGE = 414;
public static final int
UNSUPPORTED_MEDIA_TYPE = 415;
public static final int
REQUEST_RANGE_NOT_SATISFIABLE = 416;
public static final int
EXPECTATION_FAILED = 417;
public static final int
UNPROCESSABLE_ENTITY = 422;
public static final int
LOCKED = 423;
public static final int
FAILED_DEPENDENCY = 424;
public static final int
UPGRADE_REQUIRED = 426;
public static final int
PRECONDITION_REQUIRED = 428;
public static final int
TOO_MANY_REQUESTS = 429;
public static final int
REQUEST_HEADER_FIELDS_TOO_LARGE = 431;
public static final int
INTERNAL_SERVER_ERROR = 500;
public static final int
NOT_IMPLEMENTED = 501;
public static final int
BAD_GATEWAY = 502;
public static final int
SERVICE_UNAVAILABLE = 503;
public static final int
GATEWAY_TIME_OUT = 504;
public static final int
HTTP_VERSION_NOT_SUPPORTED = 505;
public static final int
INSUFFICIENT_STORAGE = 507;
public static final int
LOOP_DETECTED = 508;
public static final int
NOT_EXTENDED = 510;
public static final int
NETWORK_AUTHENTICATION_REQUIRED = 511;
public static final
String CONTINUE_STRING = "Continue";
public static final
String SWITCHING_PROTOCOLS_STRING = "Switching Protocols";
public static final
String PROCESSING_STRING = "Processing";
public static final
String OK_STRING = "OK";
public static final
String CREATED_STRING = "Created";
public static final
String ACCEPTED_STRING = "Accepted";
public static final
String NON_AUTHORITATIVE_INFORMATION_STRING = "Non-Authoritative Information";
public static final
String NO_CONTENT_STRING = "No Content";
public static final
String RESET_CONTENT_STRING = "Reset Content";
public static final
String PARTIAL_CONTENT_STRING = "Partial Content";
public static final
String MULTI_STATUS_STRING = "Multi-Status";
public static final
String ALREADY_REPORTED_STRING = "Already Reported";
public static final
String IM_USED_STRING = "IM Used";
public static final
String MULTIPLE_CHOICES_STRING = "Multiple Choices";
public static final
String MOVED_PERMANENTLY_STRING = "Moved Permanently";
public static final
String FOUND_STRING = "Found";
public static final
String SEE_OTHER_STRING = "See Other";
public static final
String NOT_MODIFIED_STRING = "Not Modified";
public static final
String USE_PROXY_STRING = "Use Proxy";
public static final
String TEMPORARY_REDIRECT_STRING = "Temporary Redirect";
public static final
String PERMANENT_REDIRECT_STRING = "Permanent Redirect";
public static final
String BAD_REQUEST_STRING = "Bad Request";
public static final
String UNAUTHORIZED_STRING = "Unauthorized";
public static final
String PAYMENT_REQUIRED_STRING = "Payment Required";
public static final
String FORBIDDEN_STRING = "Forbidden";
public static final
String NOT_FOUND_STRING = "Not Found";
public static final
String METHOD_NOT_ALLOWED_STRING = "Method Not Allowed";
public static final
String NOT_ACCEPTABLE_STRING = "Not Acceptable";
public static final
String PROXY_AUTHENTICATION_REQUIRED_STRING = "Proxy Authentication Required";
public static final
String REQUEST_TIME_OUT_STRING = "Request Time-out";
public static final
String CONFLICT_STRING = "Conflict";
public static final
String GONE_STRING = "Gone";
public static final
String LENGTH_REQUIRED_STRING = "Length Required";
public static final
String PRECONDITION_FAILED_STRING = "Precondition Failed";
public static final
String REQUEST_ENTITY_TOO_LARGE_STRING = "Request Entity Too Large";
public static final
String REQUEST_URI_TOO_LARGE_STRING = "Request-URI Too Large";
public static final
String UNSUPPORTED_MEDIA_TYPE_STRING = "Unsupported Media Type";
public static final
String REQUEST_RANGE_NOT_SATISFIABLE_STRING = "Requested range not satisfiable";
public static final
String EXPECTATION_FAILED_STRING = "Expectation Failed";
public static final
String UNPROCESSABLE_ENTITY_STRING = "Unprocessable Entity";
public static final
String LOCKED_STRING = "Locked";
public static final
String FAILED_DEPENDENCY_STRING = "Failed Dependency";
public static final
String UPGRADE_REQUIRED_STRING = "Upgrade Required";
public static final
String PRECONDITION_REQUIRED_STRING = "Precondition Required";
public static final
String TOO_MANY_REQUESTS_STRING = "Too Many Requests";
public static final
String REQUEST_HEADER_FIELDS_TOO_LARGE_STRING = "Request Header Fields Too Large";
public static final
String INTERNAL_SERVER_ERROR_STRING = "Internal Server Error";
public static final
String NOT_IMPLEMENTED_STRING = "Not Implemented";
public static final
String BAD_GATEWAY_STRING = "Bad Gateway";
public static final
String SERVICE_UNAVAILABLE_STRING = "Service Unavailable";
public static final
String GATEWAY_TIME_OUT_STRING = "Gateway Time-out";
public static final
String HTTP_VERSION_NOT_SUPPORTED_STRING = "HTTP Version not supported";
public static final
String INSUFFICIENT_STORAGE_STRING = "Insufficient Storage";
public static final
String LOOP_DETECTED_STRING = "Loop Detected";
public static final
String NOT_EXTENDED_STRING = "Not Extended";
public static final
String NETWORK_AUTHENTICATION_REQUIRED_STRING = "Network Authentication Required";
static {
putCode(
CONTINUE,
CONTINUE_STRING);
putCode(
SWITCHING_PROTOCOLS,
SWITCHING_PROTOCOLS_STRING);
putCode(
PROCESSING,
PROCESSING_STRING);
putCode(
OK,
OK_STRING);
putCode(
CREATED,
CREATED_STRING);
putCode(
ACCEPTED,
ACCEPTED_STRING);
putCode(
NON_AUTHORITATIVE_INFORMATION,
NON_AUTHORITATIVE_INFORMATION_STRING);
putCode(
NO_CONTENT,
NO_CONTENT_STRING);
putCode(
RESET_CONTENT,
RESET_CONTENT_STRING);
putCode(
PARTIAL_CONTENT,
PARTIAL_CONTENT_STRING);
putCode(
MULTI_STATUS,
MULTI_STATUS_STRING);
putCode(
ALREADY_REPORTED,
ALREADY_REPORTED_STRING);
putCode(
IM_USED,
IM_USED_STRING);
putCode(
MULTIPLE_CHOICES,
MULTIPLE_CHOICES_STRING);
putCode(
MOVED_PERMANENTLY,
MOVED_PERMANENTLY_STRING);
putCode(
FOUND,
FOUND_STRING);
putCode(
SEE_OTHER,
SEE_OTHER_STRING);
putCode(
NOT_MODIFIED,
NOT_MODIFIED_STRING);
putCode(
USE_PROXY,
USE_PROXY_STRING);
putCode(
TEMPORARY_REDIRECT,
TEMPORARY_REDIRECT_STRING);
putCode(
PERMANENT_REDIRECT,
PERMANENT_REDIRECT_STRING);
putCode(
BAD_REQUEST,
BAD_REQUEST_STRING);
putCode(
UNAUTHORIZED,
UNAUTHORIZED_STRING);
putCode(
PAYMENT_REQUIRED,
PAYMENT_REQUIRED_STRING);
putCode(
FORBIDDEN,
FORBIDDEN_STRING);
putCode(
NOT_FOUND,
NOT_FOUND_STRING);
putCode(
METHOD_NOT_ALLOWED,
METHOD_NOT_ALLOWED_STRING);
putCode(
NOT_ACCEPTABLE,
NOT_ACCEPTABLE_STRING);
putCode(
PROXY_AUTHENTICATION_REQUIRED,
PROXY_AUTHENTICATION_REQUIRED_STRING);
putCode(
REQUEST_TIME_OUT,
REQUEST_TIME_OUT_STRING);
putCode(
CONFLICT,
CONFLICT_STRING);
putCode(
GONE,
GONE_STRING);
putCode(
LENGTH_REQUIRED,
LENGTH_REQUIRED_STRING);
putCode(
PRECONDITION_FAILED,
PRECONDITION_FAILED_STRING);
putCode(
REQUEST_ENTITY_TOO_LARGE,
REQUEST_ENTITY_TOO_LARGE_STRING);
putCode(
REQUEST_URI_TOO_LARGE,
REQUEST_URI_TOO_LARGE_STRING);
putCode(
UNSUPPORTED_MEDIA_TYPE,
UNSUPPORTED_MEDIA_TYPE_STRING);
putCode(
REQUEST_RANGE_NOT_SATISFIABLE,
REQUEST_RANGE_NOT_SATISFIABLE_STRING);
putCode(
EXPECTATION_FAILED,
EXPECTATION_FAILED_STRING);
putCode(
UNPROCESSABLE_ENTITY,
UNPROCESSABLE_ENTITY_STRING);
putCode(
LOCKED,
LOCKED_STRING);
putCode(
FAILED_DEPENDENCY,
FAILED_DEPENDENCY_STRING);
putCode(
UPGRADE_REQUIRED,
UPGRADE_REQUIRED_STRING);
putCode(
PRECONDITION_REQUIRED,
PRECONDITION_REQUIRED_STRING);
putCode(
TOO_MANY_REQUESTS,
TOO_MANY_REQUESTS_STRING);
putCode(
REQUEST_HEADER_FIELDS_TOO_LARGE,
REQUEST_HEADER_FIELDS_TOO_LARGE_STRING);
putCode(
INTERNAL_SERVER_ERROR,
INTERNAL_SERVER_ERROR_STRING);
putCode(
NOT_IMPLEMENTED,
NOT_IMPLEMENTED_STRING);
putCode(
BAD_GATEWAY,
BAD_GATEWAY_STRING);
putCode(
SERVICE_UNAVAILABLE,
SERVICE_UNAVAILABLE_STRING);
putCode(
GATEWAY_TIME_OUT,
GATEWAY_TIME_OUT_STRING);
putCode(
HTTP_VERSION_NOT_SUPPORTED,
HTTP_VERSION_NOT_SUPPORTED_STRING);
putCode(
INSUFFICIENT_STORAGE,
INSUFFICIENT_STORAGE_STRING);
putCode(
LOOP_DETECTED,
LOOP_DETECTED_STRING);
putCode(
NOT_EXTENDED,
NOT_EXTENDED_STRING);
putCode(
NETWORK_AUTHENTICATION_REQUIRED,
NETWORK_AUTHENTICATION_REQUIRED_STRING);
}
private static void
putCode(int
code,
String reason) {
Entry e = new
Entry(
reason,
code);
int
h =
code &
SIZE;
if(
TABLE[
h] != null) {
throw new
IllegalArgumentException("hash collision");
}
TABLE[
h] =
e;
}
private
StatusCodes() {
}
public static final
String getReason(final int
code) {
final
Entry result =
TABLE[
code &
SIZE];
if (
result == null ||
result.
code !=
code) {
return "Unknown";
} else {
return
result.
reason;
}
}
private static final class
Entry {
final
String reason;
final int
code;
private
Entry(final
String reason, final int
code) {
this.
reason =
reason;
this.
code =
code;
}
}
}