/* rpc.h - versioned length-prefixed control protocol and command registry. */ #ifndef NAUT_RPC_H #define NAUT_RPC_H #include "naut/common.h" #include "naut/event.h" #include #define NAUT_RPC_VERSION 1 #define NAUT_RPC_MAX_PAYLOAD (1u << 20) typedef enum { NAUT_RPC_REQUEST = 1, NAUT_RPC_RESPONSE = 2, NAUT_RPC_EVENT = 3, } naut_rpc_frame_type; typedef struct naut_rpc_registry naut_rpc_registry; typedef json_t *(*naut_rpc_handler)(void *context, const json_t *params, naut_err *error); naut_rpc_registry *naut_rpc_registry_create(void); void naut_rpc_registry_destroy(naut_rpc_registry *registry); naut_err naut_rpc_register(naut_rpc_registry *registry, const char *method, naut_rpc_handler handler, void *context); void naut_rpc_unregister(naut_rpc_registry *registry, const char *method); json_t *naut_rpc_dispatch(naut_rpc_registry *registry, const char *method, const json_t *params, naut_err *error); naut_err naut_rpc_send_json(int fd, naut_rpc_frame_type type, const json_t *payload); naut_err naut_rpc_recv_json(int fd, naut_rpc_frame_type *type, json_t **payload); int naut_rpc_connect_unix(const char *socket_path); /* Connect to a UNIX socket and perform one request/response exchange. */ naut_err naut_rpc_call(const char *socket_path, const char *method, const json_t *params, json_t **response); /* Convert an event into the stable JSON event representation. */ json_t *naut_rpc_event_json(const naut_event *event); #endif /* NAUT_RPC_H */