// non-javadoc, see interface HeaderValueParser public virtual NameValuePair[] ParseParameters(CharArrayBuffer buffer, ParserCursor cursor) { Args.NotNull(buffer, "Char array buffer"); Args.NotNull(cursor, "Parser cursor"); int pos = cursor.GetPos(); int indexTo = cursor.GetUpperBound(); while (pos < indexTo) { char ch = buffer.CharAt(pos); if (HTTP.IsWhitespace(ch)) { pos++; } else { break; } } cursor.UpdatePos(pos); if (cursor.AtEnd()) { return(new NameValuePair[] { }); } IList <NameValuePair> @params = new AList <NameValuePair>(); while (!cursor.AtEnd()) { NameValuePair param = ParseNameValuePair(buffer, cursor); @params.AddItem(param); char ch = buffer.CharAt(cursor.GetPos() - 1); if (ch == ElemDelimiter) { break; } } return(Sharpen.Collections.ToArray(@params, new NameValuePair[@params.Count])); }
// non-javadoc, see interface HeaderValueParser public virtual HeaderElement[] ParseElements(CharArrayBuffer buffer, ParserCursor cursor) { Args.NotNull(buffer, "Char array buffer"); Args.NotNull(cursor, "Parser cursor"); IList <HeaderElement> elements = new AList <HeaderElement>(); while (!cursor.AtEnd()) { HeaderElement element = ParseHeaderElement(buffer, cursor); if (!(element.GetName().Length == 0 && element.GetValue() == null)) { elements.AddItem(element); } } return(Sharpen.Collections.ToArray(elements, new HeaderElement[elements.Count])); }
/// <summary>Parses a request line.</summary> /// <remarks>Parses a request line.</remarks> /// <param name="buffer">a buffer holding the line to parse</param> /// <returns>the parsed request line</returns> /// <exception cref="Org.Apache.Http.ParseException">in case of a parse error</exception> public virtual RequestLine ParseRequestLine(CharArrayBuffer buffer, ParserCursor cursor) { Args.NotNull(buffer, "Char array buffer"); Args.NotNull(cursor, "Parser cursor"); int indexFrom = cursor.GetPos(); int indexTo = cursor.GetUpperBound(); try { SkipWhitespace(buffer, cursor); int i = cursor.GetPos(); int blank = buffer.IndexOf(' ', i, indexTo); if (blank < 0) { throw new ParseException("Invalid request line: " + buffer.Substring(indexFrom, indexTo )); } string method = buffer.SubstringTrimmed(i, blank); cursor.UpdatePos(blank); SkipWhitespace(buffer, cursor); i = cursor.GetPos(); blank = buffer.IndexOf(' ', i, indexTo); if (blank < 0) { throw new ParseException("Invalid request line: " + buffer.Substring(indexFrom, indexTo )); } string uri = buffer.SubstringTrimmed(i, blank); cursor.UpdatePos(blank); ProtocolVersion ver = ParseProtocolVersion(buffer, cursor); SkipWhitespace(buffer, cursor); if (!cursor.AtEnd()) { throw new ParseException("Invalid request line: " + buffer.Substring(indexFrom, indexTo )); } return(CreateRequestLine(method, uri, ver)); } catch (IndexOutOfRangeException) { throw new ParseException("Invalid request line: " + buffer.Substring(indexFrom, indexTo )); } }
// non-javadoc, see interface HeaderValueParser public virtual HeaderElement ParseHeaderElement(CharArrayBuffer buffer, ParserCursor cursor) { Args.NotNull(buffer, "Char array buffer"); Args.NotNull(cursor, "Parser cursor"); NameValuePair nvp = ParseNameValuePair(buffer, cursor); NameValuePair[] @params = null; if (!cursor.AtEnd()) { char ch = buffer.CharAt(cursor.GetPos() - 1); if (ch != ElemDelimiter) { @params = ParseParameters(buffer, cursor); } } return(CreateHeaderElement(nvp.GetName(), nvp.GetValue(), @params)); }