Files
ldb/kvs_rw_tools.h
1iaan 144b374aa2 简化协议,
/**
 * Request
 * Cmd: 	| OP(1) | argc(1) | repeat { arglen(4) | arg } |
 *
 * Response
 * Rsp:		| OP(1) | status(1) | datalen(4) | data |
 */

封装客户端进行批处理和单条命令测试。
2026-01-06 19:16:12 +08:00

71 lines
1.6 KiB
C

#ifndef __KVS_RW_TOOLS_H__
#define __KVS_RW_TOOLS_H__
#include <stdint.h>
#include <stdio.h>
int kvs_need(const uint8_t *p, const uint8_t *end, size_t n);
int kvs_read_u8(const uint8_t **pp, const uint8_t *end, uint8_t *out);
int kvs_read_u16(const uint8_t **pp, const uint8_t *end, uint16_t *out);
int kvs_read_u32(const uint8_t **pp, const uint8_t *end, uint32_t *out);
int kvs_write_u8(uint8_t **pp, const uint8_t *end, uint8_t v);
int kvs_write_u16(uint8_t **pp, const uint8_t *end, uint16_t v);
int kvs_write_u32(uint8_t **pp, const uint8_t *end, uint32_t v);
/**
* Request
* Cmd: | OP(1) | argc(1) | repeat { arglen(4) | arg } |
*
* Response
* Rsp: | OP(1) | status(1) | datalen(4) | data |
*/
#define KVS_MAX_CMDS_PER_CALL 64
// 1MB
#define KVS_MAX_RESPONSE (1024u * 1024u)
#define KVS_MAX_ARGC 64
#define KVS_MAX_ARGLEN (1024u * 1024u)
#define KVS_MAX_CMD_BYTES (4u * 1024u * 1024u)
enum {
KVS_STATUS_OK = 0,
KVS_STATUS_ERROR = 1,
KVS_STATUS_NO_EXIST = 2,
KVS_STATUS_EXIST = 3,
KVS_STATUS_BADREQ = 4
};
typedef enum {
KVS_OK = 1,
KVS_NEED_MORE = 0,
KVS_ERROR = -1
}kvs_rc_t;
typedef struct kvs_arg_s{
uint32_t len;
const uint8_t *data;
} kvs_arg_t;
typedef struct kvs_req_s{
uint8_t op;
uint8_t argc;
kvs_arg_t *args;
}kvs_req_t;
typedef struct kvs_rsp_s{
uint8_t op;
uint8_t status;
uint32_t dlen;
const uint8_t *data;
} kvs_rsp_t;
int kvs_parse_one_cmd(const uint8_t *request, int request_length, kvs_req_t *req_out);
void kvs_free_request(kvs_req_t *req);
int kvs_execute_one_cmd(const kvs_req_t *req, kvs_rsp_t *rsp_out);
int kvs_build_one_rsp(const kvs_rsp_t *results, uint8_t *response, size_t response_cap);
#endif