mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 22:55:23 +00:00
225 lines
8.0 KiB
Java
225 lines
8.0 KiB
Java
/*
|
|
* ====================================================================
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you 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.
|
|
* ====================================================================
|
|
*
|
|
* This software consists of voluntary contributions made by many
|
|
* individuals on behalf of the Apache Software Foundation. For more
|
|
* information on the Apache Software Foundation, please see
|
|
* <http://www.apache.org/>.
|
|
*
|
|
*/
|
|
|
|
package ch.boye.httpclientandroidlib.impl;
|
|
|
|
import java.util.Locale;
|
|
|
|
import ch.boye.httpclientandroidlib.HttpStatus;
|
|
import ch.boye.httpclientandroidlib.ReasonPhraseCatalog;
|
|
|
|
/**
|
|
* English reason phrases for HTTP status codes.
|
|
* All status codes defined in RFC1945 (HTTP/1.0), RFC2616 (HTTP/1.1), and
|
|
* RFC2518 (WebDAV) are supported.
|
|
*
|
|
* @since 4.0
|
|
*/
|
|
public class EnglishReasonPhraseCatalog implements ReasonPhraseCatalog {
|
|
|
|
// static array with english reason phrases defined below
|
|
|
|
/**
|
|
* The default instance of this catalog.
|
|
* This catalog is thread safe, so there typically
|
|
* is no need to create other instances.
|
|
*/
|
|
public final static EnglishReasonPhraseCatalog INSTANCE =
|
|
new EnglishReasonPhraseCatalog();
|
|
|
|
|
|
/**
|
|
* Restricted default constructor, for derived classes.
|
|
* If you need an instance of this class, use {@link #INSTANCE INSTANCE}.
|
|
*/
|
|
protected EnglishReasonPhraseCatalog() {
|
|
// no body
|
|
}
|
|
|
|
|
|
/**
|
|
* Obtains the reason phrase for a status code.
|
|
*
|
|
* @param status the status code, in the range 100-599
|
|
* @param loc ignored
|
|
*
|
|
* @return the reason phrase, or <code>null</code>
|
|
*/
|
|
public String getReason(int status, Locale loc) {
|
|
if ((status < 100) || (status >= 600)) {
|
|
throw new IllegalArgumentException
|
|
("Unknown category for status code " + status + ".");
|
|
}
|
|
|
|
final int category = status / 100;
|
|
final int subcode = status - 100*category;
|
|
|
|
String reason = null;
|
|
if (REASON_PHRASES[category].length > subcode)
|
|
reason = REASON_PHRASES[category][subcode];
|
|
|
|
return reason;
|
|
}
|
|
|
|
|
|
/** Reason phrases lookup table. */
|
|
private static final String[][] REASON_PHRASES = new String[][]{
|
|
null,
|
|
new String[3], // 1xx
|
|
new String[8], // 2xx
|
|
new String[8], // 3xx
|
|
new String[25], // 4xx
|
|
new String[8] // 5xx
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
* Stores the given reason phrase, by status code.
|
|
* Helper method to initialize the static lookup table.
|
|
*
|
|
* @param status the status code for which to define the phrase
|
|
* @param reason the reason phrase for this status code
|
|
*/
|
|
private static void setReason(int status, String reason) {
|
|
final int category = status / 100;
|
|
final int subcode = status - 100*category;
|
|
REASON_PHRASES[category][subcode] = reason;
|
|
}
|
|
|
|
|
|
// ----------------------------------------------------- Static Initializer
|
|
|
|
/** Set up status code to "reason phrase" map. */
|
|
static {
|
|
// HTTP 1.0 Server status codes -- see RFC 1945
|
|
setReason(HttpStatus.SC_OK,
|
|
"OK");
|
|
setReason(HttpStatus.SC_CREATED,
|
|
"Created");
|
|
setReason(HttpStatus.SC_ACCEPTED,
|
|
"Accepted");
|
|
setReason(HttpStatus.SC_NO_CONTENT,
|
|
"No Content");
|
|
setReason(HttpStatus.SC_MOVED_PERMANENTLY,
|
|
"Moved Permanently");
|
|
setReason(HttpStatus.SC_MOVED_TEMPORARILY,
|
|
"Moved Temporarily");
|
|
setReason(HttpStatus.SC_NOT_MODIFIED,
|
|
"Not Modified");
|
|
setReason(HttpStatus.SC_BAD_REQUEST,
|
|
"Bad Request");
|
|
setReason(HttpStatus.SC_UNAUTHORIZED,
|
|
"Unauthorized");
|
|
setReason(HttpStatus.SC_FORBIDDEN,
|
|
"Forbidden");
|
|
setReason(HttpStatus.SC_NOT_FOUND,
|
|
"Not Found");
|
|
setReason(HttpStatus.SC_INTERNAL_SERVER_ERROR,
|
|
"Internal Server Error");
|
|
setReason(HttpStatus.SC_NOT_IMPLEMENTED,
|
|
"Not Implemented");
|
|
setReason(HttpStatus.SC_BAD_GATEWAY,
|
|
"Bad Gateway");
|
|
setReason(HttpStatus.SC_SERVICE_UNAVAILABLE,
|
|
"Service Unavailable");
|
|
|
|
// HTTP 1.1 Server status codes -- see RFC 2048
|
|
setReason(HttpStatus.SC_CONTINUE,
|
|
"Continue");
|
|
setReason(HttpStatus.SC_TEMPORARY_REDIRECT,
|
|
"Temporary Redirect");
|
|
setReason(HttpStatus.SC_METHOD_NOT_ALLOWED,
|
|
"Method Not Allowed");
|
|
setReason(HttpStatus.SC_CONFLICT,
|
|
"Conflict");
|
|
setReason(HttpStatus.SC_PRECONDITION_FAILED,
|
|
"Precondition Failed");
|
|
setReason(HttpStatus.SC_REQUEST_TOO_LONG,
|
|
"Request Too Long");
|
|
setReason(HttpStatus.SC_REQUEST_URI_TOO_LONG,
|
|
"Request-URI Too Long");
|
|
setReason(HttpStatus.SC_UNSUPPORTED_MEDIA_TYPE,
|
|
"Unsupported Media Type");
|
|
setReason(HttpStatus.SC_MULTIPLE_CHOICES,
|
|
"Multiple Choices");
|
|
setReason(HttpStatus.SC_SEE_OTHER,
|
|
"See Other");
|
|
setReason(HttpStatus.SC_USE_PROXY,
|
|
"Use Proxy");
|
|
setReason(HttpStatus.SC_PAYMENT_REQUIRED,
|
|
"Payment Required");
|
|
setReason(HttpStatus.SC_NOT_ACCEPTABLE,
|
|
"Not Acceptable");
|
|
setReason(HttpStatus.SC_PROXY_AUTHENTICATION_REQUIRED,
|
|
"Proxy Authentication Required");
|
|
setReason(HttpStatus.SC_REQUEST_TIMEOUT,
|
|
"Request Timeout");
|
|
|
|
setReason(HttpStatus.SC_SWITCHING_PROTOCOLS,
|
|
"Switching Protocols");
|
|
setReason(HttpStatus.SC_NON_AUTHORITATIVE_INFORMATION,
|
|
"Non Authoritative Information");
|
|
setReason(HttpStatus.SC_RESET_CONTENT,
|
|
"Reset Content");
|
|
setReason(HttpStatus.SC_PARTIAL_CONTENT,
|
|
"Partial Content");
|
|
setReason(HttpStatus.SC_GATEWAY_TIMEOUT,
|
|
"Gateway Timeout");
|
|
setReason(HttpStatus.SC_HTTP_VERSION_NOT_SUPPORTED,
|
|
"Http Version Not Supported");
|
|
setReason(HttpStatus.SC_GONE,
|
|
"Gone");
|
|
setReason(HttpStatus.SC_LENGTH_REQUIRED,
|
|
"Length Required");
|
|
setReason(HttpStatus.SC_REQUESTED_RANGE_NOT_SATISFIABLE,
|
|
"Requested Range Not Satisfiable");
|
|
setReason(HttpStatus.SC_EXPECTATION_FAILED,
|
|
"Expectation Failed");
|
|
|
|
// WebDAV Server-specific status codes
|
|
setReason(HttpStatus.SC_PROCESSING,
|
|
"Processing");
|
|
setReason(HttpStatus.SC_MULTI_STATUS,
|
|
"Multi-Status");
|
|
setReason(HttpStatus.SC_UNPROCESSABLE_ENTITY,
|
|
"Unprocessable Entity");
|
|
setReason(HttpStatus.SC_INSUFFICIENT_SPACE_ON_RESOURCE,
|
|
"Insufficient Space On Resource");
|
|
setReason(HttpStatus.SC_METHOD_FAILURE,
|
|
"Method Failure");
|
|
setReason(HttpStatus.SC_LOCKED,
|
|
"Locked");
|
|
setReason(HttpStatus.SC_INSUFFICIENT_STORAGE,
|
|
"Insufficient Storage");
|
|
setReason(HttpStatus.SC_FAILED_DEPENDENCY,
|
|
"Failed Dependency");
|
|
}
|
|
|
|
|
|
}
|