// ========================================================================
// Copyright 2004-2005 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// 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 org.mortbay.jetty;

import org.mortbay.io.Buffer;
import org.mortbay.io.BufferCache;

/* ------------------------------------------------------------------------------- */
/** 
 * 
 * @author gregw
 */
public class HttpHeaders extends BufferCache
{
    /* ------------------------------------------------------------ */
    /** General Fields.
     */
    public final static String 
        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";

    /* ------------------------------------------------------------ */
    /** Entity Fields.
     */
    public final static String 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.
     */
    public final static String 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";

    /* ------------------------------------------------------------ */
    /** Response Fields.
     */
    public final static String 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";

    /* ------------------------------------------------------------ */
    /** Other Fields.
     */
    public final static String COOKIE= "Cookie",
        SET_COOKIE= "Set-Cookie",
        SET_COOKIE2= "Set-Cookie2",
        MIME_VERSION= "MIME-Version",
        IDENTITY= "identity";

    public final static int CONNECTION_ORDINAL= 1,
        DATE_ORDINAL= 2,
        PRAGMA_ORDINAL= 3,
        TRAILER_ORDINAL= 4,
        TRANSFER_ENCODING_ORDINAL= 5,
        UPGRADE_ORDINAL= 6,
        VIA_ORDINAL= 7,
        WARNING_ORDINAL= 8,
        ALLOW_ORDINAL= 9,
        CONTENT_ENCODING_ORDINAL= 10,
        CONTENT_LANGUAGE_ORDINAL= 11,
        CONTENT_LENGTH_ORDINAL= 12,
        CONTENT_LOCATION_ORDINAL= 13,
        CONTENT_MD5_ORDINAL= 14,
        CONTENT_RANGE_ORDINAL= 15,
        CONTENT_TYPE_ORDINAL= 16,
        EXPIRES_ORDINAL= 17,
        LAST_MODIFIED_ORDINAL= 18,
        ACCEPT_ORDINAL= 19,
        ACCEPT_CHARSET_ORDINAL= 20,
        ACCEPT_ENCODING_ORDINAL= 21,
        ACCEPT_LANGUAGE_ORDINAL= 22,
        AUTHORIZATION_ORDINAL= 23,
        EXPECT_ORDINAL= 24,
        FORWARDED_ORDINAL= 25,
        FROM_ORDINAL= 26,
        HOST_ORDINAL= 27,
        IF_MATCH_ORDINAL= 28,
        IF_MODIFIED_SINCE_ORDINAL= 29,
        IF_NONE_MATCH_ORDINAL= 30,
        IF_RANGE_ORDINAL= 31,
        IF_UNMODIFIED_SINCE_ORDINAL= 32,
        KEEP_ALIVE_ORDINAL= 33,
        MAX_FORWARDS_ORDINAL= 34,
        PROXY_AUTHORIZATION_ORDINAL= 35,
        RANGE_ORDINAL= 36,
        REQUEST_RANGE_ORDINAL= 37,
        REFERER_ORDINAL= 38,
        TE_ORDINAL= 39,
        USER_AGENT_ORDINAL= 40,
        X_FORWARDED_FOR_ORDINAL= 41,
        ACCEPT_RANGES_ORDINAL= 42,
        AGE_ORDINAL= 43,
        ETAG_ORDINAL= 44,
        LOCATION_ORDINAL= 45,
        PROXY_AUTHENTICATE_ORDINAL= 46,
        RETRY_AFTER_ORDINAL= 47,
        SERVER_ORDINAL= 48,
        SERVLET_ENGINE_ORDINAL= 49,
        VARY_ORDINAL= 50,
        WWW_AUTHENTICATE_ORDINAL= 51,
        COOKIE_ORDINAL= 52,
        SET_COOKIE_ORDINAL= 53,
        SET_COOKIE2_ORDINAL= 54,
        MIME_VERSION_ORDINAL= 55,
        IDENTITY_ORDINAL= 56,
        CACHE_CONTROL_ORDINAL=57,
        PROXY_CONNECTION_ORDINAL=58;

    public final static HttpHeaders CACHE= new HttpHeaders();
    
    public final static Buffer
        HOST_BUFFER=CACHE.add(HOST,HOST_ORDINAL),
        ACCEPT_BUFFER=CACHE.add(ACCEPT,ACCEPT_ORDINAL),
        ACCEPT_CHARSET_BUFFER=CACHE.add(ACCEPT_CHARSET,ACCEPT_CHARSET_ORDINAL),
        ACCEPT_ENCODING_BUFFER=CACHE.add(ACCEPT_ENCODING,ACCEPT_ENCODING_ORDINAL),
        ACCEPT_LANGUAGE_BUFFER=CACHE.add(ACCEPT_LANGUAGE,ACCEPT_LANGUAGE_ORDINAL),
        
