@Override public NextAction handleRead(FilterChainContext context) throws IOException { Object message = context.getMessage(); Connection<?> connection = context.getConnection(); Channel channel = GrizzlyChannel.getOrAddChannel(connection, url, handler); try { previousData.writeBytes(grizzlyBuffer.toByteBuffer()); frame = previousData; } else { int size = previousData.readableBytes() + grizzlyBuffer.remaining(); frame = ChannelBuffers.dynamicBuffer(size > bufferSize ? size : bufferSize); frame.writeBytes(previousData, previousData.readableBytes()); frame.writeBytes(grizzlyBuffer.toByteBuffer()); frame = ChannelBuffers.wrappedBuffer(grizzlyBuffer.toByteBuffer()); return context.getStopAction(); } else { if (savedReadIndex == frame.readerIndex()) {
@Override public byte[] getBodyPartBytes() { byte[] bytes = contentBytes.get(); if (bytes != null) { return bytes; } final Buffer b = content.getContent(); final int origPos = b.position(); bytes = new byte[b.remaining()]; b.get(bytes); b.flip(); b.position(origPos); contentBytes.compareAndSet(null, bytes); return bytes; }
@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(); }
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); }
final HttpContent decodeContent(final FilterChainContext ctx, HttpContent httpContent) { if (!httpContent.getContent().hasRemaining() || isResponseToHeadRequest(httpContent.getHttpHeader())) { if (httpContent.isLast()) { final Connection connection = ctx.getConnection(); final MemoryManager memoryManager = connection.getMemoryManager(); final HttpHeader httpHeader = httpContent.getHttpHeader(); final ContentParsingState parsingState = ((HttpPacketParsing) httpHeader).getContentParsingState(); final List<ContentEncoding> encodings = httpHeader.getContentEncodings(true); final Buffer newChunk = httpContent.getContent(); httpContent.setContent( Buffers.appendBuffers(memoryManager, oldRemainder, newChunk));
private static NextAction handleClientHandShake(FilterChainContext ctx, HttpContent content) { final WebSocketHolder holder = WebSocketHolder.get(ctx.getConnection()); holder.handshake.validateServerResponse((HttpResponsePacket) content.getHttpHeader()); holder.webSocket.onConnect(); if (content.getContent().hasRemaining()) { return ctx.getRerunFilterAction(); } else { content.recycle(); return ctx.getStopAction(); } } }
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; }
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(); if (buffer.hasRemaining()) { final HttpContent content = requestPacket.httpContentBuilder() .content(buffer) .last(true) .build(); buffer.allowBufferDispose(false); ctx.write(content, ((!requestPacket.isCommitted()) ? ctx.getTransportContext().getCompletionHandler() : null));
System.out.println("Writing request:\n"); System.out.println(request.toString()); ctx.write(request); // write the request MemoryManager mm = ctx.getConnection().getTransport().getMemoryManager(); for (int i = 0, len = CONTENT.length; i < len; i++) { HttpContent.Builder contentBuilder = request.httpContentBuilder(); Buffer b = Buffers.wrap(mm, CONTENT[i]); contentBuilder.content(b); HttpContent content = contentBuilder.build(); System.out.printf("(Client writing: %s)\n", b.toStringContent()); ctx.write(content); try { Thread.sleep(2000);
@SuppressWarnings("unchecked") protected void sendRaw(byte[] rawData) { final Connection connection = protocolHandler.getConnection(); final MemoryManager mm = connection.getTransport().getMemoryManager(); final Buffer buffer = Buffers.wrap(mm, rawData); buffer.allowBufferDispose(false); connection.write(buffer); }
private int extractType(final FilterChainContext ctx, final Buffer buffer) { return !httpRequestInProcessAttr.isSet(ctx.getConnection()) ? // if request is no in process - it should be a new Ajp message buffer.get() & 0xFF : // Ajp Data Packet AjpConstants.JK_AJP13_DATA; } }
@Override public Result find(final PUContext puContext, final FilterChainContext ctx) { final Buffer buffer = ctx.getMessage(); try { final int expectedLength = getSSLPacketSize(buffer); if (expectedLength == -1 || buffer.remaining() < expectedLength) { return Result.NEED_MORE_DATA; } } catch (SSLException e) { LOGGER.log(Level.FINE, "Packet header is not SSL", e); return Result.NOT_FOUND; } return Result.FOUND; } }
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 { buffer.dispose(); requestPacket.httpContentBuilder().content(buffer). last(last).build(); ctx.write(content, ((!requestPacket.isCommitted()) ? ctx.getTransportContext().getCompletionHandler() : null));
public void append(final BufferChunk bc) { final int oldPos = buffer.position(); final int oldLim = buffer.limit(); final int srcLen = bc.getLength() ; Buffers.setPositionLimit(buffer, end, end + srcLen); buffer.put(bc.getBuffer(), bc.getStart(), srcLen); Buffers.setPositionLimit(buffer, oldPos, oldLim); end += srcLen; }
@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; }
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 { buffer.dispose(); if (readBytes < 0) { last = true;
@Override protected void onHttpContentEncoded(final HttpContent content, final FilterChainContext ctx) { final HttpTransactionContext context = HttpTransactionContext.currentTransaction(content.getHttpHeader()); final AsyncHandler handler = context.getAsyncHandler(); if (handler instanceof TransferCompletionHandler) { final int written = content.getContent().remaining(); context.totalBodyWritten += written; final long total = context.totalBodyWritten; ((TransferCompletionHandler) handler).onContentWriteProgress( written, total, content.getHttpHeader().getContentLength()); } }
@Override public Buffer toBuffer(final MemoryManager memoryManager) { final boolean isPadded = isFlagSet(PADDED); final int extraHeaderLen = isPadded ? 1 : 0; final Buffer buffer = memoryManager.allocate( FRAME_HEADER_SIZE + extraHeaderLen); serializeFrameHeader(buffer); if (isPadded) { buffer.put((byte) (padLength & 0xff)); } buffer.trim(); final CompositeBuffer cb = CompositeBuffer.newBuffer( memoryManager, buffer, data); cb.allowBufferDispose(true); cb.allowInternalBuffersDispose(true); return cb; }