X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fipc.h;h=ef50ba8630da305dd977d7d2a7482d313bdae7da;hb=6241419c86602a999a4766c24edb7b884395e433;hp=de4e22642274535c657fd9b63aeb4b6d5b987f30;hpb=ec0113f631e9603b26486af506ca6797d2e732b4;p=i3%2Fi3 diff --git a/include/ipc.h b/include/ipc.h index de4e2264..ef50ba86 100644 --- a/include/ipc.h +++ b/include/ipc.h @@ -1,21 +1,55 @@ /* - * vim:ts=8:expandtab + * vim:ts=4:sw=4:expandtab * * i3 - an improved dynamic tiling window manager + * © 2009-2011 Michael Stapelberg and contributors (see also: LICENSE) * - * © 2009 Michael Stapelberg and contributors - * - * See file LICENSE for license information. + * ipc.c: UNIX domain socket IPC (initialization, client handling, protocol). * */ - -#ifndef _IPC_H -#define _IPC_H +#ifndef I3_IPC_H +#define I3_IPC_H #include +#include +#include +#include + +#include "data.h" +#include "tree.h" #include "i3/ipc.h" +extern char *current_socketpath; + +typedef struct ipc_client { + int fd; + + /* The events which this client wants to receive */ + int num_events; + char **events; + + TAILQ_ENTRY(ipc_client) clients; +} ipc_client; + +/* + * Callback type for the different message types. + * + * message is the raw packet, as received from the UNIX domain socket. size + * is the remaining size of bytes for this packet. + * + * message_size is the size of the message as the sender specified it. + * message_type is the type of the message as the sender specified it. + * + */ +typedef void(*handler_t)(int, uint8_t*, int, uint32_t, uint32_t); + +/* Macro to declare a callback */ +#define IPC_HANDLER(name) \ + static void handle_ ## name (int fd, uint8_t *message, \ + int size, uint32_t message_size, \ + uint32_t message_type) + /** * Handler for activity on the listening socket, meaning that a new client * has just connected and we should accept() him. Sets up the event handler @@ -32,4 +66,20 @@ void ipc_new_client(EV_P_ struct ev_io *w, int revents); */ int ipc_create_socket(const char *filename); +/** + * Sends the specified event to all IPC clients which are currently connected + * and subscribed to this kind of event. + * + */ +void ipc_send_event(const char *event, uint32_t message_type, const char *payload); + +/** + * Calls shutdown() on each socket and closes it. This function to be called + * when exiting or restarting only! + * + */ +void ipc_shutdown(void); + +void dump_node(yajl_gen gen, Con *con, bool inplace_restart); + #endif