summaryrefslogtreecommitdiff
path: root/patch/ipc/IPCClient.h
diff options
context:
space:
mode:
Diffstat (limited to 'patch/ipc/IPCClient.h')
-rw-r--r--patch/ipc/IPCClient.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/patch/ipc/IPCClient.h b/patch/ipc/IPCClient.h
new file mode 100644
index 0000000..ee93030
--- /dev/null
+++ b/patch/ipc/IPCClient.h
@@ -0,0 +1,62 @@
+#ifndef IPC_CLIENT_H_
+#define IPC_CLIENT_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/epoll.h>
+
+typedef struct IPCClient IPCClient;
+/**
+ * This structure contains the details of an IPC Client and pointers for a
+ * linked list
+ */
+struct IPCClient {
+ int fd;
+ int subscriptions;
+
+ char *buffer;
+ uint32_t buffer_size;
+
+ struct epoll_event event;
+ IPCClient *next;
+ IPCClient *prev;
+};
+
+typedef IPCClient *IPCClientList;
+
+/**
+ * Allocate memory for new IPCClient with the specified file descriptor and
+ * initialize struct.
+ *
+ * @param fd File descriptor of IPC client
+ *
+ * @return Address to allocated IPCClient struct
+ */
+IPCClient *ipc_client_new(int fd);
+
+/**
+ * Add an IPC Client to the specified list
+ *
+ * @param list Address of the list to add the client to
+ * @param nc Address of the IPCClient
+ */
+void ipc_list_add_client(IPCClientList *list, IPCClient *nc);
+
+/**
+ * Remove an IPCClient from the specified list
+ *
+ * @param list Address of the list to remove the client from
+ * @param c Address of the IPCClient
+ */
+void ipc_list_remove_client(IPCClientList *list, IPCClient *c);
+
+/**
+ * Get an IPCClient from the specified IPCClient list
+ *
+ * @param list List to remove the client from
+ * @param fd File descriptor of the IPCClient
+ */
+IPCClient *ipc_list_get_client(IPCClientList list, int fd);
+
+#endif // IPC_CLIENT_H_
+