Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/zabbix/zabbix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndris Zeila <andris.zeila@zabbix.com>2016-12-15 18:23:20 +0300
committerAndris Zeila <andris.zeila@zabbix.com>2016-12-15 18:23:20 +0300
commit1b7c3a9b1cabe4b98d467ddf45eba18342fd1d62 (patch)
treedc98dfd407685a1c4ac3bc9c61b0ec39851a1b4f /include/zbxipcservice.h
parent05dd65843617cecd7fb78dfd0f6e1d8d56435af9 (diff)
.......PS. [ZBXNEXT-3386] added unix domain socket based IPC service
Diffstat (limited to 'include/zbxipcservice.h')
-rw-r--r--include/zbxipcservice.h69
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
+