Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@

public class ByteBufferUtil {

private ByteBufferUtil() {
}
private ByteBufferUtil() {}

/**
* Slice a portion of the {@link ByteBuffer} while preserving the buffers position and limit.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,11 @@ private ErrorFrameFlyweight() {}
public static final int INVALID_SETUP = 0x0001;
public static final int UNSUPPORTED_SETUP = 0x0002;
public static final int REJECTED_SETUP = 0x0003;
public static final int CONNECTION_ERROR = 0x0011;
public static final int APPLICATION_ERROR = 0x0021;
public static final int CONNECTION_ERROR = 0x0101;
public static final int APPLICATION_ERROR = 0x0201;
public static final int REJECTED = 0x0022;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why not fix Rejected?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oversight.

public static final int CANCEL = 0x0023;
public static final int INVALID = 0x0024;
public static final int CANCEL = 0x0203;
public static final int INVALID = 0x0204;

// relative to start of passed offset
private static final int ERROR_CODE_FIELD_OFFSET = FrameHeaderFlyweight.FRAME_HEADER_LENGTH;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,7 @@
*
* Not thread-safe. Assumed to be used single-threaded
*/
public class FrameHeaderFlyweight
{
public class FrameHeaderFlyweight {

private FrameHeaderFlyweight() {}

Expand All @@ -62,14 +61,10 @@ private FrameHeaderFlyweight() {}

public static final int FLAGS_REQUEST_CHANNEL_F = 0b0010_0000_0000_0000;

static
{
if (INCLUDE_FRAME_LENGTH)
{
static {
if (INCLUDE_FRAME_LENGTH) {
FRAME_LENGTH_FIELD_OFFSET = 0;
}
else
{
} else {
FRAME_LENGTH_FIELD_OFFSET = -BitUtil.SIZE_OF_INT;
}

Expand All @@ -81,8 +76,7 @@ private FrameHeaderFlyweight() {}
FRAME_HEADER_LENGTH = PAYLOAD_OFFSET;
}

public static int computeFrameHeaderLength(final FrameType frameType, int metadataLength, final int dataLength)
{
public static int computeFrameHeaderLength(final FrameType frameType, int metadataLength, final int dataLength) {
return PAYLOAD_OFFSET + computeMetadataLength(metadataLength) + dataLength;
}

Expand All @@ -92,10 +86,9 @@ public static int encodeFrameHeader(
final int frameLength,
final int flags,
final FrameType frameType,
final int streamId)
{
if (INCLUDE_FRAME_LENGTH)
{
final int streamId
) {
if (INCLUDE_FRAME_LENGTH) {
mutableDirectBuffer.putInt(offset + FRAME_LENGTH_FIELD_OFFSET, frameLength, ByteOrder.BIG_ENDIAN);
}

Expand All @@ -110,13 +103,12 @@ public static int encodeMetadata(
final MutableDirectBuffer mutableDirectBuffer,
final int frameHeaderStartOffset,
final int metadataOffset,
final ByteBuffer metadata)
{
final ByteBuffer metadata
) {
int length = 0;
final int metadataLength = metadata.remaining();

if (0 < metadataLength)
{
if (0 < metadataLength) {
int flags = mutableDirectBuffer.getShort(frameHeaderStartOffset + FLAGS_FIELD_OFFSET, ByteOrder.BIG_ENDIAN);
flags |= FLAGS_M;
mutableDirectBuffer.putShort(frameHeaderStartOffset + FLAGS_FIELD_OFFSET, (short)flags, ByteOrder.BIG_ENDIAN);
Expand All @@ -132,13 +124,12 @@ public static int encodeMetadata(
public static int encodeData(
final MutableDirectBuffer mutableDirectBuffer,
final int dataOffset,
final ByteBuffer data)
{
final ByteBuffer data
) {
int length = 0;
final int dataLength = data.remaining();

if (0 < dataLength)
{
if (0 < dataLength) {
mutableDirectBuffer.putBytes(dataOffset, data, dataLength);
length += dataLength;
}
Expand All @@ -154,14 +145,13 @@ public static int encode(
int flags,
final FrameType frameType,
final ByteBuffer metadata,
final ByteBuffer data)
{
final ByteBuffer data
) {
final int frameLength = computeFrameHeaderLength(frameType, metadata.remaining(), data.remaining());

final FrameType outFrameType;

switch (frameType)
{
switch (frameType) {
case COMPLETE:
outFrameType = FrameType.RESPONSE;
flags |= FLAGS_RESPONSE_C;
Expand All @@ -182,114 +172,95 @@ public static int encode(
return length;
}

public static int flags(final DirectBuffer directBuffer, final int offset)
{
public static int flags(final DirectBuffer directBuffer, final int offset) {
return directBuffer.getShort(offset + FLAGS_FIELD_OFFSET, ByteOrder.BIG_ENDIAN);
}

public static FrameType frameType(final DirectBuffer directBuffer, final int offset)
{
public static FrameType frameType(final DirectBuffer directBuffer, final int offset) {
FrameType result = FrameType.from(directBuffer.getShort(offset + TYPE_FIELD_OFFSET, ByteOrder.BIG_ENDIAN));

if (FrameType.RESPONSE == result)
{
if (FrameType.RESPONSE == result) {
final int flags = flags(directBuffer, offset);
final int dataLength = dataLength(directBuffer, offset, 0);

if (FLAGS_RESPONSE_C == (flags & FLAGS_RESPONSE_C) && 0 < dataLength)
{
boolean complete = FLAGS_RESPONSE_C == (flags & FLAGS_RESPONSE_C);
if (complete && 0 < dataLength) {
result = FrameType.NEXT_COMPLETE;
}
else if (FLAGS_RESPONSE_C == (flags & FLAGS_RESPONSE_C))
{
} else if (complete) {
result = FrameType.COMPLETE;
}
else
{
} else {
result = FrameType.NEXT;
}
}

return result;
}

public static int streamId(final DirectBuffer directBuffer, final int offset)
{
public static int streamId(final DirectBuffer directBuffer, final int offset) {
return directBuffer.getInt(offset + STREAM_ID_FIELD_OFFSET, ByteOrder.BIG_ENDIAN);
}

public static ByteBuffer sliceFrameData(final DirectBuffer directBuffer, final int offset, final int length)
{
public static ByteBuffer sliceFrameData(final DirectBuffer directBuffer, final int offset, final int length) {
final int dataLength = dataLength(directBuffer, offset, length);
final int dataOffset = dataOffset(directBuffer, offset);
ByteBuffer result = NULL_BYTEBUFFER;

if (0 < dataLength)
{
if (0 < dataLength) {
result = preservingSlice(directBuffer.byteBuffer(), dataOffset, dataOffset + dataLength);
}

return result;
}

public static ByteBuffer sliceFrameMetadata(final DirectBuffer directBuffer, final int offset, final int length)
{
public static ByteBuffer sliceFrameMetadata(final DirectBuffer directBuffer, final int offset, final int length) {
final int metadataLength = Math.max(0, metadataFieldLength(directBuffer, offset) - BitUtil.SIZE_OF_INT);
final int metadataOffset = metadataOffset(directBuffer, offset) + BitUtil.SIZE_OF_INT;
ByteBuffer result = NULL_BYTEBUFFER;

if (0 < metadataLength)
{
if (0 < metadataLength) {
result = preservingSlice(directBuffer.byteBuffer(), metadataOffset, metadataOffset + metadataLength);
}

return result;
}

private static int frameLength(final DirectBuffer directBuffer, final int offset, final int externalFrameLength)
{
private static int frameLength(final DirectBuffer directBuffer, final int offset, final int externalFrameLength) {
int frameLength = externalFrameLength;

if (INCLUDE_FRAME_LENGTH)
{
if (INCLUDE_FRAME_LENGTH) {
frameLength = directBuffer.getInt(offset + FRAME_LENGTH_FIELD_OFFSET, ByteOrder.BIG_ENDIAN);
}

return frameLength;
}

private static int computeMetadataLength(final int metadataPayloadLength)
{
private static int computeMetadataLength(final int metadataPayloadLength) {
return metadataPayloadLength + ((0 == metadataPayloadLength) ? 0 : BitUtil.SIZE_OF_INT);
}

private static int metadataFieldLength(final DirectBuffer directBuffer, final int offset)
{
private static int metadataFieldLength(final DirectBuffer directBuffer, final int offset) {
int metadataLength = 0;

if (FLAGS_M == (FLAGS_M & directBuffer.getShort(offset + FLAGS_FIELD_OFFSET, ByteOrder.BIG_ENDIAN)))
{
short flags = directBuffer.getShort(offset + FLAGS_FIELD_OFFSET, ByteOrder.BIG_ENDIAN);
if (FLAGS_M == (FLAGS_M & flags)) {
metadataLength = directBuffer.getInt(metadataOffset(directBuffer, offset), ByteOrder.BIG_ENDIAN) & 0xFFFFFF;
}

return metadataLength;
}

private static int dataLength(final DirectBuffer directBuffer, final int offset, final int externalLength)
{
private static int dataLength(final DirectBuffer directBuffer, final int offset, final int externalLength) {
final int frameLength = frameLength(directBuffer, offset, externalLength);
final int metadataLength = metadataFieldLength(directBuffer, offset);

return offset + frameLength - metadataLength - payloadOffset(directBuffer, offset);
}

private static int payloadOffset(final DirectBuffer directBuffer, final int offset)
{
private static int payloadOffset(final DirectBuffer directBuffer, final int offset) {
final FrameType frameType = FrameType.from(directBuffer.getShort(offset + TYPE_FIELD_OFFSET, ByteOrder.BIG_ENDIAN));
int result = offset + PAYLOAD_OFFSET;

switch (frameType)
{
switch (frameType) {
case SETUP:
result = SetupFrameFlyweight.payloadOffset(directBuffer, offset);
break;
Expand Down Expand Up @@ -317,13 +288,11 @@ private static int payloadOffset(final DirectBuffer directBuffer, final int offs
return result;
}

private static int metadataOffset(final DirectBuffer directBuffer, final int offset)
{
private static int metadataOffset(final DirectBuffer directBuffer, final int offset) {
return payloadOffset(directBuffer, offset);
}

private static int dataOffset(final DirectBuffer directBuffer, final int offset)
{
private static int dataOffset(final DirectBuffer directBuffer, final int offset) {
return payloadOffset(directBuffer, offset) + metadataFieldLength(directBuffer, offset);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,22 +21,20 @@

import java.nio.ByteBuffer;

public class KeepaliveFrameFlyweight
{
public class KeepaliveFrameFlyweight {
private KeepaliveFrameFlyweight() {}

private static final int PAYLOAD_OFFSET = FrameHeaderFlyweight.FRAME_HEADER_LENGTH;

public static int computeFrameLength(final int dataLength)
{
public static int computeFrameLength(final int dataLength) {
return FrameHeaderFlyweight.computeFrameHeaderLength(FrameType.SETUP, 0, dataLength);
}

public static int encode(
final MutableDirectBuffer mutableDirectBuffer,
final int offset,
final ByteBuffer data)
{
final ByteBuffer data
) {
final int frameLength = computeFrameLength(data.remaining());

int length = FrameHeaderFlyweight.encodeFrameHeader(mutableDirectBuffer, offset, frameLength, 0, FrameType.KEEPALIVE, 0);
Expand All @@ -46,8 +44,7 @@ public static int encode(
return length;
}

public static int payloadOffset(final DirectBuffer directBuffer, final int offset)
{
public static int payloadOffset(final DirectBuffer directBuffer, final int offset) {
return offset + PAYLOAD_OFFSET;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,16 @@
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class LeaseFrameFlyweight
{
public class LeaseFrameFlyweight {
private LeaseFrameFlyweight() {}

// relative to start of passed offset
private static final int TTL_FIELD_OFFSET = FrameHeaderFlyweight.FRAME_HEADER_LENGTH;
private static final int NUM_REQUESTS_FIELD_OFFSET = TTL_FIELD_OFFSET + BitUtil.SIZE_OF_INT;
private static final int PAYLOAD_OFFSET = NUM_REQUESTS_FIELD_OFFSET + BitUtil.SIZE_OF_INT;

public static int computeFrameLength(final int metadataLength)
{
public static int computeFrameLength(final int metadataLength) {
int length = FrameHeaderFlyweight.computeFrameHeaderLength(FrameType.SETUP, metadataLength, 0);

return length + BitUtil.SIZE_OF_INT * 2;
}

Expand All @@ -44,8 +41,8 @@ public static int encode(
final int offset,
final int ttl,
final int numRequests,
final ByteBuffer metadata)
{
final ByteBuffer metadata
) {
final int frameLength = computeFrameLength(metadata.remaining());

int length = FrameHeaderFlyweight.encodeFrameHeader(mutableDirectBuffer, offset, frameLength, 0, FrameType.LEASE, 0);
Expand All @@ -59,18 +56,15 @@ public static int encode(
return length;
}

public static int ttl(final DirectBuffer directBuffer, final int offset)
{
public static int ttl(final DirectBuffer directBuffer, final int offset) {
return directBuffer.getInt(offset + TTL_FIELD_OFFSET, ByteOrder.BIG_ENDIAN);
}

public static int numRequests(final DirectBuffer directBuffer, final int offset)
{
public static int numRequests(final DirectBuffer directBuffer, final int offset) {
return directBuffer.getInt(offset + NUM_REQUESTS_FIELD_OFFSET, ByteOrder.BIG_ENDIAN);
}

public static int payloadOffset(final DirectBuffer directBuffer, final int offset)
{
public static int payloadOffset(final DirectBuffer directBuffer, final int offset) {
return offset + PAYLOAD_OFFSET;
}
}
Loading