static DataFrame create() { DataFrame frame = ThreadCache.takeFromCache(CACHE_IDX); if (frame == null) { frame = new DataFrame(); } return frame; }
/** * Remove DataFrame padding (if it was applied). * * @return this DataFrame instance */ public DataFrame normalize() { if (isPadded()) { clearFlag(PADDED); data.limit(data.limit() - padLength); padLength = 0; onPayloadUpdated(); } return this; }
public static DataFrame fromBuffer(final int flags, final int streamId, final Buffer buffer) { final DataFrame frame = create(); frame.setFlags(flags); frame.setStreamId(streamId); if (frame.isFlagSet(PADDED)) { frame.padLength = buffer.get() & 0xFF; } // split the Buffer so data Buffer won't be disposed on frame recycle frame.data = buffer.split(buffer.position()); frame.setFrameBuffer(buffer); frame.onPayloadUpdated(); return frame; }
static void log(final Context ctx, final Http2Session c, final DataFrame frame) { validateParams(ctx, c, frame); if (isActive()) { LOGGER.log(LEVEL, DATA_FMT, new Object[]{ escape(c.getConnection().toString()), ctx.getPrefix() + DATA, frame.getStreamId(), frame.isEndStream(), frame.getData().remaining()}); } }
final boolean fin; try { if (dataFrame.isPadded() && dataFrame.getPadLength() >= dataFrame.getLength()) { throw new Http2SessionException(ErrorCode.PROTOCOL_ERROR, "Pad length greater than or equal to the payload length."); dataFrame.normalize(); data = dataFrame.getData(); streamId = dataFrame.getStreamId(); fin = dataFrame.isFlagSet(DataFrame.END_STREAM); dataFrame.recycle();
private int serializeTo(final List<Http2Frame> frames, final int maxDataSize) { final int recordSize = buffer.remaining(); if (recordSize <= maxDataSize) { final DataFrame dataFrame = DataFrame.builder() .streamId(streamId) .data(buffer).endStream(isLast) .build(); frames.add(dataFrame); buffer = null; return recordSize; } else { if (originalCompletionHandler != null && chunkedCompletionHandler == null) { chunkedCompletionHandler = new ChunkedCompletionHandler(originalCompletionHandler); } if (chunkedCompletionHandler != null) { chunkedCompletionHandler.incChunks(); } final Buffer remainder = buffer.split(buffer.position() + maxDataSize); final DataFrame dataFrame = DataFrame.builder() .streamId(streamId) .data(buffer).endStream(false) .build(); frames.add(dataFrame); buffer = remainder; return maxDataSize; } } }
@Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("DataFrame {") .append(headerToString()) .append(", data=").append(data) .append('}'); return sb.toString(); }
public DataFrame build() { final DataFrame frame = DataFrame.create(); setHeaderValuesTo(frame); frame.data = data; frame.padLength = padLength; return frame; }
return DataFrame.fromBuffer(flags, streamId, buffer); case HeadersFrame.TYPE: return HeadersFrame.fromBuffer(flags, streamId, buffer);
final boolean fin; try { if (dataFrame.isPadded() && dataFrame.getPadLength() >= dataFrame.getLength()) { throw new Http2SessionException(ErrorCode.PROTOCOL_ERROR, "Pad length greater than or equal to the payload length."); dataFrame.normalize(); data = dataFrame.getData(); streamId = dataFrame.getStreamId(); fin = dataFrame.isFlagSet(DataFrame.END_STREAM); dataFrame.recycle();
static void log(final Context ctx, final Http2Session c, final DataFrame frame) { validateParams(ctx, c, frame); if (isActive()) { LOGGER.log(LEVEL, DATA_FMT, new Object[]{ escape(c.getConnection().toString()), ctx.getPrefix() + DATA, frame.getStreamId(), frame.isEndStream(), frame.getData().remaining()}); } }
private int serializeTo(final List<Http2Frame> frames, final int maxDataSize) { final int recordSize = buffer.remaining(); if (recordSize <= maxDataSize) { final DataFrame dataFrame = DataFrame.builder() .streamId(streamId) .data(buffer).endStream(isLast) .build(); frames.add(dataFrame); buffer = null; return recordSize; } else { if (originalCompletionHandler != null && chunkedCompletionHandler == null) { chunkedCompletionHandler = new ChunkedCompletionHandler(originalCompletionHandler); } if (chunkedCompletionHandler != null) { chunkedCompletionHandler.incChunks(); } final Buffer remainder = buffer.split(buffer.position() + maxDataSize); final DataFrame dataFrame = DataFrame.builder() .streamId(streamId) .data(buffer).endStream(false) .build(); frames.add(dataFrame); buffer = remainder; return maxDataSize; } } }
@Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("DataFrame {") .append(headerToString()) .append(", data=").append(data) .append('}'); return sb.toString(); }
public DataFrame build() { final DataFrame frame = DataFrame.create(); setHeaderValuesTo(frame); frame.data = data; frame.padLength = padLength; return frame; }
return DataFrame.fromBuffer(flags, streamId, buffer); case HeadersFrame.TYPE: return HeadersFrame.fromBuffer(flags, streamId, buffer);
final boolean fin; try { if (dataFrame.isPadded() && dataFrame.getPadLength() >= dataFrame.getLength()) { throw new Http2SessionException(ErrorCode.PROTOCOL_ERROR, "Pad length greater than or equal to the payload length."); dataFrame.normalize(); data = dataFrame.getData(); streamId = dataFrame.getStreamId(); fin = dataFrame.isFlagSet(DataFrame.END_STREAM); dataFrame.recycle();
public static DataFrame fromBuffer(final int flags, final int streamId, final Buffer buffer) { final DataFrame frame = create(); frame.setFlags(flags); frame.setStreamId(streamId); if (frame.isFlagSet(PADDED)) { frame.padLength = buffer.get() & 0xFF; } // split the Buffer so data Buffer won't be disposed on frame recycle frame.data = buffer.split(buffer.position()); frame.setFrameBuffer(buffer); frame.onPayloadUpdated(); return frame; }
static void log(final Context ctx, final Http2Session c, final DataFrame frame) { validateParams(ctx, c, frame); if (isActive()) { LOGGER.log(LEVEL, DATA_FMT, new Object[]{ escape(c.getConnection().toString()), ctx.getPrefix() + DATA, frame.getStreamId(), frame.isEndStream(), frame.getData().remaining()}); } }
/** * Remove DataFrame padding (if it was applied). * * @return this DataFrame instance */ public DataFrame normalize() { if (isPadded()) { clearFlag(PADDED); data.limit(data.limit() - padLength); padLength = 0; onPayloadUpdated(); } return this; }
private int serializeTo(final List<Http2Frame> frames, final int maxDataSize) { final int recordSize = buffer.remaining(); if (recordSize <= maxDataSize) { final DataFrame dataFrame = DataFrame.builder() .streamId(streamId) .data(buffer).endStream(isLast) .build(); frames.add(dataFrame); buffer = null; return recordSize; } else { if (originalCompletionHandler != null && chunkedCompletionHandler == null) { chunkedCompletionHandler = new ChunkedCompletionHandler(originalCompletionHandler); } if (chunkedCompletionHandler != null) { chunkedCompletionHandler.incChunks(); } final Buffer remainder = buffer.split(buffer.position() + maxDataSize); final DataFrame dataFrame = DataFrame.builder() .streamId(streamId) .data(buffer).endStream(false) .build(); frames.add(dataFrame); buffer = remainder; return maxDataSize; } } }