private static Buffer putBytes(final MemoryManager memoryManager, Buffer dstBuffer, final byte[] bytes) { final int size = bytes.length; // Don't forget the terminating \0 (that's why "+ 1") if (dstBuffer.remaining() < size + 2 + 1) { dstBuffer = resizeBuffer(memoryManager, dstBuffer, size + 2 + 1); } dstBuffer.putShort((short) size); dstBuffer = put(memoryManager, dstBuffer, bytes); // Don't forget the terminating \0 dstBuffer.put((byte) 0); return dstBuffer; }
public static Buffer put(final MemoryManager memoryManager, Buffer dstBuffer, final byte[] array, final int off, final int len) { dstBuffer = checkAndResizeIfNeeded(memoryManager, dstBuffer, len); dstBuffer.put(array, off, len); return dstBuffer; }
public static int checkEOL(final HttpCodecFilter.HeaderParsingState parsingState, final byte[] input, final int end) { final int arrayOffs = parsingState.arrayOffset; final int offset = arrayOffs + parsingState.offset; final int avail = Math.min(parsingState.packetLimit + arrayOffs, end) - offset; final byte b1; final byte b2; if (avail >= 2) { // if more than 2 bytes available b1 = input[offset]; b2 = input[offset + 1]; } else if (avail == 1) { // if one byte available b1 = input[offset]; b2 = -1; } else { return -2; } return checkCRLF(parsingState, b1, b2); }
case 0 : { // parse the method name final int spaceIdx = findSpace(input, arrayOffs + parsingState.offset, end, reqLimit); if (spaceIdx == -1) { parsingState.offset = end - arrayOffs; skipSpaces(input, arrayOffs + parsingState.offset, end, reqLimit) - arrayOffs; if (nonSpaceIdx < 0) { skipSpaces(input, arrayOffs + parsingState.offset, end, reqLimit) - arrayOffs; if (nonSpaceIdx < 0) { parsingState.offset = end - arrayOffs; if (!findEOL(parsingState, input, end)) { parsingState.offset = end - arrayOffs; return false;
public static Buffer put(final MemoryManager memoryManager, Buffer dstBuffer, final byte[] tempBuffer, final String s) { final int size = s.length(); dstBuffer = checkAndResizeIfNeeded(memoryManager, dstBuffer, size); if (dstBuffer.hasArray()) { @SuppressWarnings("MismatchedReadAndWriteOfArray") final byte[] array = dstBuffer.array(); final int arrayOffs = dstBuffer.arrayOffset(); int pos = arrayOffs + dstBuffer.position(); // Make sure custom Strings do not contain service symbols for (int i = 0; i < size; i++) { byte b = (byte) (s.charAt(i)); array[pos++] = isNonPrintableUsAscii(b) ? Constants.SP : b; } dstBuffer.position(pos - arrayOffs); } else { fastAsciiEncode(s, tempBuffer, dstBuffer); } return dstBuffer; }
private static Buffer checkAndResizeIfNeeded(MemoryManager memoryManager, Buffer dstBuffer, int length) { if (dstBuffer.remaining() < length) { dstBuffer = resizeBuffer(memoryManager, dstBuffer, length); } return dstBuffer; } }
public static int skipSpaces(final byte[] input, int offset, final int end, final int packetLimit) { final int limit = Math.min(end, packetLimit); while (offset < limit) { final byte b = input[offset]; if (isNotSpaceAndTab(b)) { return offset; } offset++; } return -1; }
protected boolean parseHeadersFromBuffer(final HttpHeader httpHeader, final MimeHeaders mimeHeaders, final HeaderParsingState parsingState, final Buffer input) { do { if (parsingState.subState == 0) { final int eol = checkEOL(parsingState, input); if (eol == 0) { // EOL return true; } else if (eol == -2) { // not enough data return false; } } if (!parseHeaderFromBuffer(httpHeader, mimeHeaders, parsingState, input)) { return false; } } while (true); }
private static void fastAsciiEncode(final String s, byte[] tempBuffer, final Buffer dstBuffer) { int totalLen = s.length(); if (tempBuffer == null) { tempBuffer = new byte[totalLen]; } int count = 0; while (count < totalLen) { int len = Math.min(totalLen - count, tempBuffer.length); for (int i = 0; i < len; i++) { int c = s.charAt(count); tempBuffer[i] = isNonPrintableUsAscii(c) ? Constants.SP : (byte) c; count++; } dstBuffer.put(tempBuffer, 0, len); } }
public static Buffer put(final MemoryManager memoryManager, Buffer dstBuffer, final byte[] array) { return put(memoryManager, dstBuffer, array, 0, array.length); }
case 0 : { // parse the method name final int spaceIdx = findSpace(input, parsingState.offset, reqLimit); if (spaceIdx == -1) { parsingState.offset = input.limit(); skipSpaces(input, parsingState.offset, reqLimit); if (nonSpaceIdx == -1) { parsingState.offset = input.limit(); skipSpaces(input, parsingState.offset, reqLimit); if (nonSpaceIdx == -1) { parsingState.offset = input.limit(); if (!findEOL(parsingState, input)) { parsingState.offset = input.limit(); return false;
public static Buffer put(final MemoryManager memoryManager, Buffer dstBuffer, final byte[] tempBuffer, final String s) { final int size = s.length(); dstBuffer = checkAndResizeIfNeeded(memoryManager, dstBuffer, size); if (dstBuffer.hasArray()) { @SuppressWarnings("MismatchedReadAndWriteOfArray") final byte[] array = dstBuffer.array(); final int arrayOffs = dstBuffer.arrayOffset(); int pos = arrayOffs + dstBuffer.position(); // Make sure custom Strings do not contain service symbols for (int i = 0; i < size; i++) { byte b = (byte) (s.charAt(i)); array[pos++] = isNonPrintableUsAscii(b) ? Constants.SP : b; } dstBuffer.position(pos - arrayOffs); } else { fastAsciiEncode(s, tempBuffer, dstBuffer); } return dstBuffer; }
private static Buffer checkAndResizeIfNeeded(MemoryManager memoryManager, Buffer dstBuffer, int length) { if (dstBuffer.remaining() < length) { dstBuffer = resizeBuffer(memoryManager, dstBuffer, length); } return dstBuffer; } }
public static int skipSpaces(final byte[] input, int offset, final int end, final int packetLimit) { final int limit = Math.min(end, packetLimit); while (offset < limit) { final byte b = input[offset]; if (isNotSpaceAndTab(b)) { return offset; } offset++; } return -1; }
protected boolean parseHeadersFromBuffer(final HttpHeader httpHeader, final MimeHeaders mimeHeaders, final HeaderParsingState parsingState, final Buffer input) { do { if (parsingState.subState == 0) { final int eol = checkEOL(parsingState, input); if (eol == 0) { // EOL return true; } else if (eol == -2) { // not enough data return false; } } if (!parseHeaderFromBuffer(httpHeader, mimeHeaders, parsingState, input)) { return false; } } while (true); }
private static void fastAsciiEncode(final String s, byte[] tempBuffer, final Buffer dstBuffer) { int totalLen = s.length(); if (tempBuffer == null) { tempBuffer = new byte[totalLen]; } int count = 0; while (count < totalLen) { int len = Math.min(totalLen - count, tempBuffer.length); for (int i = 0; i < len; i++) { int c = s.charAt(count); tempBuffer[i] = isNonPrintableUsAscii(c) ? Constants.SP : (byte) c; count++; } dstBuffer.put(tempBuffer, 0, len); } }
public static Buffer put(final MemoryManager memoryManager, Buffer dstBuffer, final byte[] array) { return put(memoryManager, dstBuffer, array, 0, array.length); }
case 0 : { // parse the method name final int spaceIdx = findSpace(input, parsingState.offset, reqLimit); if (spaceIdx == -1) { parsingState.offset = input.limit(); skipSpaces(input, parsingState.offset, reqLimit); if (nonSpaceIdx == -1) { parsingState.offset = input.limit(); skipSpaces(input, parsingState.offset, reqLimit); if (nonSpaceIdx == -1) { parsingState.offset = input.limit(); if (!findEOL(parsingState, input)) { parsingState.offset = input.limit(); return false;
public static Buffer put(final MemoryManager memoryManager, Buffer dstBuffer, final byte[] tempBuffer, final String s) { final int size = s.length(); dstBuffer = checkAndResizeIfNeeded(memoryManager, dstBuffer, size); if (dstBuffer.hasArray()) { @SuppressWarnings("MismatchedReadAndWriteOfArray") final byte[] array = dstBuffer.array(); final int arrayOffs = dstBuffer.arrayOffset(); int pos = arrayOffs + dstBuffer.position(); // Make sure custom Strings do not contain service symbols for (int i = 0; i < size; i++) { byte b = (byte) (s.charAt(i)); array[pos++] = isNonPrintableUsAscii(b) ? Constants.SP : b; } dstBuffer.position(pos - arrayOffs); } else { fastAsciiEncode(s, tempBuffer, dstBuffer); } return dstBuffer; }
private static Buffer putBytes(final MemoryManager memoryManager, Buffer dstBuffer, final byte[] bytes) { final int size = bytes.length; // Don't forget the terminating \0 (that's why "+ 1") if (dstBuffer.remaining() < size + 2 + 1) { dstBuffer = resizeBuffer(memoryManager, dstBuffer, size + 2 + 1); } dstBuffer.putShort((short) size); dstBuffer = put(memoryManager, dstBuffer, bytes); // Don't forget the terminating \0 dstBuffer.put((byte) 0); return dstBuffer; }