@Override public NextAction handleWrite(FilterChainContext context) throws IOException { Connection<?> connection = context.getConnection(); GrizzlyChannel channel = GrizzlyChannel.getOrAddChannel(connection, url, handler); try { ChannelBuffer channelBuffer = ChannelBuffers.dynamicBuffer(1024); // Do not need to close Object msg = context.getMessage(); codec.encode(channel, channelBuffer, msg); GrizzlyChannel.removeChannelIfDisconnected(connection); Buffer buffer = connection.getTransport().getMemoryManager().allocate(channelBuffer.readableBytes()); buffer.put(channelBuffer.toByteBuffer()); buffer.flip(); buffer.allowBufferDispose(true); context.setMessage(buffer); } finally { GrizzlyChannel.removeChannelIfDisconnected(connection); } return context.getInvokeAction(); }
throws IOException { final MemoryManager mm = ctx.getMemoryManager(); Buffer buffer = mm.allocate(512); final byte[] b = new byte[512]; int read; if (read > buffer.remaining()) { buffer = mm.reallocate(buffer, buffer.capacity() + 512); buffer.put(b, 0, read); buffer.trim(); .build(); buffer.allowBufferDispose(false); ctx.write(content, ((!requestPacket.isCommitted()) ? ctx.getTransportContext().getCompletionHandler() : null));
private void sendEndResponse(final FilterChainContext ctx) throws IOException { final Connection connection = ctx.getConnection(); final MemoryManager mm = connection.getTransport().getMemoryManager(); final Buffer buffer = mm.allocate(6); buffer.put((byte) 'A'); buffer.put((byte) 'B'); buffer.putShort((short) 2); buffer.put(AjpConstants.JK_AJP13_END_RESPONSE); buffer.put((byte) 1); buffer.flip(); buffer.allowBufferDispose(true); ctx.write(buffer); }
@Override protected TransformationResult<Buffer, Buffer> transformImpl( AttributeStorage storage, Buffer input) throws TransformationException { if (!input.hasRemaining()) { return TransformationResult.createIncompletedResult(input); } final int chunkSize = Math.min(chunk, input.remaining()); final int oldInputPos = input.position(); final int oldInputLimit = input.limit(); Buffers.setPositionLimit(input, oldInputPos, oldInputPos + chunkSize); final Buffer output = obtainMemoryManager(storage).allocate(chunkSize); output.put(input).flip(); Buffers.setPositionLimit(input, oldInputPos + chunkSize, oldInputLimit); return TransformationResult.createCompletedResult( output, input); }
@Override public Buffer toBuffer(final MemoryManager memoryManager) { final Buffer buffer = memoryManager.allocate( FRAME_HEADER_SIZE); serializeFrameHeader(buffer); buffer.trim(); final CompositeBuffer cb = CompositeBuffer.newBuffer(memoryManager, buffer, compressedHeaders); cb.allowBufferDispose(true); cb.allowInternalBuffersDispose(true); return cb; }
Buffer cloneContent(final MemoryManager memoryManager) { final Buffer buffer; final int length = remaining(); if (!hasClonedArray) { buffer = memoryManager.allocate(length); buffer.put(heap, offset + pos, length); buffer.flip(); } else { buffer = Buffers.wrap(memoryManager, heap, offset + pos, length); } buffer.allowBufferDispose(true); dispose(); return buffer; }
final MemoryManager mm = ctx.getMemoryManager(); boolean last = false; Buffer buffer = mm.allocate(MAX_CHUNK_SIZE); buffer.allowBufferDispose(true); final long readBytes = bodyLocal.read(buffer.toByteBuffer()); if (readBytes > 0) { buffer.position((int) readBytes); buffer.trim(); } else { requestPacket.httpContentBuilder().content(buffer). last(last).build(); ctx.write(content, ((!requestPacket.isCommitted()) ? ctx.getTransportContext().getCompletionHandler() : null));
final Body bodyLocal = feedableBodyGenerator.createBody(); try { final MemoryManager mm = ctx.getMemoryManager(); boolean last = false; while (!last) { Buffer buffer = mm.allocate(PayloadGenerator.MAX_CHUNK_SIZE); buffer.allowBufferDispose(true); final long readBytes = bodyLocal.read(buffer.toByteBuffer()); if (readBytes > 0) { buffer.position((int) readBytes); buffer.trim(); } else {
@Override public Buffer toBuffer(final MemoryManager memoryManager) { final Buffer buffer = memoryManager.allocate(FRAME_HEADER_SIZE + 8); serializeFrameHeader(buffer); buffer.putInt(lastStreamId & 0x7fffffff); buffer.putInt(errorCode.getCode()); buffer.trim(); if (additionalDebugData == null || !additionalDebugData.hasRemaining()) { return buffer; } final CompositeBuffer cb = CompositeBuffer.newBuffer( memoryManager, buffer, additionalDebugData); cb.allowBufferDispose(true); cb.allowInternalBuffersDispose(true); return cb; }
public int read(final UDPNIOConnection connection, Buffer buffer, final ReadResult<Buffer, SocketAddress> currentResult) throws IOException { int read = 0; final boolean isAllocate = (buffer == null && currentResult != null); if (isAllocate) { buffer = memoryManager.allocateAtLeast(connection.getReadBufferSize()); } try { read = connection.isConnected() ? readConnected(connection, buffer, currentResult) : readNonConnected(connection, buffer, currentResult); connection.onRead(buffer, read); } catch (Exception e) { read = -1; } finally { if (isAllocate) { if (read <= 0) { buffer.dispose(); } else { buffer.allowBufferDispose(true); } } } return read; }
public void sendInputStreamChunk() throws IOException { final Buffer buffer = memoryManager.allocate(bufferSize); final byte[] bufferByteArray = buffer.array(); final int offset = buffer.arrayOffset(); final int length = buffer.remaining(); int bytesRead = inputStream.read(bufferByteArray, offset, length); final HttpContent content; if (bytesRead == -1) { content = httpResponsePacket.httpTrailerBuilder().build(); isDone = true; } else { buffer.limit(bytesRead); content = httpResponsePacket.httpContentBuilder().content(buffer).build(); } ctx.write(content, this); }
@Override @SuppressWarnings("unchecked") public Buffer grow(final SSLConnectionContext sslCtx, final Buffer oldBuffer, final int newSize) { final MemoryManager mm = sslCtx.getConnection().getMemoryManager(); return oldBuffer == null ? mm.allocate(newSize) : mm.reallocate(oldBuffer, newSize); } };
@Test public void testBuffers() { Buffer sampleBuffer = Buffers.wrap(mm, new byte[]{-1, 0, 1, 1, 2, 3, 4}); Buffer b1 = mm.allocate(3); Buffer b2 = mm.allocate(4); CompositeBuffer compositeBuffer = createCompositeBuffer(b1, b2); compositeBuffer.put(sampleBuffer); compositeBuffer.flip(); sampleBuffer.flip(); while (sampleBuffer.hasRemaining()) { assertEquals(sampleBuffer.get(), compositeBuffer.get()); } }
@Test public void testEmptyBufferPrepend() { Buffer buffer1 = Buffers.wrap(mm, "1234"); buffer1.position(3); Buffer buffer2 = mm.allocate(0); CompositeBuffer compositeBuffer = createCompositeBuffer(buffer1); assertEquals('4', (char) compositeBuffer.get(0)); Buffer resultBuffer = Buffers.appendBuffers(mm, buffer2, compositeBuffer); assertEquals(resultBuffer.toStringContent(), "4"); }
private void init() { if (buffer == null) { buffer = CompositeBuffer.newBuffer(memoryManager); buffer.allowInternalBuffersDispose(true); buffer.allowBufferDispose(true); buffer.append(memoryManager.allocate(DEFAULT_BUFFER_SIZE)); } } }
@SuppressWarnings({"unchecked"}) private static Buffer resizeBuffer(final MemoryManager memoryManager, final Buffer buffer, final int grow) { if (buffer == null) { return memoryManager.allocate(Math.max(grow, 4096)); } return memoryManager.reallocate(buffer, Math.max( buffer.capacity() + grow, (buffer.capacity() * 3) / 2 + 1)); }
protected Buffer acquireBuffer(Connection connection) { Transport connectionTransport = connection.getTransport(); return connectionTransport.getMemoryManager(). allocate(DEFAULT_BUFFER_SIZE); }
@SuppressWarnings({"unchecked"}) public static Buffer resizeBuffer(final MemoryManager memoryManager, final Buffer buffer, final int grow) { return memoryManager.reallocate(buffer, Math.max( buffer.capacity() + grow, (buffer.capacity() * 3) / 2 + 1)); }
@BeforeMethod public void setUp() throws Exception { when(request.getBodyGenerator()).thenReturn(bodyGenerator); when(bodyGenerator.createBody()).thenReturn(body); when(context.getMemoryManager()).thenReturn(memoryManager); when(requestPacket.isCommitted()).thenReturn(true); when(memoryManager.allocate(anyInt())).thenReturn(buffer); when(body.read(any(ByteBuffer.class))).thenReturn(-1L); }