103928aee4356845252ac6b662d5c72c29903813eJake Slack//
203928aee4356845252ac6b662d5c72c29903813eJake Slack//  ========================================================================
303928aee4356845252ac6b662d5c72c29903813eJake Slack//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
403928aee4356845252ac6b662d5c72c29903813eJake Slack//  ------------------------------------------------------------------------
503928aee4356845252ac6b662d5c72c29903813eJake Slack//  All rights reserved. This program and the accompanying materials
603928aee4356845252ac6b662d5c72c29903813eJake Slack//  are made available under the terms of the Eclipse Public License v1.0
703928aee4356845252ac6b662d5c72c29903813eJake Slack//  and Apache License v2.0 which accompanies this distribution.
803928aee4356845252ac6b662d5c72c29903813eJake Slack//
903928aee4356845252ac6b662d5c72c29903813eJake Slack//      The Eclipse Public License is available at
1003928aee4356845252ac6b662d5c72c29903813eJake Slack//      http://www.eclipse.org/legal/epl-v10.html
1103928aee4356845252ac6b662d5c72c29903813eJake Slack//
1203928aee4356845252ac6b662d5c72c29903813eJake Slack//      The Apache License v2.0 is available at
1303928aee4356845252ac6b662d5c72c29903813eJake Slack//      http://www.opensource.org/licenses/apache2.0.php
1403928aee4356845252ac6b662d5c72c29903813eJake Slack//
1503928aee4356845252ac6b662d5c72c29903813eJake Slack//  You may elect to redistribute this code under either of these licenses.
1603928aee4356845252ac6b662d5c72c29903813eJake Slack//  ========================================================================
1703928aee4356845252ac6b662d5c72c29903813eJake Slack//
1803928aee4356845252ac6b662d5c72c29903813eJake Slack
1903928aee4356845252ac6b662d5c72c29903813eJake Slackpackage org.eclipse.jetty.http;
2003928aee4356845252ac6b662d5c72c29903813eJake Slack
2103928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.io.Buffer;
2203928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.io.BufferCache;
2303928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.io.ByteArrayBuffer;
2403928aee4356845252ac6b662d5c72c29903813eJake Slack
2503928aee4356845252ac6b662d5c72c29903813eJake Slack/**
2603928aee4356845252ac6b662d5c72c29903813eJake Slack * Cached HTTP Header values.
2703928aee4356845252ac6b662d5c72c29903813eJake Slack * This class caches the conversion of common HTTP Header values to and from {@link ByteArrayBuffer} instances.
2803928aee4356845252ac6b662d5c72c29903813eJake Slack * The resource "/org/eclipse/jetty/useragents" is checked for a list of common user agents, so that repeated
2903928aee4356845252ac6b662d5c72c29903813eJake Slack * creation of strings for these agents can be avoided.
3003928aee4356845252ac6b662d5c72c29903813eJake Slack *
3103928aee4356845252ac6b662d5c72c29903813eJake Slack *
3203928aee4356845252ac6b662d5c72c29903813eJake Slack */
3303928aee4356845252ac6b662d5c72c29903813eJake Slackpublic class HttpHeaderValues extends BufferCache
3403928aee4356845252ac6b662d5c72c29903813eJake Slack{
3503928aee4356845252ac6b662d5c72c29903813eJake Slack    public final static String
3603928aee4356845252ac6b662d5c72c29903813eJake Slack        CLOSE="close",
3703928aee4356845252ac6b662d5c72c29903813eJake Slack        CHUNKED="chunked",
3803928aee4356845252ac6b662d5c72c29903813eJake Slack        GZIP="gzip",
3903928aee4356845252ac6b662d5c72c29903813eJake Slack        IDENTITY="identity",
4003928aee4356845252ac6b662d5c72c29903813eJake Slack        KEEP_ALIVE="keep-alive",
4103928aee4356845252ac6b662d5c72c29903813eJake Slack        CONTINUE="100-continue",
4203928aee4356845252ac6b662d5c72c29903813eJake Slack        PROCESSING="102-processing",
4303928aee4356845252ac6b662d5c72c29903813eJake Slack        TE="TE",
4403928aee4356845252ac6b662d5c72c29903813eJake Slack        BYTES="bytes",
4503928aee4356845252ac6b662d5c72c29903813eJake Slack        NO_CACHE="no-cache",
4603928aee4356845252ac6b662d5c72c29903813eJake Slack        UPGRADE="Upgrade";
4703928aee4356845252ac6b662d5c72c29903813eJake Slack
4803928aee4356845252ac6b662d5c72c29903813eJake Slack    public final static int
4903928aee4356845252ac6b662d5c72c29903813eJake Slack        CLOSE_ORDINAL=1,
5003928aee4356845252ac6b662d5c72c29903813eJake Slack        CHUNKED_ORDINAL=2,
5103928aee4356845252ac6b662d5c72c29903813eJake Slack        GZIP_ORDINAL=3,
5203928aee4356845252ac6b662d5c72c29903813eJake Slack        IDENTITY_ORDINAL=4,
5303928aee4356845252ac6b662d5c72c29903813eJake Slack        KEEP_ALIVE_ORDINAL=5,
5403928aee4356845252ac6b662d5c72c29903813eJake Slack        CONTINUE_ORDINAL=6,
5503928aee4356845252ac6b662d5c72c29903813eJake Slack        PROCESSING_ORDINAL=7,
5603928aee4356845252ac6b662d5c72c29903813eJake Slack        TE_ORDINAL=8,
5703928aee4356845252ac6b662d5c72c29903813eJake Slack        BYTES_ORDINAL=9,
5803928aee4356845252ac6b662d5c72c29903813eJake Slack        NO_CACHE_ORDINAL=10,
5903928aee4356845252ac6b662d5c72c29903813eJake Slack        UPGRADE_ORDINAL=11;
6003928aee4356845252ac6b662d5c72c29903813eJake Slack
6103928aee4356845252ac6b662d5c72c29903813eJake Slack    public final static HttpHeaderValues CACHE= new HttpHeaderValues();
6203928aee4356845252ac6b662d5c72c29903813eJake Slack
6303928aee4356845252ac6b662d5c72c29903813eJake Slack    public final static Buffer
6403928aee4356845252ac6b662d5c72c29903813eJake Slack        CLOSE_BUFFER=CACHE.add(CLOSE,CLOSE_ORDINAL),
6503928aee4356845252ac6b662d5c72c29903813eJake Slack        CHUNKED_BUFFER=CACHE.add(CHUNKED,CHUNKED_ORDINAL),
6603928aee4356845252ac6b662d5c72c29903813eJake Slack        GZIP_BUFFER=CACHE.add(GZIP,GZIP_ORDINAL),
6703928aee4356845252ac6b662d5c72c29903813eJake Slack        IDENTITY_BUFFER=CACHE.add(IDENTITY,IDENTITY_ORDINAL),
6803928aee4356845252ac6b662d5c72c29903813eJake Slack        KEEP_ALIVE_BUFFER=CACHE.add(KEEP_ALIVE,KEEP_ALIVE_ORDINAL),
6903928aee4356845252ac6b662d5c72c29903813eJake Slack        CONTINUE_BUFFER=CACHE.add(CONTINUE, CONTINUE_ORDINAL),
7003928aee4356845252ac6b662d5c72c29903813eJake Slack        PROCESSING_BUFFER=CACHE.add(PROCESSING, PROCESSING_ORDINAL),
7103928aee4356845252ac6b662d5c72c29903813eJake Slack        TE_BUFFER=CACHE.add(TE,TE_ORDINAL),
7203928aee4356845252ac6b662d5c72c29903813eJake Slack        BYTES_BUFFER=CACHE.add(BYTES,BYTES_ORDINAL),
7303928aee4356845252ac6b662d5c72c29903813eJake Slack        NO_CACHE_BUFFER=CACHE.add(NO_CACHE,NO_CACHE_ORDINAL),
7403928aee4356845252ac6b662d5c72c29903813eJake Slack        UPGRADE_BUFFER=CACHE.add(UPGRADE,UPGRADE_ORDINAL);
7503928aee4356845252ac6b662d5c72c29903813eJake Slack
7603928aee4356845252ac6b662d5c72c29903813eJake Slack
7703928aee4356845252ac6b662d5c72c29903813eJake Slack    public static boolean hasKnownValues(int httpHeaderOrdinal)
7803928aee4356845252ac6b662d5c72c29903813eJake Slack    {
7903928aee4356845252ac6b662d5c72c29903813eJake Slack        switch(httpHeaderOrdinal)
8003928aee4356845252ac6b662d5c72c29903813eJake Slack        {
8103928aee4356845252ac6b662d5c72c29903813eJake Slack            case HttpHeaders.CONNECTION_ORDINAL:
8203928aee4356845252ac6b662d5c72c29903813eJake Slack            case HttpHeaders.TRANSFER_ENCODING_ORDINAL:
8303928aee4356845252ac6b662d5c72c29903813eJake Slack            case HttpHeaders.CONTENT_ENCODING_ORDINAL:
8403928aee4356845252ac6b662d5c72c29903813eJake Slack                return true;
8503928aee4356845252ac6b662d5c72c29903813eJake Slack        }
8603928aee4356845252ac6b662d5c72c29903813eJake Slack        return false;
8703928aee4356845252ac6b662d5c72c29903813eJake Slack    }
8803928aee4356845252ac6b662d5c72c29903813eJake Slack}
89