i3
Defines | Functions | Variables
src/ipc.c File Reference
#include "all.h"
#include <sys/socket.h>
#include <sys/un.h>
#include <fcntl.h>
#include <libgen.h>
#include <ev.h>
#include <yajl/yajl_gen.h>
#include <yajl/yajl_parse.h>
#include <yajl/yajl_version.h>
Include dependency graph for ipc.c:

Go to the source code of this file.

Defines

#define y(x,...)   yajl_gen_ ## x (gen, ##__VA_ARGS__)
#define ystr(str)   yajl_gen_string(gen, (unsigned char*)str, strlen(str))
#define YSTR_IF_SET(name)
#define YSTR_IF_SET(name)

Functions

 TAILQ_HEAD (ipc_client_head, ipc_client)
static bool mkdirp (const char *path)
void ipc_send_event (const char *event, uint32_t message_type, const char *payload)
 Sends the specified event to all IPC clients which are currently connected and subscribed to this kind of event.
void ipc_shutdown (void)
 Calls shutdown() on each socket and closes it.
 IPC_HANDLER (command)
static void dump_rect (yajl_gen gen, const char *name, Rect r)
void dump_node (yajl_gen gen, struct Con *con, bool inplace_restart)
 IPC_HANDLER (tree)
 IPC_HANDLER (get_workspaces)
 IPC_HANDLER (get_outputs)
 IPC_HANDLER (get_marks)
 IPC_HANDLER (get_bar_config)
static int add_subscription (void *extra, const unsigned char *s, unsigned int len)
 IPC_HANDLER (subscribe)
static void ipc_receive_message (EV_P_ struct ev_io *w, int revents)
void ipc_new_client (EV_P_ struct ev_io *w, int revents)
 Handler for activity on the listening socket, meaning that a new client has just connected and we should accept() him.
int ipc_create_socket (const char *filename)
 Creates the UNIX domain socket at the given path, sets it to non-blocking mode, bind()s and listen()s on it.

Variables

char * current_socketpath = NULL
handler_t handlers [7]

Define Documentation

#define y (   x,
  ... 
)    yajl_gen_ ## x (gen, ##__VA_ARGS__)

Definition at line 24 of file ipc.c.

Referenced by dump_node(), dump_rect(), IPC_HANDLER(), and store_restart_layout().

#define ystr (   str)    yajl_gen_string(gen, (unsigned char*)str, strlen(str))

Definition at line 25 of file ipc.c.

Referenced by dump_node(), dump_rect(), and IPC_HANDLER().

#define YSTR_IF_SET (   name)
Value:
do { \
            if (config->name) { \
                ystr( # name); \
                ystr(config->name); \
            } \
        } while (0)

Referenced by IPC_HANDLER().

#define YSTR_IF_SET (   name)
Value:
do { \
            if (config->colors.name) { \
                ystr( # name); \
                ystr(config->colors.name); \
            } \
        } while (0)

Function Documentation

static int add_subscription ( void *  extra,
const unsigned char *  s,
unsigned int  len 
) [static]

Definition at line 692 of file ipc.c.

References DLOG, ipc_client::events, ipc_client::num_events, and scalloc().

Referenced by IPC_HANDLER().

Here is the call graph for this function:

void dump_node ( yajl_gen  gen,
struct Con con,
bool  inplace_restart 
)

Definition at line 150 of file ipc.c.

References BS_1PIXEL, BS_NONE, BS_NORMAL, Match::dock, dump_node(), dump_rect(), focused, HORIZ, Match::insert_where, NO_ORIENTATION, TAILQ_FOREACH, VERT, y, and ystr.

Referenced by dump_node(), IPC_HANDLER(), and store_restart_layout().

Here is the call graph for this function:

static void dump_rect ( yajl_gen  gen,
const char *  name,
Rect  r 
) [static]

Definition at line 136 of file ipc.c.

References Rect::height, Rect::width, Rect::x, Rect::y, y, and ystr.

Referenced by dump_node().

int ipc_create_socket ( const char *  filename)

Creates the UNIX domain socket at the given path, sets it to non-blocking mode, bind()s and listen()s on it.

Definition at line 920 of file ipc.c.

References current_socketpath, DLOG, FREE, mkdirp(), path_exists(), resolve_tilde(), and sstrdup().

Referenced by main().

Here is the call graph for this function:

IPC_HANDLER ( subscribe  )

Definition at line 723 of file ipc.c.

References add_subscription(), ELOG, ipc_client::fd, ipc_send_message(), and TAILQ_FOREACH.

Here is the call graph for this function:

IPC_HANDLER ( tree  )

Definition at line 326 of file ipc.c.

References croot, dump_node(), ipc_send_message(), and y.

Here is the call graph for this function:

IPC_HANDLER ( get_workspaces  )
IPC_HANDLER ( get_outputs  )
IPC_HANDLER ( get_marks  )

Definition at line 489 of file ipc.c.

References all_cons, ipc_send_message(), Con::mark, TAILQ_FOREACH, y, and ystr.

Here is the call graph for this function:

IPC_HANDLER ( get_bar_config  )
IPC_HANDLER ( command  )

Definition at line 116 of file ipc.c.

References command_output, ipc_send_message(), CommandResult::json_output, LOG, CommandResult::needs_tree_render, parse_command(), scalloc(), and tree_render().

Here is the call graph for this function:

void ipc_new_client ( EV_P_ struct ev_io *  w,
int  revents 
)

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 for activity on the new connection and inserts the file descriptor into the list of clients.

Definition at line 887 of file ipc.c.

References DLOG, ipc_receive_message(), scalloc(), and TAILQ_INSERT_TAIL.

Referenced by main().

Here is the call graph for this function:

static void ipc_receive_message ( EV_P_ struct ev_io *  w,
int  revents 
) [static]

Definition at line 792 of file ipc.c.

References DLOG, ipc_client::events, ipc_client::fd, ipc_client::num_events, TAILQ_FOREACH, and TAILQ_REMOVE.

Referenced by ipc_new_client().

void ipc_send_event ( const char *  event,
uint32_t  message_type,
const char *  payload 
)

Sends the specified event to all IPC clients which are currently connected and subscribed to this kind of event.

Definition at line 77 of file ipc.c.

References ipc_client::events, ipc_client::fd, ipc_send_message(), ipc_client::num_events, and TAILQ_FOREACH.

Referenced by _workspace_show(), cmd_move_workspace_to_output(), cmd_reload(), cmd_rename_workspace(), con_on_remove_child(), handle_screen_change(), workspace_get(), and workspace_update_urgent_flag().

Here is the call graph for this function:

void ipc_shutdown ( void  )

Calls shutdown() on each socket and closes it.

This function to be called when exiting or restarting only!

Definition at line 100 of file ipc.c.

References ipc_client::fd, TAILQ_EMPTY, TAILQ_FIRST, and TAILQ_REMOVE.

Referenced by i3_restart().

static bool mkdirp ( const char *  path) [static]

Definition at line 46 of file ipc.c.

References ELOG, and FREE.

Referenced by ipc_create_socket().

TAILQ_HEAD ( ipc_client_head  ,
ipc_client   
)

Definition at line 27 of file ipc.c.


Variable Documentation

char* current_socketpath = NULL

Definition at line 21 of file ipc.c.

Referenced by ipc_create_socket(), main(), and x_set_i3_atoms().

Initial value:
 {
    handle_command,
    handle_get_workspaces,
    handle_subscribe,
    handle_get_outputs,
    handle_tree,
    handle_get_marks,
    handle_get_bar_config,
}

Definition at line 772 of file ipc.c.