1069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/* 2069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/LineParser.java $ 3069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $Revision: 589374 $ 4069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $Date: 2007-10-28 09:25:07 -0700 (Sun, 28 Oct 2007) $ 5069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 6069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * ==================================================================== 7069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one 8069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * or more contributor license agreements. See the NOTICE file 9069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * distributed with this work for additional information 10069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * regarding copyright ownership. The ASF licenses this file 11069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * to you under the Apache License, Version 2.0 (the 12069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * "License"); you may not use this file except in compliance 13069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * with the License. You may obtain a copy of the License at 14069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 15069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 16069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 17069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Unless required by applicable law or agreed to in writing, 18069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * software distributed under the License is distributed on an 19069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 20069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * KIND, either express or implied. See the License for the 21069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * specific language governing permissions and limitations 22069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * under the License. 23069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * ==================================================================== 24069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 25069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * This software consists of voluntary contributions made by many 26069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * individuals on behalf of the Apache Software Foundation. For more 27069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * information on the Apache Software Foundation, please see 28069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <http://www.apache.org/>. 29069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 30069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 31069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 32069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectpackage org.apache.http.message; 33069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 34069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 35069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.ProtocolVersion; 36069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.ParseException; 37069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.RequestLine; 38069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.StatusLine; 39069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.Header; 40069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.util.CharArrayBuffer; 41069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 42069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 43069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/** 44069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Interface for parsing lines in the HEAD section of an HTTP message. 45069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * There are individual methods for parsing a request line, a 46069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * status line, or a header line. 47069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * The lines to parse are passed in memory, the parser does not depend 48069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * on any specific IO mechanism. 49069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Instances of this interface are expected to be stateless and thread-safe. 50069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 51069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @author <a href="mailto:rolandw AT apache.org">Roland Weber</a> 52069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 53069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 54069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <!-- empty lines above to avoid 'svn diff' context problems --> 55069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @version $Revision: 589374 $ $Date: 2007-10-28 09:25:07 -0700 (Sun, 28 Oct 2007) $ 56069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 57069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @since 4.0 58069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 59069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectpublic interface LineParser { 60069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 61069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 62069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 63069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Parses the textual representation of a protocol version. 64069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * This is needed for parsing request lines (last element) 65069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * as well as status lines (first element). 66069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 67069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param buffer a buffer holding the protocol version to parse 68069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param cursor the parser cursor containing the current position and 69069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * the bounds within the buffer for the parsing operation 70069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 71069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @return the parsed protocol version 72069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 73069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @throws ParseException in case of a parse error 74069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 75069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project ProtocolVersion parseProtocolVersion( 76069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project CharArrayBuffer buffer, 77069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project ParserCursor cursor) throws ParseException; 78069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 79069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 80069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 81069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Checks whether there likely is a protocol version in a line. 82069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * This method implements a <i>heuristic</i> to check for a 83069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * likely protocol version specification. It does <i>not</i> 84069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * guarantee that {@link #parseProtocolVersion} would not 85069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * detect a parse error. 86069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * This can be used to detect garbage lines before a request 87069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * or status line. 88069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 89069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param buffer a buffer holding the line to inspect 90069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param cursor the cursor at which to check for a protocol version, or 91069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * negative for "end of line". Whether the check tolerates 92069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * whitespace before or after the protocol version is 93069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * implementation dependent. 94069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 95069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @return <code>true</code> if there is a protocol version at the 96069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * argument index (possibly ignoring whitespace), 97069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <code>false</code> otherwise 98069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 99069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project boolean hasProtocolVersion( 100069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project CharArrayBuffer buffer, 101069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project ParserCursor cursor); 102069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 103069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 104069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 105069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Parses a request line. 106069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 107069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param buffer a buffer holding the line to parse 108069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param cursor the parser cursor containing the current position and 109069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * the bounds within the buffer for the parsing operation 110069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 111069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @return the parsed request line 112069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 113069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @throws ParseException in case of a parse error 114069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 115069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project RequestLine parseRequestLine( 116069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project CharArrayBuffer buffer, 117069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project ParserCursor cursor) throws ParseException; 118069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 119069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 120069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 121069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Parses a status line. 122069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 123069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param buffer a buffer holding the line to parse 124069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param cursor the parser cursor containing the current position and 125069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * the bounds within the buffer for the parsing operation 126069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 127069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @return the parsed status line 128069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 129069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @throws ParseException in case of a parse error 130069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 131069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project StatusLine parseStatusLine( 132069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project CharArrayBuffer buffer, 133069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project ParserCursor cursor) throws ParseException; 134069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 135069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 136069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project /** 137069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Creates a header from a line. 138069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * The full header line is expected here. Header continuation lines 139069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * must be joined by the caller before invoking this method. 140069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 141069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @param buffer a buffer holding the full header line. 142069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * This buffer MUST NOT be re-used afterwards, since 143069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * the returned object may reference the contents later. 144069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 145069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @return the header in the argument buffer. 146069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * The returned object MAY be a wrapper for the argument buffer. 147069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * The argument buffer MUST NOT be re-used or changed afterwards. 148069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * 149069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @throws ParseException in case of a parse error 150069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */ 151069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project Header parseHeader(CharArrayBuffer buffer) 152069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project throws ParseException 153069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project ; 154069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 155069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 156069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project} 157