private String readLine(ByteBuf buffer, int initialBufferSize) { AppendableCharSequence buf = new AppendableCharSequence(initialBufferSize); int lineLength = 0; for (;;) { byte nextByte = buffer.readByte(); if (nextByte == StompConstants.CR) { //do nothing } else if (nextByte == StompConstants.LF) { return buf.toString(); } else { if (lineLength >= maxLineLength) { invalidLineLength(); } lineLength ++; buf.append((char) nextByte); } } }
private boolean readHeader(StompHeaders headers, AppendableCharSequence buf, ByteBuf buffer) { buf.reset(); int lineLength = 0; String key = null; key = buf.toString(); valid = true; buf.reset(); } else if (nextByte == StompConstants.CR) { return false; } else if (valid) { headers.add(key, buf.toString()); } else if (validateHeaders) { invalidHeader(key, buf.toString()); buf.append((char) nextByte);
return null; if (line.length() > 0) { do { char firstChar = line.charAt(0); if (name != null && (firstChar == ' ' || firstChar == '\t')) { String trimmedLine = line.toString().trim(); String valueStr = String.valueOf(value); value = valueStr + ' ' + trimmedLine; return null; } while (line.length() > 0);
private static int findNonWhitespace(AppendableCharSequence sb, int offset) { for (int result = offset; result < sb.length(); ++result) { if (!Character.isWhitespace(sb.charAtUnsafe(result))) { return result; } } return sb.length(); }
private void splitHeader(AppendableCharSequence sb) { final int length = sb.length(); int nameStart; int nameEnd; int colonEnd; int valueStart; int valueEnd; nameStart = findNonWhitespace(sb, 0); for (nameEnd = nameStart; nameEnd < length; nameEnd ++) { char ch = sb.charAt(nameEnd); if (ch == ':' || Character.isWhitespace(ch)) { break; } } for (colonEnd = nameEnd; colonEnd < length; colonEnd ++) { if (sb.charAt(colonEnd) == ':') { colonEnd ++; break; } } name = sb.subStringUnsafe(nameStart, nameEnd); valueStart = findNonWhitespace(sb, colonEnd); if (valueStart == length) { value = EMPTY_VALUE; } else { valueEnd = findEndOfString(sb); value = sb.subStringUnsafe(valueStart, valueEnd); } }
@Override public AppendableCharSequence subSequence(int start, int end) { if (start == end) { // If start and end index is the same we need to return an empty sequence to conform to the interface. // As our expanding logic depends on the fact that we have a char[] with length > 0 we need to construct // an instance for which this is true. return new AppendableCharSequence(Math.min(16, chars.length)); } return new AppendableCharSequence(Arrays.copyOfRange(chars, start, end)); }
@Override public AppendableCharSequence append(CharSequence csq) { return append(csq, 0, csq.length()); }
private void splitHeader(AppendableCharSequence sb) { final int length = sb.length(); int nameStart; int nameEnd; int colonEnd; int valueStart; int valueEnd; nameStart = findNonWhitespace(sb, 0); for (nameEnd = nameStart; nameEnd < length; nameEnd ++) { char ch = sb.charAt(nameEnd); if (ch == ':' || Character.isWhitespace(ch)) { break; } } for (colonEnd = nameEnd; colonEnd < length; colonEnd ++) { if (sb.charAt(colonEnd) == ':') { colonEnd ++; break; } } name = sb.substring(nameStart, nameEnd); valueStart = findNonWhitespace(sb, colonEnd); if (valueStart == length) { value = EMPTY_VALUE; } else { valueEnd = findEndOfString(sb); value = sb.substring(valueStart, valueEnd); } }
public AppendableCharSequence parse(ByteBuf buffer) { final int oldSize = size; seq.reset(); int i = buffer.forEachByte(this); if (i == -1) { size = oldSize; return null; } buffer.readerIndex(i + 1); return seq; }
return; int chunkSize = getChunkSize(line.toString()); this.chunkSize = chunkSize; if (chunkSize == 0) {
@Override public AppendableCharSequence append(CharSequence csq, int start, int end) { if (csq.length() < end) { throw new IndexOutOfBoundsException(); } int length = end - start; if (length > chars.length - pos) { chars = expand(chars, pos + length, pos); } if (csq instanceof AppendableCharSequence) { // Optimize append operations via array copy AppendableCharSequence seq = (AppendableCharSequence) csq; char[] src = seq.chars; System.arraycopy(src, start, chars, pos, length); pos += length; return this; } for (int i = start; i < end; i++) { chars[pos++] = csq.charAt(i); } return this; }
private static String[] splitInitialLine(AppendableCharSequence sb) { int aStart; int aEnd; int bStart; int bEnd; int cStart; int cEnd; aStart = findNonWhitespace(sb, 0); aEnd = findWhitespace(sb, aStart); bStart = findNonWhitespace(sb, aEnd); bEnd = findWhitespace(sb, bStart); cStart = findNonWhitespace(sb, bEnd); cEnd = findEndOfString(sb); return new String[] { sb.subStringUnsafe(aStart, aEnd), sb.subStringUnsafe(bStart, bEnd), cStart < cEnd? sb.subStringUnsafe(cStart, cEnd) : "" }; }
private static int findWhitespace(AppendableCharSequence sb, int offset) { for (int result = offset; result < sb.length(); ++result) { if (Character.isWhitespace(sb.charAtUnsafe(result))) { return result; } } return sb.length(); }
@Override public AppendableCharSequence subSequence(int start, int end) { return new AppendableCharSequence(Arrays.copyOfRange(chars, start, end)); }
private void splitHeader(AppendableCharSequence sb) { final int length = sb.length(); int nameStart; int nameEnd; int colonEnd; int valueStart; int valueEnd; nameStart = findNonWhitespace(sb, 0); for (nameEnd = nameStart; nameEnd < length; nameEnd ++) { char ch = sb.charAt(nameEnd); if (ch == ':' || Character.isWhitespace(ch)) { break; } } for (colonEnd = nameEnd; colonEnd < length; colonEnd ++) { if (sb.charAt(colonEnd) == ':') { colonEnd ++; break; } } name = sb.subStringUnsafe(nameStart, nameEnd); valueStart = findNonWhitespace(sb, colonEnd); if (valueStart == length) { value = EMPTY_VALUE; } else { valueEnd = findEndOfString(sb); value = sb.subStringUnsafe(valueStart, valueEnd); } }
@Override public AppendableCharSequence append(CharSequence csq) { return append(csq, 0, csq.length()); }
public AppendableCharSequence parse(ByteBuf buffer) { final int oldSize = size; seq.reset(); int i = buffer.forEachByte(this); if (i == -1) { size = oldSize; return null; } buffer.readerIndex(i + 1); return seq; }
return; int chunkSize = getChunkSize(line.toString()); this.chunkSize = chunkSize; if (chunkSize == 0) {
@Override public AppendableCharSequence append(CharSequence csq, int start, int end) { if (csq.length() < end) { throw new IndexOutOfBoundsException(); } int length = end - start; if (length > chars.length - pos) { chars = expand(chars, pos + length, pos); } if (csq instanceof AppendableCharSequence) { // Optimize append operations via array copy AppendableCharSequence seq = (AppendableCharSequence) csq; char[] src = seq.chars; System.arraycopy(src, start, chars, pos, length); pos += length; return this; } for (int i = start; i < end; i++) { chars[pos++] = csq.charAt(i); } return this; }
private static String[] splitInitialLine(AppendableCharSequence sb) { int aStart; int aEnd; int bStart; int bEnd; int cStart; int cEnd; aStart = findNonWhitespace(sb, 0); aEnd = findWhitespace(sb, aStart); bStart = findNonWhitespace(sb, aEnd); bEnd = findWhitespace(sb, bStart); cStart = findNonWhitespace(sb, bEnd); cEnd = findEndOfString(sb); return new String[] { sb.subStringUnsafe(aStart, aEnd), sb.subStringUnsafe(bStart, bEnd), cStart < cEnd? sb.subStringUnsafe(cStart, cEnd) : "" }; }