Example usage for org.apache.http.message LineParser parseHeader

List of usage examples for org.apache.http.message LineParser parseHeader

Introduction

In this page you can find the example usage for org.apache.http.message LineParser parseHeader.

Prototype

Header parseHeader(CharArrayBuffer charArrayBuffer) throws ParseException;

Source Link

Usage

From source file:com.subgraph.vega.ui.httpeditor.parser.ParserBase.java

/**
 * Parse HTTP headers and add them to a IHttpMessageBuilder until a non-header line is encountered.
 * /*from   www  .  j  a  va  2  s . co m*/
 * @param parser HC line parser.
 * @param builder IHttpMessageBuilder to add parsed headers to.
 * @param buf Buffer containing header data.
 * @param bufCursor Parser cursor for buf. Adjusted to one character past the end of headers and optional CRLF line.
 */
protected void parseHeaders(final LineParser parser, final IHttpMessageBuilder builder,
        final CharArrayBuffer buf, final ParserCursor bufCursor) {
    final CharArrayBuffer lnBuf = new CharArrayBuffer(0);
    while (true) {
        lnBuf.clear();
        int idxPos = bufCursor.getPos();
        if (readLineHeader(buf, bufCursor, lnBuf) > 0) {
            try {
                // REVISIT don't want an extra step
                Header header = parser.parseHeader(lnBuf);
                builder.addHeader(header.getName(), header.getValue());
            } catch (ParseException e) {
                // for now we'll move the cursor back so the line gets treated as the start of the body
                bufCursor.updatePos(idxPos);
                return;
            }
        } else {
            break;
        }
    }
}

From source file:org.vietspider.net.apache.DefaultResponseParser.java

public static Header[] parseHeaders(final SessionInputBuffer inbuffer, int maxHeaderCount, int maxLineLen,
        LineParser parser) throws HttpException, IOException {

    if (inbuffer == null) {
        throw new IllegalArgumentException("Session input buffer may not be null");
    }/*from  w  w  w .j  av  a  2  s.  co m*/

    if (parser == null)
        parser = BasicLineParser.DEFAULT;

    ArrayList<CharArrayBuffer> headerLines = new ArrayList<CharArrayBuffer>();

    CharArrayBuffer current = null;
    CharArrayBuffer previous = null;
    for (;;) {
        if (current == null) {
            current = new CharArrayBuffer(64);
        } else {
            current.clear();
        }
        int l = inbuffer.readLine(current);
        if (l == -1 || current.length() < 1) {
            break;
        }
        // Parse the header name and value
        // Check for folded headers first
        // Detect LWS-char see HTTP/1.0 or HTTP/1.1 Section 2.2
        // discussion on folded headers
        if ((current.charAt(0) == ' ' || current.charAt(0) == '\t') && previous != null) {
            // we have continuation folded header
            // so append value
            int i = 0;
            while (i < current.length()) {
                char ch = current.charAt(i);
                if (ch != ' ' && ch != '\t') {
                    break;
                }
                i++;
            }
            if (maxLineLen > 0 && previous.length() + 1 + current.length() - i > maxLineLen) {
                throw new IOException("Maximum line length limit exceeded");
            }
            previous.append(' ');
            previous.append(current, i, current.length() - i);
        } else {
            headerLines.add(current);
            previous = current;
            current = null;
        }

        if (maxHeaderCount > 0 && headerLines.size() >= maxHeaderCount) {
            throw new IOException("Maximum header count exceeded");
        }
    }

    Header[] headers = new Header[headerLines.size()];
    for (int i = 0; i < headerLines.size(); i++) {
        CharArrayBuffer buffer = headerLines.get(i);
        try {
            headers[i] = parser.parseHeader(buffer);
        } catch (ParseException ex) {
            throw new ProtocolException(ex.getMessage());
        }
    }
    return headers;
}