//
//  ========================================================================
//  Copyright (c) 1995-2019 Mort Bay Consulting Pty. Ltd.
//  ------------------------------------------------------------------------
//  All rights reserved. This program and the accompanying materials
//  are made available under the terms of the Eclipse Public License v1.0
//  and Apache License v2.0 which accompanies this distribution.
//
//      The Eclipse Public License is available at
//      http://www.eclipse.org/legal/epl-v10.html
//
//      The Apache License v2.0 is available at
//      http://www.opensource.org/licenses/apache2.0.php
//
//  You may elect to redistribute this code under either of these licenses.
//  ========================================================================
//

package org.eclipse.jetty.http;

import java.nio.ByteBuffer;

import org.eclipse.jetty.util.ArrayTrie;
import org.eclipse.jetty.util.StringUtil;
import org.eclipse.jetty.util.Trie;

public enum HttpHeader
{

    
General Fields.
/** * General Fields. */
CONNECTION("Connection"), CACHE_CONTROL("Cache-Control"), DATE("Date"), PRAGMA("Pragma"), PROXY_CONNECTION("Proxy-Connection"), TRAILER("Trailer"), TRANSFER_ENCODING("Transfer-Encoding"), UPGRADE("Upgrade"), VIA("Via"), WARNING("Warning"), NEGOTIATE("Negotiate"),
Entity Fields.
/** * Entity Fields. */
ALLOW("Allow"), CONTENT_ENCODING("Content-Encoding"), CONTENT_LANGUAGE("Content-Language"), CONTENT_LENGTH("Content-Length"), CONTENT_LOCATION("Content-Location"), CONTENT_MD5("Content-MD5"), CONTENT_RANGE("Content-Range"), CONTENT_TYPE("Content-Type"), EXPIRES("Expires"), LAST_MODIFIED("Last-Modified"),
Request Fields.
/** * Request Fields. */
ACCEPT("Accept"), ACCEPT_CHARSET("Accept-Charset"), ACCEPT_ENCODING("Accept-Encoding"), ACCEPT_LANGUAGE("Accept-Language"), AUTHORIZATION("Authorization"), EXPECT("Expect"), FORWARDED("Forwarded"), FROM("From"), HOST("Host"), IF_MATCH("If-Match"), IF_MODIFIED_SINCE("If-Modified-Since"), IF_NONE_MATCH("If-None-Match"), IF_RANGE("If-Range"), IF_UNMODIFIED_SINCE("If-Unmodified-Since"), KEEP_ALIVE("Keep-Alive"), MAX_FORWARDS("Max-Forwards"), PROXY_AUTHORIZATION("Proxy-Authorization"), RANGE("Range"), REQUEST_RANGE("Request-Range"), REFERER("Referer"), TE("TE"), USER_AGENT("User-Agent"), X_FORWARDED_FOR("X-Forwarded-For"), X_FORWARDED_PORT("X-Forwarded-Port"), X_FORWARDED_PROTO("X-Forwarded-Proto"), X_FORWARDED_SERVER("X-Forwarded-Server"), X_FORWARDED_HOST("X-Forwarded-Host"),
Response Fields.
/** * Response Fields. */
ACCEPT_RANGES("Accept-Ranges"), AGE("Age"), ETAG("ETag"), LOCATION("Location"), PROXY_AUTHENTICATE("Proxy-Authenticate"), RETRY_AFTER("Retry-After"), SERVER("Server"), SERVLET_ENGINE("Servlet-Engine"), VARY("Vary"), WWW_AUTHENTICATE("WWW-Authenticate"),
WebSocket Fields.
/** * WebSocket Fields. */
ORIGIN("Origin"), SEC_WEBSOCKET_KEY("Sec-WebSocket-Key"), SEC_WEBSOCKET_VERSION("Sec-WebSocket-Version"), SEC_WEBSOCKET_EXTENSIONS("Sec-WebSocket-Extensions"), SEC_WEBSOCKET_SUBPROTOCOL("Sec-WebSocket-Protocol"), SEC_WEBSOCKET_ACCEPT("Sec-WebSocket-Accept"),
Other Fields.
/** * Other Fields. */
COOKIE("Cookie"), SET_COOKIE("Set-Cookie"), SET_COOKIE2("Set-Cookie2"), MIME_VERSION("MIME-Version"), IDENTITY("identity"), X_POWERED_BY("X-Powered-By"), HTTP2_SETTINGS("HTTP2-Settings"), STRICT_TRANSPORT_SECURITY("Strict-Transport-Security"),
HTTP2 Fields.
/** * HTTP2 Fields. */
C_METHOD(":method"), C_SCHEME(":scheme"), C_AUTHORITY(":authority"), C_PATH(":path"), C_STATUS(":status"), UNKNOWN("::UNKNOWN::"); public static final Trie<HttpHeader> CACHE = new ArrayTrie<>(630); static { for (HttpHeader header : HttpHeader.values()) { if (header != UNKNOWN) if (!CACHE.put(header.toString(), header)) throw new IllegalStateException(); } } private final String _string; private final byte[] _bytes; private final byte[] _bytesColonSpace; private final ByteBuffer _buffer; HttpHeader(String s) { _string = s; _bytes = StringUtil.getBytes(s); _bytesColonSpace = StringUtil.getBytes(s + ": "); _buffer = ByteBuffer.wrap(_bytes); } public ByteBuffer toBuffer() { return _buffer.asReadOnlyBuffer(); } public byte[] getBytes() { return _bytes; } public byte[] getBytesColonSpace() { return _bytesColonSpace; } public boolean is(String s) { return _string.equalsIgnoreCase(s); } public String asString() { return _string; } @Override public String toString() { return _string; } }