blob: 33e19df6702c99578f26e378bd6a8d1884f82581 [file] [log] [blame]
package com.google.net.stubby;
/**
* Common constants and utilities for GRPC protocol framing.
* The format within the data stream provided by the transport layer is simply
*
* stream = frame+
* frame = frame-type framed-message
* frame-type = payload-type | context-type | status-type
* framed-message = payload | context | status
* payload = length <bytes>
* length = <uint32>
* context = context-key context-value
* context-key = length str
* context-value = length <bytes>
* status = TBD
*
* frame-type is implemented as a bitmask within a single byte
*
*/
public class GrpcFramingUtil {
/**
* Length of flags block in bytes
*/
public static final int FRAME_TYPE_LENGTH = 1;
// Flags
public static final byte PAYLOAD_FRAME = 0x0;
public static final byte CONTEXT_VALUE_FRAME = 0x1;
public static final byte CALL_HEADER_FRAME = 0x2;
public static final byte STATUS_FRAME = 0x3;
public static final byte FRAME_TYPE_MASK = 0x3;
/**
* No. of bytes for length field within a frame
*/
public static final int FRAME_LENGTH = 4;
public static boolean isContextValueFrame(int flags) {
return (flags & FRAME_TYPE_MASK) == CONTEXT_VALUE_FRAME;
}
public static boolean isPayloadFrame(byte flags) {
return (flags & FRAME_TYPE_MASK) == PAYLOAD_FRAME;
}
public static boolean isStatusFrame(byte flags) {
return (flags & FRAME_TYPE_MASK) == STATUS_FRAME;
}
}