@Override public int length() { if (data() == null) return 0; switch(_mode) { case INNER_WRITE_BUFFER: if (data().position() > _startPos + _tunnelStreamHeaderLen) /* Application has written content. Return the length of that content. */ return data().position() - (_startPos + _tunnelStreamHeaderLen); else /* At the start of application's encoding. Return capacity. */ return _innerCapacity; case INNER_READ_BUFFER: /* Return length of encoded content. */ return data().limit() - (_startPos + _tunnelStreamHeaderLen); case FULL_READ_BUFFER: /* Return full length (encoded content and TunnelStream header). */ return data().limit() - _startPos; default: /* FULL_WRITE_BUFFER */ if (data().position() > _startPos) /* TunnelStream Header (and possibly content) is encoded. */ return data().position() - _startPos; else /* Nothing encoded; return full capacity. */ return _innerCapacity + _tunnelStreamHeaderLen; } }
void getBufferSlice(TunnelStreamBuffer bufferImpl, int length) { if (_currentBuffer == null || (_currentBuffer._data.limit() - _currentBuffer._position) < length) { _currentBuffer = _bufferList.pop(); if (_currentBuffer == null) { _currentBuffer = new SliceableBuffer(); } } DuplicateBuffer duplicateBuffer = _currentBuffer.getDuplicate(false); bufferImpl._duplicateBuffer = duplicateBuffer; bufferImpl.data(duplicateBuffer._data, _currentBuffer._position, length); _currentBuffer._position += length; _currentBuffer._numSlicesInUse++; bufferImpl._parentBuffer = _currentBuffer; bufferImpl._isUserBuffer = false; }
void getBufferSlice(TunnelStreamBuffer bufferImpl, int length, boolean isForUser) { if (_numberOfCalls++ < _numberBuffersToReturn) { super.getBufferSlice(bufferImpl, length, isForUser); } else { bufferImpl.data(null); } } }
protected void copyToTunnelStreamBuffer(TunnelStreamPersistenceBuffer persistBuffer, TunnelStreamBuffer tunnelStreamBuffer) { int tmpLimit = _fileByteBuf.limit(); int startPos = persistBuffer.filePosition() + persistBufferMsgOffset() + persistBuffer.tunnelStreamHeaderLen(); int length = persistBuffer.length() - persistBuffer.tunnelStreamHeaderLen(); _fileByteBuf.limit(startPos + length); _fileByteBuf.position(startPos); tunnelStreamBuffer.data().put(_fileByteBuf); _fileByteBuf.limit(tmpLimit); tunnelStreamBuffer.setCurrentPositionAsEndOfEncoding(); tunnelStreamBuffer.persistenceBuffer(_tunnelSubstream, persistBuffer); }
newTimeoutNsec = 1 * TunnelStreamUtil.NANO_PER_MILLI; TunnelStreamUtil.replaceQueueDataTimeout(tunnelBuffer.data(), newTimeoutNsec / TunnelStreamUtil.NANO_PER_MILLI);
tunnelBuffer.data().put(tunnelBigBuffer.data().array(), totalMsgLength - bytesRemainingToSend, lengthOfFragment); tunnelBuffer.setCurrentPositionAsEndOfEncoding();
_bufferPool.getBufferSlice(tunnelBuffer, length + SlicedBufferPool.TUNNEL_STREAM_HDR_SIZE, true); if (tunnelBuffer.data() == null)
if (buffer != null) deliveredMsg.encodedDataBody().copy(buffer.data()); ret = handleTunnelStreamFragmentedMsg(dataHeader, buffer.data(), dataHeader.containerType(), _errorInfo); if (buffer != null) deliveredMsg.encodedDataBody().copy(buffer.data()); ret = handleTunnelStreamFragmentedMsg(dataHeader, buffer.data(), dataHeader.containerType(), _errorInfo);
_bufferPool.getBufferSlice(tunnelBuffer, length + (addTunnelStreamHeader ? SlicedBufferPool.TUNNEL_STREAM_HDR_SIZE : 0), isForUser); if (tunnelBuffer.data() == null)
if (fragmentNumber == 1) msgHeaderLength = tunnelStreamBuffer.data().getShort(headerLength) + 2; for (int i = headerLength + extraHeaderLength; i < bufferLength; i++) byte readByte = tunnelStreamBuffer.data().get(i); assertEquals(readByte, b++); if (fragmentNumber == 1) msgHeaderLength = tunnelStreamBuffer.data().getShort(headerLength) + 2; for (int i = headerLength + extraHeaderLength; i < bufferLength; i++) byte readByte = tunnelStreamBuffer.data().get(i); assertEquals(readByte, b++);