int num_events;
char **events;
+ /* For clients which subscribe to the tick event: whether the first tick
+ * event has been sent by i3. */
+ bool first_tick_sent;
+
+ struct ev_io *read_callback;
+ struct ev_io *write_callback;
+ struct ev_timer *timeout;
+ uint8_t *buffer;
+ size_t buffer_size;
+
TAILQ_ENTRY(ipc_client)
clients;
} ipc_client;
* 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);
+typedef void (*handler_t)(ipc_client *, 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, \
+#define IPC_HANDLER(name) \
+ static void handle_##name(ipc_client *client, uint8_t *message, \
+ int size, uint32_t message_size, \
uint32_t message_type)
/**
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!
+ * Calls to ipc_shutdown() should provide a reason for the shutdown.
+ */
+typedef enum {
+ SHUTDOWN_REASON_RESTART,
+ SHUTDOWN_REASON_EXIT
+} shutdown_reason_t;
+
+/**
+ * Calls shutdown() on each socket and closes it.
*
*/
-void ipc_shutdown(void);
+void ipc_shutdown(shutdown_reason_t reason);
void dump_node(yajl_gen gen, Con *con, bool inplace_restart);
* For the binding events, we send the serialized binding struct.
*/
void ipc_send_binding_event(const char *event_type, Binding *bind);
+
+/**
+ * Set the maximum duration that we allow for a connection with an unwriteable
+ * socket.
+ */
+void ipc_set_kill_timeout(ev_tstamp new);