| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #ifndef HV_GRPC_DEF_H_
- #define HV_GRPC_DEF_H_
- #ifdef __cplusplus
- extern "C" {
- #endif
- // Length-Prefixed-Message
- // flags:1byte + length:4bytes = 5bytes
- #define GRPC_MESSAGE_HDLEN 5
- typedef struct {
- unsigned char flags;
- unsigned int length;
- } grpc_message_hd;
- typedef struct {
- unsigned char flags;
- unsigned int length;
- unsigned char* message;
- } grpc_message;
- static inline void grpc_message_hd_pack(const grpc_message_hd* hd, unsigned char* buf) {
- unsigned char* p = buf;
- // flags
- *p++ = hd->flags;
- // hton length
- unsigned int length = hd->length;
- *p++ = (length >> 24) & 0xFF;
- *p++ = (length >> 16) & 0xFF;
- *p++ = (length >> 8) & 0xFF;
- *p++ = length & 0xFF;
- }
- static inline void grpc_message_hd_unpack(grpc_message_hd* hd, const unsigned char* buf) {
- const unsigned char* p = buf;
- // flags
- hd->flags = *p++;
- // ntoh length
- hd->length = ((unsigned int)*p++) << 24;
- hd->length |= ((unsigned int)*p++) << 16;
- hd->length |= ((unsigned int)*p++) << 8;
- hd->length |= *p++;
- }
- // protobuf
- // tag = field_num << 3 | wire_type
- // varint(tag) [+ varint(length_delimited)] + value;
- typedef enum {
- WIRE_TYPE_VARINT = 0,
- WIRE_TYPE_FIXED64 = 1,
- WIRE_TYPE_LENGTH_DELIMITED = 2,
- WIRE_TYPE_START_GROUP = 3,
- WIRE_TYPE_END_GROUP = 4,
- WIRE_TYPE_FIXED32 = 5,
- } wire_type;
- typedef enum {
- FIELD_TYPE_DOUBLE = 1,
- FIELD_TYPE_FLOAT = 2,
- FIELD_TYPE_INT64 = 3,
- FIELD_TYPE_UINT64 = 4,
- FIELD_TYPE_INT32 = 5,
- FIELD_TYPE_FIXED64 = 6,
- FIELD_TYPE_FIXED32 = 7,
- FIELD_TYPE_BOOL = 8,
- FIELD_TYPE_STRING = 9,
- FIELD_TYPE_GROUP = 10,
- FIELD_TYPE_MESSAGE = 11,
- FIELD_TYPE_BYTES = 12,
- FIELD_TYPE_UINT32 = 13,
- FIELD_TYPE_ENUM = 14,
- FIELD_TYPE_SFIXED32 = 15,
- FIELD_TYPE_SFIXED64 = 16,
- FIELD_TYPE_SINT32 = 17,
- FIELD_TYPE_SINT64 = 18,
- MAX_FIELD_TYPE = 18,
- } field_type;
- #define PROTOBUF_MAKE_TAG(field_number, wire_type) ((field_number) << 3 | (wire_type))
- #define PROTOBUF_FILED_NUMBER(tag) ((tag) >> 3)
- #define PROTOBUF_WIRE_TYPE(tag) ((tag) & 0x07)
- #ifdef __cplusplus
- }
- #endif
- #endif // HV_GRPC_DEF_H_
|