        CONTENT_LENGTH_BUFFER=CACHE.add(CONTENT_LENGTH,CONTENT_LENGTH_ORDINAL),
        CONNECTION_BUFFER=CACHE.add(CONNECTION,CONNECTION_ORDINAL),
        CACHE_CONTROL_BUFFER=CACHE.add(CACHE_CONTROL,CACHE_CONTROL_ORDINAL),
        DATE_BUFFER=CACHE.add(DATE,DATE_ORDINAL),
        PRAGMA_BUFFER=CACHE.add(PRAGMA,PRAGMA_ORDINAL),
        TRAILER_BUFFER=CACHE.add(TRAILER,TRAILER_ORDINAL),
        TRANSFER_ENCODING_BUFFER=CACHE.add(TRANSFER_ENCODING,TRANSFER_ENCODING_ORDINAL),
        UPGRADE_BUFFER=CACHE.add(UPGRADE,UPGRADE_ORDINAL),
        VIA_BUFFER=CACHE.add(VIA,VIA_ORDINAL),
        WARNING_BUFFER=CACHE.add(WARNING,WARNING_ORDINAL),
        ALLOW_BUFFER=CACHE.add(ALLOW,ALLOW_ORDINAL),
        CONTENT_ENCODING_BUFFER=CACHE.add(CONTENT_ENCODING,CONTENT_ENCODING_ORDINAL),
        CONTENT_LANGUAGE_BUFFER=CACHE.add(CONTENT_LANGUAGE,CONTENT_LANGUAGE_ORDINAL),
        CONTENT_LOCATION_BUFFER=CACHE.add(CONTENT_LOCATION,CONTENT_LOCATION_ORDINAL),
        CONTENT_MD5_BUFFER=CACHE.add(CONTENT_MD5,CONTENT_MD5_ORDINAL),
        CONTENT_RANGE_BUFFER=CACHE.add(CONTENT_RANGE,CONTENT_RANGE_ORDINAL),
        CONTENT_TYPE_BUFFER=CACHE.add(CONTENT_TYPE,CONTENT_TYPE_ORDINAL),
        EXPIRES_BUFFER=CACHE.add(EXPIRES,EXPIRES_ORDINAL),
        LAST_MODIFIED_BUFFER=CACHE.add(LAST_MODIFIED,LAST_MODIFIED_ORDINAL),
        AUTHORIZATION_BUFFER=CACHE.add(AUTHORIZATION,AUTHORIZATION_ORDINAL),
        EXPECT_BUFFER=CACHE.add(EXPECT,EXPECT_ORDINAL),
        FORWARDED_BUFFER=CACHE.add(FORWARDED,FORWARDED_ORDINAL),
        FROM_BUFFER=CACHE.add(FROM,FROM_ORDINAL),
        IF_MATCH_BUFFER=CACHE.add(IF_MATCH,IF_MATCH_ORDINAL),
        IF_MODIFIED_SINCE_BUFFER=CACHE.add(IF_MODIFIED_SINCE,IF_MODIFIED_SINCE_ORDINAL),
        IF_NONE_MATCH_BUFFER=CACHE.add(IF_NONE_MATCH,IF_NONE_MATCH_ORDINAL),
        IF_RANGE_BUFFER=CACHE.add(IF_RANGE,IF_RANGE_ORDINAL),
        IF_UNMODIFIED_SINCE_BUFFER=CACHE.add(IF_UNMODIFIED_SINCE,IF_UNMODIFIED_SINCE_ORDINAL),
        KEEP_ALIVE_BUFFER=CACHE.add(KEEP_ALIVE,KEEP_ALIVE_ORDINAL),
        MAX_FORWARDS_BUFFER=CACHE.add(MAX_FORWARDS,MAX_FORWARDS_ORDINAL),
        PROXY_AUTHORIZATION_BUFFER=CACHE.add(PROXY_AUTHORIZATION,PROXY_AUTHORIZATION_ORDINAL),
        RANGE_BUFFER=CACHE.add(RANGE,RANGE_ORDINAL),
        REQUEST_RANGE_BUFFER=CACHE.add(REQUEST_RANGE,REQUEST_RANGE_ORDINAL),
        REFERER_BUFFER=CACHE.add(REFERER,REFERER_ORDINAL),
        TE_BUFFER=CACHE.add(TE,TE_ORDINAL),
        USER_AGENT_BUFFER=CACHE.add(USER_AGENT,USER_AGENT_ORDINAL),
        X_FORWARDED_FOR_BUFFER=CACHE.add(X_FORWARDED_FOR,X_FORWARDED_FOR_ORDINAL),
        ACCEPT_RANGES_BUFFER=CACHE.add(ACCEPT_RANGES,ACCEPT_RANGES_ORDINAL),
        AGE_BUFFER=CACHE.add(AGE,AGE_ORDINAL),
        ETAG_BUFFER=CACHE.add(ETAG,ETAG_ORDINAL),
        LOCATION_BUFFER=CACHE.add(LOCATION,LOCATION_ORDINAL),
        PROXY_AUTHENTICATE_BUFFER=CACHE.add(PROXY_AUTHENTICATE,PROXY_AUTHENTICATE_ORDINAL),
        RETRY_AFTER_BUFFER=CACHE.add(RETRY_AFTER,RETRY_AFTER_ORDINAL),
        SERVER_BUFFER=CACHE.add(SERVER,SERVER_ORDINAL),
        SERVLET_ENGINE_BUFFER=CACHE.add(SERVLET_ENGINE,SERVLET_ENGINE_ORDINAL),
        VARY_BUFFER=CACHE.add(VARY,VARY_ORDINAL),
        WWW_AUTHENTICATE_BUFFER=CACHE.add(WWW_AUTHENTICATE,WWW_AUTHENTICATE_ORDINAL),
        COOKIE_BUFFER=CACHE.add(COOKIE,COOKIE_ORDINAL),
        SET_COOKIE_BUFFER=CACHE.add(SET_COOKIE,SET_COOKIE_ORDINAL),
        SET_COOKIE2_BUFFER=CACHE.add(SET_COOKIE2,SET_COOKIE2_ORDINAL),
        MIME_VERSION_BUFFER=CACHE.add(MIME_VERSION,MIME_VERSION_ORDINAL),
        IDENTITY_BUFFER=CACHE.add(IDENTITY,IDENTITY_ORDINAL),
        PROXY_CONNECTION_BUFFER=CACHE.add(PROXY_CONNECTION,PROXY_CONNECTION_ORDINAL);
}
