@Override public Header parseHeader(final CharArrayBuffer buffer) throws ParseException { Args.notNull(buffer, "Char array buffer"); final ParserCursor cursor = new ParserCursor(0, buffer.length()); this.tokenParser.skipWhiteSpace(buffer, cursor); final String name = this.tokenParser.parseToken(buffer, cursor, COLON); if (cursor.getPos() == cursor.getLowerBound() || cursor.getPos() == cursor.getUpperBound() || buffer.charAt(cursor.getPos()) != ':' || TextUtils.isEmpty(name) || TokenParser.isWhitespace(buffer.charAt(cursor.getPos() - 1))) { throw new ParseException("Invalid header", buffer, cursor.getLowerBound(), cursor.getUpperBound(), cursor.getPos()); } final String value = buffer.substringTrimmed(cursor.getPos() + 1, cursor.getUpperBound()); return new BasicHeader(name, value); }
final int pos = cursor.getPos(); if (pos + protolength + 4 > cursor.getUpperBound()) { throw new ParseException("Invalid protocol version", buffer, cursor.getLowerBound(), cursor.getUpperBound(), cursor.getPos()); buffer, cursor.getLowerBound(), cursor.getUpperBound(), cursor.getPos()); cursor.updatePos(pos + protolength + 1); } catch (final NumberFormatException e) { throw new ParseException("Invalid protocol major version number", buffer, cursor.getLowerBound(), cursor.getUpperBound(), cursor.getPos()); if (cursor.atEnd()) { throw new ParseException("Invalid protocol version", buffer, cursor.getLowerBound(), cursor.getUpperBound(), cursor.getPos()); cursor.updatePos(cursor.getPos() + 1); final String token2 = this.tokenParser.parseToken(buffer, cursor, BLANKS); final int minor; } catch (final NumberFormatException e) { throw new ParseException("Invalid protocol minor version number", buffer, cursor.getLowerBound(), cursor.getUpperBound(), cursor.getPos());
private void skipDelims(final CharSequence buf, final ParserCursor cursor) { int pos = cursor.getPos(); final int indexFrom = cursor.getPos(); final int indexTo = cursor.getUpperBound(); for (int i = indexFrom; i < indexTo; i++) { final char current = buf.charAt(i); if (DELIMS.get(current)) { pos++; } else { break; } } cursor.updatePos(pos); }
@Override String parseHeaderElement(final CharSequence buf, final ParserCursor cursor) { final String token = this.parser.parseToken(buf, cursor, COMMA); if (!cursor.atEnd()) { final int pos = cursor.getPos(); if (buf.charAt(pos) == ',') { cursor.updatePos(pos + 1); } } return !TextUtils.isBlank(token) ? token : null; }
delimSet.set(separator); final ParserCursor cursor = new ParserCursor(0, s.length()); final List<NameValuePair> list = new ArrayList<>(); while (!cursor.atEnd()) { delimSet.set('='); final String name = tokenParser.parseToken(s, cursor, delimSet); String value = null; if (!cursor.atEnd()) { final int delim = s.charAt(cursor.getPos()); cursor.updatePos(cursor.getPos() + 1); if (delim == '=') { delimSet.clear('='); value = tokenParser.parseToken(s, cursor, delimSet); if (!cursor.atEnd()) { cursor.updatePos(cursor.getPos() + 1);
@Override public NameValuePair[] parseParameters(final CharSequence buffer, final ParserCursor cursor) { Args.notNull(buffer, "Char sequence"); Args.notNull(cursor, "Parser cursor"); tokenParser.skipWhiteSpace(buffer, cursor); final List<NameValuePair> params = new ArrayList<>(); while (!cursor.atEnd()) { final NameValuePair param = parseNameValuePair(buffer, cursor); params.add(param); final char ch = buffer.charAt(cursor.getPos() - 1); if (ch == ELEM_DELIMITER) { break; } } return params.toArray(new NameValuePair[params.size()]); }
@Test public void testHttpVersionParsing() throws Exception { final CharArrayBuffer buffer = new CharArrayBuffer(16); buffer.append("HTTP/1.1"); ParserCursor cursor = new ParserCursor(0, buffer.length()); HttpVersion version = (HttpVersion) parser.parseProtocolVersion(buffer, cursor); Assert.assertEquals("HTTP protocol name", "HTTP", version.getProtocol()); Assert.assertEquals("HTTP major version number", 1, version.getMajor()); Assert.assertEquals("HTTP minor version number", 1, version.getMinor()); Assert.assertEquals("HTTP version number", "HTTP/1.1", version.toString()); Assert.assertEquals(buffer.length(), cursor.getPos()); Assert.assertTrue(cursor.atEnd()); buffer.clear(); buffer.append("HTTP/1.123 123"); cursor = new ParserCursor(0, buffer.length()); version = (HttpVersion) parser.parseProtocolVersion(buffer, cursor); Assert.assertEquals("HTTP protocol name", "HTTP", version.getProtocol()); Assert.assertEquals("HTTP major version number", 1, version.getMajor()); Assert.assertEquals("HTTP minor version number", 123, version.getMinor()); Assert.assertEquals("HTTP version number", "HTTP/1.123", version.toString()); Assert.assertEquals(' ', buffer.charAt(cursor.getPos())); Assert.assertEquals(buffer.length() - 4, cursor.getPos()); Assert.assertFalse(cursor.atEnd()); }
ProtocolVersion parse(final String s) throws ParseException { if (s == null) { return null; } final ParserCursor cursor = new ParserCursor(0, s.length()); return parse(s, cursor, null); }
private void bufferHeaderValue() { this.cursor = null; this.buffer = null; while (this.headerIt.hasNext()) { final Header h = this.headerIt.next(); if (h instanceof FormattedHeader) { this.buffer = ((FormattedHeader) h).getBuffer(); this.cursor = new ParserCursor(0, this.buffer.length()); this.cursor.updatePos(((FormattedHeader) h).getValuePos()); break; } final String value = h.getValue(); if (value != null) { this.buffer = value; this.cursor = new ParserCursor(0, value.length()); break; } } }
@Override public void parse(final SetCookie cookie, final String value) throws MalformedCookieException { Args.notNull(cookie, "Cookie"); final ParserCursor cursor = new ParserCursor(0, value.length()); final StringBuilder content = new StringBuilder(); boolean foundTime = false, foundDayOfMonth = false, foundMonth = false, foundYear = false; try { while (!cursor.atEnd()) { skipDelims(value, cursor); content.setLength(0);
private void parseNextElement() { // loop while there are headers left to parse while (this.headerIt.hasNext() || this.cursor != null) { if (this.cursor == null || this.cursor.atEnd()) { // get next header value bufferHeaderValue(); } // Anything buffered? if (this.cursor != null) { // loop while there is data in the buffer while (!this.cursor.atEnd()) { final T e = parseHeaderElement(this.buffer, this.cursor); if (e != null) { // Found something this.currentElement = e; return; } } // if at the end of the buffer if (this.cursor.atEnd()) { // discard it this.cursor = null; this.buffer = null; } } } }
@Override String parseHeaderElement(final CharSequence buf, final ParserCursor cursor) { final String token = this.parser.parseToken(buf, cursor, COMMA); if (!cursor.atEnd()) { final int pos = cursor.getPos(); if (buf.charAt(pos) == ',') { cursor.updatePos(pos + 1); } } return !TextUtils.isBlank(token) ? token : null; }
delimSet.set(separator); final ParserCursor cursor = new ParserCursor(0, s.length()); final List<NameValuePair> list = new ArrayList<>(); while (!cursor.atEnd()) { delimSet.set('='); final String name = tokenParser.parseToken(s, cursor, delimSet); String value = null; if (!cursor.atEnd()) { final int delim = s.charAt(cursor.getPos()); cursor.updatePos(cursor.getPos() + 1); if (delim == '=') { delimSet.clear('='); value = tokenParser.parseToken(s, cursor, delimSet); if (!cursor.atEnd()) { cursor.updatePos(cursor.getPos() + 1);
private void copyContent(final CharSequence buf, final ParserCursor cursor, final StringBuilder dst) { int pos = cursor.getPos(); final int indexFrom = cursor.getPos(); final int indexTo = cursor.getUpperBound(); for (int i = indexFrom; i < indexTo; i++) { final char current = buf.charAt(i); if (DELIMS.get(current)) { break; } pos++; dst.append(current); } cursor.updatePos(pos); }
@Override public NameValuePair[] parseParameters(final CharSequence buffer, final ParserCursor cursor) { Args.notNull(buffer, "Char sequence"); Args.notNull(cursor, "Parser cursor"); tokenParser.skipWhiteSpace(buffer, cursor); final List<NameValuePair> params = new ArrayList<>(); while (!cursor.atEnd()) { final NameValuePair param = parseNameValuePair(buffer, cursor); params.add(param); final char ch = buffer.charAt(cursor.getPos() - 1); if (ch == ELEM_DELIMITER) { break; } } return params.toArray(new NameValuePair[params.size()]); }
CharArrayBuffer buffer = new CharArrayBuffer(64); buffer.append(s); ParserCursor cursor = new ParserCursor(0, s.length()); Assert.assertEquals(s.length(), cursor.getPos()); Assert.assertTrue(cursor.atEnd()); cursor = new ParserCursor(0, s.length()); Assert.assertEquals(s.length(), cursor.getPos()); Assert.assertTrue(cursor.atEnd()); cursor = new ParserCursor(0, s.length()); Assert.assertEquals(s.length() - 2, cursor.getPos()); Assert.assertFalse(cursor.atEnd()); cursor = new ParserCursor(0, s.length()); Assert.assertEquals(s.length(), cursor.getPos()); Assert.assertTrue(cursor.atEnd()); cursor = new ParserCursor(0, s.length()); Assert.assertEquals(s.length(), cursor.getPos()); Assert.assertTrue(cursor.atEnd()); cursor = new ParserCursor(0, s.length());
public static ProtocolVersion parse(final String s) throws ParseException { if (s == null) { return null; } final ParserCursor cursor = new ParserCursor(0, s.length()); return TlsVersionParser.INSTANCE.parse(s, cursor, null); }
private void bufferHeaderValue() { this.cursor = null; this.buffer = null; while (this.headerIt.hasNext()) { final Header h = this.headerIt.next(); if (h instanceof FormattedHeader) { this.buffer = ((FormattedHeader) h).getBuffer(); this.cursor = new ParserCursor(0, this.buffer.length()); this.cursor.updatePos(((FormattedHeader) h).getValuePos()); break; } final String value = h.getValue(); if (value != null) { this.buffer = value; this.cursor = new ParserCursor(0, value.length()); break; } } }
private void parseNextElement() { // loop while there are headers left to parse while (this.headerIt.hasNext() || this.cursor != null) { if (this.cursor == null || this.cursor.atEnd()) { // get next header value bufferHeaderValue(); } // Anything buffered? if (this.cursor != null) { // loop while there is data in the buffer while (!this.cursor.atEnd()) { final T e = parseHeaderElement(this.buffer, this.cursor); if (e != null) { // Found something this.currentElement = e; return; } } // if at the end of the buffer if (this.cursor.atEnd()) { // discard it this.cursor = null; this.buffer = null; } } } }
@Override public Header parseHeader(final CharArrayBuffer buffer) throws ParseException { Args.notNull(buffer, "Char array buffer"); final ParserCursor cursor = new ParserCursor(0, buffer.length()); this.tokenParser.skipWhiteSpace(buffer, cursor); final String name = this.tokenParser.parseToken(buffer, cursor, COLON); if (cursor.getPos() == cursor.getLowerBound() || cursor.getPos() == cursor.getUpperBound() || buffer.charAt(cursor.getPos()) != ':' || TextUtils.isEmpty(name) || TokenParser.isWhitespace(buffer.charAt(cursor.getPos() - 1))) { throw new ParseException("Invalid header", buffer, cursor.getLowerBound(), cursor.getUpperBound(), cursor.getPos()); } final String value = buffer.substringTrimmed(cursor.getPos() + 1, cursor.getUpperBound()); return new BasicHeader(name, value); }