diff options
author | Andris Zeila <andris.zeila@zabbix.com> | 2016-12-15 18:23:20 +0300 |
---|---|---|
committer | Andris Zeila <andris.zeila@zabbix.com> | 2016-12-15 18:23:20 +0300 |
commit | 1b7c3a9b1cabe4b98d467ddf45eba18342fd1d62 (patch) | |
tree | dc98dfd407685a1c4ac3bc9c61b0ec39851a1b4f /include/zbxipcservice.h | |
parent | 05dd65843617cecd7fb78dfd0f6e1d8d56435af9 (diff) |
.......PS. [ZBXNEXT-3386] added unix domain socket based IPC service
Diffstat (limited to 'include/zbxipcservice.h')
-rw-r--r-- | include/zbxipcservice.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/include/zbxipcservice.h b/include/zbxipcservice.h new file mode 100644 index 00000000000..70c5c6ececc --- /dev/null +++ b/include/zbxipcservice.h @@ -0,0 +1,69 @@ +#ifndef ZABBIX_ZBXIPCSERVICE_H +#define ZABBIX_ZBXIPCSERVICE_H + +#include "common.h" +#include "zbxalgo.h" + +#define ZBX_IPC_SOCKET_MESSAGE_SIZE 4096 + +typedef struct +{ + /* the message code */ + zbx_uint32_t code; + /* the data size */ + zbx_uint32_t size; + /* the data */ + unsigned char *data; +} +zbx_ipc_message_t; + +/* messaging socket */ +typedef struct +{ + /* socket descriptor */ + int fd; +} +zbx_ipc_socket_t; + +typedef struct zbx_ipc_client zbx_ipc_client_t; + +/* IPC service */ +typedef struct +{ + /* the listening socket descriptor */ + int fd; + + struct event_base *ev; + struct event *ev_listener; + + /* the unix socket path */ + char *path; + + /* the connected clients */ + zbx_vector_ptr_t clients; + + /* the clients with messages */ + zbx_queue_ptr_t clients_recv; + + /* the client to be removed during next recv() call */ + zbx_ipc_client_t *client_remove; +} +zbx_ipc_service_t; + +int zbx_ipc_service_init_env(const char *path, char **error); +void zbx_ipc_service_free_env(); +int zbx_ipc_service_start(zbx_ipc_service_t *service, const char *service_name, char **error); +void zbx_ipc_service_recv(zbx_ipc_service_t *service, zbx_ipc_socket_t **csocket, zbx_ipc_message_t **message); +void zbx_ipc_service_close_socket(zbx_ipc_service_t *service, zbx_ipc_socket_t *csocket); +void zbx_ipc_service_close(zbx_ipc_service_t *service); + +int zbx_ipc_socket_open(zbx_ipc_socket_t *csocket, const char *service_name, int timeout, char **error); +void zbx_ipc_socket_close(zbx_ipc_socket_t *csocket); +int zbx_ipc_socket_write(zbx_ipc_socket_t *csocket, zbx_uint32_t code, const char *data, zbx_uint32_t size); +int zbx_ipc_socket_read(zbx_ipc_socket_t *csocket, zbx_ipc_message_t *message); + +void zbx_ipc_message_free(zbx_ipc_message_t *message); +void zbx_ipc_message_clean(zbx_ipc_message_t *message); + +#endif + |