View Javadoc

1   // ========================================================================
2   // Copyright 2004-2005 Mort Bay Consulting Pty. Ltd.
3   // ------------------------------------------------------------------------
4   // Licensed under the Apache License, Version 2.0 (the "License");
5   // you may not use this file except in compliance with the License.
6   // You may obtain a copy of the License at 
7   // http://www.apache.org/licenses/LICENSE-2.0
8   // Unless required by applicable law or agreed to in writing, software
9   // distributed under the License is distributed on an "AS IS" BASIS,
10  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11  // See the License for the specific language governing permissions and
12  // limitations under the License.
13  // ========================================================================
14  
15  package org.mortbay.jetty;
16  
17  import org.mortbay.io.Buffer;
18  import org.mortbay.io.BufferCache;
19  import org.mortbay.io.ByteArrayBuffer;
20  
21  /* ------------------------------------------------------------------------------- */
22  /**
23   * 
24   */
25  public class HttpStatus
26  {
27      public final static String Continue= "Continue",
28          Switching_Protocols= "Switching Protocols",
29          Processing= "Processing",
30          OK= "OK",
31          Created= "Created",
32          Accepted= "Accepted",
33          Non_Authoritative_Information= "Non Authoritative Information",
34          No_Content= "No Content",
35          Reset_Content= "Reset Content",
36          Partial_Content= "Partial Content",
37          Multi_Status= "Multi Status",
38          Multiple_Choices= "Multiple Choices",
39          Moved_Permanently= "Moved Permanently",
40          Moved_Temporarily= "Moved Temporarily",
41          Found= "Found",
42          See_Other= "See Other",
43          Not_Modified= "Not Modified",
44          Use_Proxy= "Use Proxy",
45          Bad_Request= "Bad Request",
46          Unauthorized= "Unauthorized",
47          Payment_Required= "Payment Required",
48          Forbidden= "Forbidden",
49          Not_Found= "Not Found",
50          Method_Not_Allowed= "Method Not Allowed",
51          Not_Acceptable= "Not Acceptable",
52          Proxy_Authentication_Required= "Proxy Authentication Required",
53          Request_Timeout= "Request Timeout",
54          Conflict= "Conflict",
55          Gone= "Gone",
56          Length_Required= "Length Required",
57          Precondition_Failed= "Precondition Failed",
58          Request_Entity_Too_Large= "Request Entity Too Large",
59          Request_URI_Too_Large= "Request URI Too Large",
60          Unsupported_Media_Type= "Unsupported Media Type",
61          Requested_Range_Not_Satisfiable= "Requested Range Not Satisfiable",
62          Expectation_Failed= "Expectation Failed",
63          Unprocessable_Entity= "Unprocessable Entity",
64          Locked= "Locked",
65          Failed_Dependency= "Failed Dependency",
66          Internal_Server_Error= "Internal Server Error",
67          Not_Implemented= "Not Implemented",
68          Bad_Gateway= "Bad Gateway",
69          Service_Unavailable= "Service Unavailable",
70          Gateway_Timeout= "Gateway Timeout",
71          HTTP_Version_Not_Supported= "HTTP Version Not Supported",
72          Insufficient_Storage= "Insufficient Storage",
73          Unknown="Unknown";
74  
75      public final static int 
76          ORDINAL_100_Continue= 100,
77          ORDINAL_101_Switching_Protocols= 101,
78          ORDINAL_102_Processing= 102,
79          ORDINAL_200_OK= 200,
80          ORDINAL_201_Created= 201,
81          ORDINAL_202_Accepted= 202,
82          ORDINAL_203_Non_Authoritative_Information= 203,
83          ORDINAL_204_No_Content= 204,
84          ORDINAL_205_Reset_Content= 205,
85          ORDINAL_206_Partial_Content= 206,
86          ORDINAL_207_Multi_Status= 207,
87          ORDINAL_300_Multiple_Choices= 300,
88          ORDINAL_301_Moved_Permanently= 301,
89          ORDINAL_302_Moved_Temporarily= 302,
90          ORDINAL_302_Found= 302,
91          ORDINAL_303_See_Other= 303,
92          ORDINAL_304_Not_Modified= 304,
93          ORDINAL_305_Use_Proxy= 305,
94          ORDINAL_400_Bad_Request= 400,
95          ORDINAL_401_Unauthorized= 401,
96          ORDINAL_402_Payment_Required= 402,
97          ORDINAL_403_Forbidden= 403,
98          ORDINAL_404_Not_Found= 404,
99          ORDINAL_405_Method_Not_Allowed= 405,
100         ORDINAL_406_Not_Acceptable= 406,
101         ORDINAL_407_Proxy_Authentication_Required= 407,
102         ORDINAL_408_Request_Timeout= 408,
103         ORDINAL_409_Conflict= 409,
104         ORDINAL_410_Gone= 410,
105         ORDINAL_411_Length_Required= 411,
106         ORDINAL_412_Precondition_Failed= 412,
107         ORDINAL_413_Request_Entity_Too_Large= 413,
108         ORDINAL_414_Request_URI_Too_Large= 414,
109         ORDINAL_415_Unsupported_Media_Type= 415,
110         ORDINAL_416_Requested_Range_Not_Satisfiable= 416,
111         ORDINAL_417_Expectation_Failed= 417,
112         ORDINAL_422_Unprocessable_Entity= 422,
113         ORDINAL_423_Locked= 423,
114         ORDINAL_424_Failed_Dependency= 424,
115         ORDINAL_500_Internal_Server_Error= 500,
116         ORDINAL_501_Not_Implemented= 501,
117         ORDINAL_502_Bad_Gateway= 502,
118         ORDINAL_503_Service_Unavailable= 503,
119         ORDINAL_504_Gateway_Timeout= 504,
120         ORDINAL_505_HTTP_Version_Not_Supported= 505,
121         ORDINAL_507_Insufficient_Storage= 507,
122         ORDINAL_999_Unknown = 999;
123 
124     public static final BufferCache CACHE = new BufferCache();
125 
126     public static final Buffer
127         Continue_BUFFER=CACHE.add(Continue,ORDINAL_100_Continue),
128         Switching_Protocols_BUFFER=CACHE.add(Switching_Protocols,ORDINAL_101_Switching_Protocols),
129         Processing_BUFFER=CACHE.add(Processing,ORDINAL_102_Processing),
130         OK_BUFFER=CACHE.add(OK,ORDINAL_200_OK),
131         Created_BUFFER=CACHE.add(Created,ORDINAL_201_Created),
132         Accepted_BUFFER=CACHE.add(Accepted,ORDINAL_202_Accepted),
133         Non_Authoritative_Information_BUFFER=CACHE.add(Non_Authoritative_Information,ORDINAL_203_Non_Authoritative_Information),
134         No_Content_BUFFER=CACHE.add(No_Content,ORDINAL_204_No_Content),
135         Reset_Content_BUFFER=CACHE.add(Reset_Content,ORDINAL_205_Reset_Content),
136         Partial_Content_BUFFER=CACHE.add(Partial_Content,ORDINAL_206_Partial_Content),
137         Multi_Status_BUFFER=CACHE.add(Multi_Status,ORDINAL_207_Multi_Status),
138         Multiple_Choices_BUFFER=CACHE.add(Multiple_Choices,ORDINAL_300_Multiple_Choices),
139         Moved_Permanently_BUFFER=CACHE.add(Moved_Permanently,ORDINAL_301_Moved_Permanently),
140         Moved_Temporarily_BUFFER=CACHE.add(Moved_Temporarily,ORDINAL_302_Moved_Temporarily),
141         Found_BUFFER=CACHE.add(Found,ORDINAL_302_Found),
142         See_Other_BUFFER=CACHE.add(See_Other,ORDINAL_303_See_Other),
143         Not_Modified_BUFFER=CACHE.add(Not_Modified,ORDINAL_304_Not_Modified),
144         Use_Proxy_BUFFER=CACHE.add(Use_Proxy,ORDINAL_305_Use_Proxy),
145         Bad_Request_BUFFER=CACHE.add(Bad_Request,ORDINAL_400_Bad_Request),
146         Unauthorized_BUFFER=CACHE.add(Unauthorized,ORDINAL_401_Unauthorized),
147         Payment_Required_BUFFER=CACHE.add(Payment_Required,ORDINAL_402_Payment_Required),
148         Forbidden_BUFFER=CACHE.add(Forbidden,ORDINAL_403_Forbidden),
149         Not_Found_BUFFER=CACHE.add(Not_Found,ORDINAL_404_Not_Found),
150         Method_Not_Allowed_BUFFER=CACHE.add(Method_Not_Allowed,ORDINAL_405_Method_Not_Allowed),
151         Not_Acceptable_BUFFER=CACHE.add(Not_Acceptable,ORDINAL_406_Not_Acceptable),
152         Proxy_Authentication_Required_BUFFER=CACHE.add(Proxy_Authentication_Required,ORDINAL_407_Proxy_Authentication_Required),
153         Request_Timeout_BUFFER=CACHE.add(Request_Timeout,ORDINAL_408_Request_Timeout),
154         Conflict_BUFFER=CACHE.add(Conflict,ORDINAL_409_Conflict),
155         Gone_BUFFER=CACHE.add(Gone,ORDINAL_410_Gone),
156         Length_Required_BUFFER=CACHE.add(Length_Required,ORDINAL_411_Length_Required),
157         Precondition_Failed_BUFFER=CACHE.add(Precondition_Failed,ORDINAL_412_Precondition_Failed),
158         Request_Entity_Too_Large_BUFFER=CACHE.add(Request_Entity_Too_Large,ORDINAL_413_Request_Entity_Too_Large),
159         Request_URI_Too_Large_BUFFER=CACHE.add(Request_URI_Too_Large,ORDINAL_414_Request_URI_Too_Large),
160         Unsupported_Media_Type_BUFFER=CACHE.add(Unsupported_Media_Type,ORDINAL_415_Unsupported_Media_Type),
161         Requested_Range_Not_Satisfiable_BUFFER=CACHE.add(Requested_Range_Not_Satisfiable,ORDINAL_416_Requested_Range_Not_Satisfiable),
162         Expectation_Failed_BUFFER=CACHE.add(Expectation_Failed,ORDINAL_417_Expectation_Failed),
163         Unprocessable_Entity_BUFFER=CACHE.add(Unprocessable_Entity,ORDINAL_422_Unprocessable_Entity),
164         Locked_BUFFER=CACHE.add(Locked,ORDINAL_423_Locked),
165         Failed_Dependency_BUFFER=CACHE.add(Failed_Dependency,ORDINAL_424_Failed_Dependency),
166         Internal_Server_Error_BUFFER=CACHE.add(Internal_Server_Error,ORDINAL_500_Internal_Server_Error),
167         Not_Implemented_BUFFER=CACHE.add(Not_Implemented,ORDINAL_501_Not_Implemented),
168         Bad_Gateway_BUFFER=CACHE.add(Bad_Gateway,ORDINAL_502_Bad_Gateway),
169         Service_Unavailable_BUFFER=CACHE.add(Service_Unavailable,ORDINAL_503_Service_Unavailable),
170         Gateway_Timeout_BUFFER=CACHE.add(Gateway_Timeout,ORDINAL_504_Gateway_Timeout),
171         HTTP_Version_Not_Supported_BUFFER=CACHE.add(HTTP_Version_Not_Supported,ORDINAL_505_HTTP_Version_Not_Supported),
172         Insufficient_Storage_BUFFER=CACHE.add(Insufficient_Storage,ORDINAL_507_Insufficient_Storage),
173         Unknown_BUFFER=CACHE.add(Unknown,ORDINAL_999_Unknown);
174     
175     
176     // Build cache of response lines for status
177     private static Buffer[] __responseLine = new Buffer[600];
178     static
179     {
180         int versionLength=HttpVersions.HTTP_1_1_BUFFER.length();
181         
182         for (int i=0;i<__responseLine.length;i++)
183         {
184             Buffer reason = CACHE.get(i);
185             if (reason==null)
186                 continue;
187             
188             byte[] bytes=new byte[versionLength+5+reason.length()+2];
189             HttpVersions.HTTP_1_1_BUFFER.peek(0,bytes, 0, versionLength);
190             bytes[versionLength+0]=' ';
191             bytes[versionLength+1]=(byte)('0'+i/100);
192             bytes[versionLength+2]=(byte)('0'+(i%100)/10);
193             bytes[versionLength+3]=(byte)('0'+(i%10));
194             bytes[versionLength+4]=' ';
195             reason.peek(0, bytes, versionLength+5, reason.length());
196             bytes[versionLength+5+reason.length()]=HttpTokens.CARRIAGE_RETURN;
197             bytes[versionLength+6+reason.length()]=HttpTokens.LINE_FEED;
198             __responseLine[i]=new ByteArrayBuffer(bytes,0,bytes.length,Buffer.IMMUTABLE);
199         }
200     }
201 
202     /* ------------------------------------------------------------ */
203     /**
204      * @param status
205      * @return HTTP response line for the status code including CRLF
206      */
207     public static Buffer getResponseLine(int status)
208     {
209         if (status>=__responseLine.length)
210             return null;
211         return __responseLine[status];
212     }
213 }