예제 #1
0
        // 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]));
        }
예제 #2
0
        // 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]));
        }
예제 #3
0
        /// <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
                                                                                     ));
            }
        }
예제 #4
0
        // 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));
        }