/*
* Copyright (c) 2011, 2017 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package org.glassfish.grizzly.http.util;
import java.util.Locale;
import java.util.Map;
import java.util.TreeMap;
import org.glassfish.grizzly.utils.Charsets;
Enumeration of all headers as defined in RFC 2616
.
Since: 2.1.2
/**
* Enumeration of all headers as defined in <code>RFC 2616</code>.
*
* @since 2.1.2
*/
public enum Header {
Accept("Accept"),
AcceptCharset("Accept-Charset"),
AcceptEncoding("Accept-Encoding"),
AcceptRanges("Accept-Ranges"),
Age("Age"),
Allow("Allow"),
Authorization("Authorization"),
CacheControl("Cache-Control"),
Cookie("Cookie"),
Connection("Connection"),
ContentDisposition("Content-Disposition"),
ContentEncoding("Content-Encoding"),
ContentLanguage("Content-Language"),
ContentLength("Content-Length"),
ContentLocation("Content-Location"),
ContentMD5("Content-MD5"),
ContentRange("Content-Range"),
ContentType("Content-Type"),
Date("Date"),
ETag("ETag"),
Expect("Expect"),
Expires("Expires"),
From("From"),
Host("Host"),
IfMatch("If-Match"),
IfModifiedSince("If-Modified-Since"),
IfNoneMatch("If-None-Match"),
IfRange("If-Range"),
IfUnmodifiedSince("If-Unmodified-Since"),
KeepAlive("Keep-Alive"),
LastModified("Last-Modified"),
Location("Location"),
MaxForwards("Max-Forwards"),
Pragma("Pragma"),
ProxyAuthenticate("Proxy-Authenticate"),
ProxyAuthorization("Proxy-Authorization"),
ProxyConnection("Proxy-Connection"),
Range("Range"),
@SuppressWarnings("SpellCheckingInspection")
Referer("Referer"),
RetryAfter("Retry-After"),
Server("Server"),
SetCookie("Set-Cookie"),
TE("TE"),
Trailer("Trailer"),
TransferEncoding("Transfer-Encoding"),
Upgrade("Upgrade"),
UserAgent("User-Agent"),
Vary("Vary"),
Via("Via"),
Warnings("Warning"),
WWWAuthenticate("WWW-Authenticate"),
XPoweredBy("X-Powered-By"),
HTTP2Settings("HTTP2-Settings");
// ----------------------------------------------------------------- Statics
private static final Map<String,Header> VALUES = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
static {
for (final Header h : Header.values()) {
VALUES.put(h.toString(), h);
}
}
// --------------------------------------------------------- Per Enum Fields
private final byte[] headerNameBytes;
private final byte[] headerNameLowerCaseBytes;
private final String headerName;
private final String headerNameLowerCase;
private final int length;
// ------------------------------------------------------------ Constructors
Header(final String headerName) {
this.headerName = headerName;
headerNameBytes = headerName.getBytes(Charsets.ASCII_CHARSET);
this.headerNameLowerCase = headerName.toLowerCase(Locale.ENGLISH);
headerNameLowerCaseBytes = headerNameLowerCase.getBytes(Charsets.ASCII_CHARSET);
length = headerNameBytes.length;
}
// ---------------------------------------------------------- Public Methods
Returns the byte representation of this header encoded using
ISO-8859-1
.
Returns: the byte representation of this header encoded using
ISO-8859-1
.
/**
* <p>
* Returns the byte representation of this header encoded using
* <code>ISO-8859-1</code>.
* </p>
*
* @return the byte representation of this header encoded using
* <code>ISO-8859-1</code>.
*/
public final byte[] getBytes() {
return headerNameBytes;
}
Returns the lower-case String
representation of this header.
Returns: the lower-case String
representation of this header
/**
* <p>
* Returns the lower-case {@link String} representation of this header.
* </p>
*
* @return the lower-case {@link String} representation of this header
*/
public final String getLowerCase() {
return headerNameLowerCase;
}
Returns the lower-case byte representation of this header encoded using
ISO-8859-1
.
Returns: the lower-case byte representation of this header encoded using
ISO-8859-1
.
/**
* <p>
* Returns the lower-case byte representation of this header encoded using
* <code>ISO-8859-1</code>.
* </p>
*
* @return the lower-case byte representation of this header encoded using
* <code>ISO-8859-1</code>.
*/
public final byte[] getLowerCaseBytes() {
return headerNameLowerCaseBytes;
}
Returns the length this header encoded using ISO-8859-1
.
Returns: the length this header encoded using ISO-8859-1
.
/**
* <p>
* Returns the length this header encoded using <code>ISO-8859-1</code>.
* </p>
*
* @return the length this header encoded using <code>ISO-8859-1</code>.
*/
public final int getLength() {
return length;
}
Returns the name of the header properly hyphenated if necessary.
Returns: Returns the name of the header properly hyphenated if necessary.
/**
* <p>
* Returns the name of the header properly hyphenated if necessary.
* </p>
*
* @return Returns the name of the header properly hyphenated if necessary.
*/
@Override
public final String toString() {
return headerName;
}
Returns the US-ASCII encoded byte representation of this Header
.
Returns: the US-ASCII encoded byte representation of this Header
.
/**
* <p>
* Returns the US-ASCII encoded byte representation of this <code>Header</code>.
* </p>
* @return the US-ASCII encoded byte representation of this <code>Header</code>.
*/
public final byte[] toByteArray() {
return headerNameBytes;
}
Attempts to find a HTTP header by it's standard textual definition which may differ from value value returned by Enum<Header>.name
. Note that this search is case insensitive.
Params: - name – the name of the
Header
to attempt to find.
Returns: the Header
for the specified text representation.
If no Header
matches or if the specified argument is
null/zero-length
, this method returns null.
/**
* <p>
* Attempts to find a HTTP header by it's standard textual definition which
* may differ from value value returned by {@link #name}. Note that this
* search is case insensitive.
* </p>
*
* @param name the name of the <code>Header</code> to attempt to find.
*
* @return the <code>Header</code> for the specified text representation.
* If no <code>Header</code> matches or if the specified argument is
* <code>null/zero-length</code>, this method returns </code>null</code>.
*/
public static Header find(final String name) {
if (name == null || name.isEmpty()) {
return null;
}
return VALUES.get(name);
}
}