View Javadoc

1   /**********************************************************************
2    * HttpResponseParser.java
3    * created on 02.11.2006 by netseeker
4    * $Id: HttpResponseParser.java,v 1.1 2006/11/06 08:51:38 netseeker Exp $
5    * $Log: HttpResponseParser.java,v $
6    * Revision 1.1  2006/11/06 08:51:38  netseeker
7    * fixed java 1.4 support
8    * moved HTTP support classes to package de.netseeker.ejoe.http
9    *
10   * Revision 1.2  2006/11/05 23:56:27  netseeker
11   * added support of gzip encoding in case of http if the HTTP header does request it but the header byte did not (usually browser requests)
12   * added support of persistent http connections
13   *
14   * Revision 1.1  2006/11/05 16:30:37  netseeker
15   * finished the partial HTTP support
16   *
17   *
18   * ====================================================================
19   *
20   *  Copyright 2005-2006 netseeker aka Michael Manske
21   *
22   *  Licensed under the Apache License, Version 2.0 (the "License");
23   *  you may not use this file except in compliance with the License.
24   *  You may obtain a copy of the License at
25   *
26   *      http://www.apache.org/licenses/LICENSE-2.0
27   *
28   *  Unless required by applicable law or agreed to in writing, software
29   *  distributed under the License is distributed on an "AS IS" BASIS,
30   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31   *  See the License for the specific language governing permissions and
32   *  limitations under the License.
33   * ====================================================================
34   *
35   * This file is part of the EJOE framework.
36   * For more information on the author, please see
37   * <http://www.manskes.de/>.
38   *
39   *********************************************************************/
40  package de.netseeker.ejoe.http;
41  
42  import java.nio.ByteBuffer;
43  import java.util.logging.Level;
44  import java.util.logging.Logger;
45  import java.util.regex.Matcher;
46  import java.util.regex.Pattern;
47  
48  /***
49   * Parser class for HTTP responses send by EJServer
50   * 
51   * @author netseeker
52   * @since 0.3.9.1
53   */
54  public class HttpResponseParser extends HttpHeaderParser
55  {
56      private static final Logger logger    = Logger.getLogger( HttpResponseParser.class.getName() );
57  
58      private static Pattern      pEncoding = Pattern.compile( ".*^Content-Type://s([^ ]+)+$.*", Pattern.CASE_INSENSITIVE
59                                                    | Pattern.MULTILINE | Pattern.DOTALL );
60  
61      private int                 code;
62  
63      /***
64       * Creates a new parser using the given ByteBuffer containing HTTP response data
65       * 
66       * @param buf ByteBuffer containing a HTTP response
67       */
68      public HttpResponseParser(ByteBuffer buf)
69      {
70          super( buf );
71          code = extractCode();
72          Matcher matcher = pEncoding.matcher( getCharHeader() );
73          setCompression( (matcher.matches() && (matcher.group( 1 ).indexOf( "gzip" ) > -1)) );
74      }
75  
76      /***
77       * Returns the response status code, eg. 200 OK
78       * 
79       * @return the code
80       */
81      public int getCode()
82      {
83          return code;
84      }
85  
86      /***
87       * Extracts the http status code from the underlying buffer
88       * 
89       * @return the response status code
90       */
91      protected int extractCode()
92      {
93          try
94          {
95              String[] tokens = pLineEnd.split( getCharHeader(), 2 );
96              tokens = tokens[0].split( " " );
97              return Integer.parseInt( tokens[1].trim() );
98          }
99          catch ( Exception e )
100         {
101             logger.log( Level.WARNING, "Failed to determine HTTP status code!", e );
102         }
103 
104         return -1;
105     }
106 
107 }