<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <title>i3: src/ipc.c File Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="doxygen.css" rel="stylesheet" type="text/css"/> </head> <body> <!-- Generated by Doxygen 1.6.2-20100208 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul> </div> </div> <div class="contents"> <h1>src/ipc.c File Reference</h1><code>#include <sys/types.h></code><br/> <code>#include <sys/socket.h></code><br/> <code>#include <sys/stat.h></code><br/> <code>#include <sys/un.h></code><br/> <code>#include <fcntl.h></code><br/> <code>#include <unistd.h></code><br/> <code>#include <string.h></code><br/> <code>#include <errno.h></code><br/> <code>#include <err.h></code><br/> <code>#include <stdlib.h></code><br/> <code>#include <stdint.h></code><br/> <code>#include <stdio.h></code><br/> <code>#include <libgen.h></code><br/> <code>#include <ev.h></code><br/> <code>#include <yajl/yajl_gen.h></code><br/> <code>#include <yajl/yajl_parse.h></code><br/> <code>#include "<a class="el" href="a00047_source.html">queue.h</a>"</code><br/> <code>#include "<a class="el" href="a00042_source.html">ipc.h</a>"</code><br/> <code>#include "<a class="el" href="a00041_source.html">i3.h</a>"</code><br/> <code>#include "<a class="el" href="a00052_source.html">util.h</a>"</code><br/> <code>#include "<a class="el" href="a00033_source.html">commands.h</a>"</code><br/> <code>#include "<a class="el" href="a00044_source.html">log.h</a>"</code><br/> <code>#include "<a class="el" href="a00051_source.html">table.h</a>"</code><br/> <code>#include "<a class="el" href="a00048_source.html">randr.h</a>"</code><br/> <code>#include "<a class="el" href="a00034_source.html">config.h</a>"</code><br/> <div class="dynheader"> Include dependency graph for ipc.c:</div> <div class="dynsection"> </div> <p><a href="a00068_source.html">Go to the source code of this file.</a></p> <table border="0" cellpadding="0" cellspacing="0"> <tr><td colspan="2"><h2>Defines</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#a16e56e533e1eb98fda15e06fdec03da6">y</a>(x,...) yajl_gen_ ## x (gen, ##__VA_ARGS__)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#a9e853d0fe52033d8c444e88cf1065852">ystr</a>(str) yajl_gen_string(gen, (unsigned char*)str, strlen(str))</td></tr> <tr><td colspan="2"><h2>Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#a6c85bdb9ef63821dec47a855046b7eb5">TAILQ_HEAD</a> (ipc_client_head, <a class="el" href="a00017.html">ipc_client</a>)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#a8b513e12d82663825d208b2363e2fecf">mkdirp</a> (const char *path)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#a8fe6a5445971cf6e5b3192f40ea60b2a">ipc_send_message</a> (int fd, const unsigned char *payload, int message_type, int message_size)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#ad525c6fad9f4978ae1f06282ad9de6c6">ipc_send_event</a> (const char *event, uint32_t message_type, const char *payload)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Sends the specified event to all IPC clients which are currently connected and subscribed to this kind of event. <a href="#ad525c6fad9f4978ae1f06282ad9de6c6"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#ae12d3a1c83452d7fb9b9ae9ce23bb424">ipc_shutdown</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Calls shutdown() on each socket and closes it. <a href="#ae12d3a1c83452d7fb9b9ae9ce23bb424"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#a30c9a68044bb51d56d31685fc1343a14">IPC_HANDLER</a> (command)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#a948e9f8fbd8792ba0a9c9aeb340344a6">IPC_HANDLER</a> (get_workspaces)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#a6d037537a3696ad46474b5ba6cc6ccd9">IPC_HANDLER</a> (get_outputs)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#a7f11b4828bd231ec42d374a8e30a39e9">add_subscription</a> (void *extra, const unsigned char *s, unsigned int len)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#af5a7853e826d36c9b130d9054e7bf6fb">IPC_HANDLER</a> (subscribe)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#a81fcba6a5550d614cc8d47b46aaa00bd">ipc_receive_message</a> (EV_P_ struct ev_io *w, int revents)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#ab60981ffa93c190e40d52e05f6c8a4d8">ipc_new_client</a> (EV_P_ struct ev_io *w, int revents)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Handler for activity on the listening socket, meaning that a new client has just connected and we should accept() him. <a href="#ab60981ffa93c190e40d52e05f6c8a4d8"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#a173c2426068f80edfacc45e1fca642d4">ipc_create_socket</a> (const char *filename)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Creates the UNIX domain socket at the given path, sets it to non-blocking mode, bind()s and listen()s on it. <a href="#a173c2426068f80edfacc45e1fca642d4"></a><br/></td></tr> <tr><td colspan="2"><h2>Variables</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00042.html#a6b1a00999ddde8264249521fa10d7b08">handler_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#a68dd4f9828959ce3ad7e600890cae913">handlers</a> [4]</td></tr> </table> <hr/><h2>Define Documentation</h2> <a class="anchor" id="a16e56e533e1eb98fda15e06fdec03da6"></a><!-- doxytag: member="ipc.c::y" ref="a16e56e533e1eb98fda15e06fdec03da6" args="(x,...)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define y</td> <td>(</td> <td class="paramtype">x, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> <em>...</em> </td> <td class="paramname"></td> <td> ) </td> <td> yajl_gen_ ## x (gen, ##__VA_ARGS__)</td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00068_source.html#l00041">41</a> of file <a class="el" href="a00068_source.html">ipc.c</a>.</p> <p>Referenced by <a class="el" href="a00067_source.html#l00292">handle_configure_request()</a>, <a class="el" href="a00068_source.html#l00178">IPC_HANDLER()</a>, and <a class="el" href="a00075_source.html#l00111">open_input_window()</a>.</p> </div> </div> <a class="anchor" id="a9e853d0fe52033d8c444e88cf1065852"></a><!-- doxytag: member="ipc.c::ystr" ref="a9e853d0fe52033d8c444e88cf1065852" args="(str)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define ystr</td> <td>(</td> <td class="paramtype">str </td> <td class="paramname"></td> <td> ) </td> <td> yajl_gen_string(gen, (unsigned char*)str, strlen(str))</td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00068_source.html#l00042">42</a> of file <a class="el" href="a00068_source.html">ipc.c</a>.</p> <p>Referenced by <a class="el" href="a00068_source.html#l00178">IPC_HANDLER()</a>.</p> </div> </div> <hr/><h2>Function Documentation</h2> <a class="anchor" id="a7f11b4828bd231ec42d374a8e30a39e9"></a><!-- doxytag: member="ipc.c::add_subscription" ref="a7f11b4828bd231ec42d374a8e30a39e9" args="(void *extra, const unsigned char *s, unsigned int len)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static int add_subscription </td> <td>(</td> <td class="paramtype">void * </td> <td class="paramname"> <em>extra</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const unsigned char * </td> <td class="paramname"> <em>s</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">unsigned int </td> <td class="paramname"> <em>len</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00068_source.html#l00290">290</a> of file <a class="el" href="a00068_source.html">ipc.c</a>.</p> <p>References <a class="el" href="a00044_source.html#l00021">DLOG</a>, <a class="el" href="a00042_source.html#l00023">ipc_client::events</a>, <a class="el" href="a00042_source.html#l00022">ipc_client::num_events</a>, and <a class="el" href="a00077_source.html#l00074">scalloc()</a>.</p> <p>Referenced by <a class="el" href="a00068_source.html#l00317">IPC_HANDLER()</a>.</p> <p><div class="dynheader"> Here is the call graph for this function:</div> <div class="dynsection"> </div> </p> </div> </div> <a class="anchor" id="a173c2426068f80edfacc45e1fca642d4"></a><!-- doxytag: member="ipc.c::ipc_create_socket" ref="a173c2426068f80edfacc45e1fca642d4" args="(const char *filename)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int ipc_create_socket </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"> <em>filename</em></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Creates the UNIX domain socket at the given path, sets it to non-blocking mode, bind()s and listen()s on it. </p> <p>Definition at line <a class="el" href="a00068_source.html#l00502">502</a> of file <a class="el" href="a00068_source.html">ipc.c</a>.</p> <p>References <a class="el" href="a00044_source.html#l00021">DLOG</a>, <a class="el" href="a00062_source.html#l00044">glob_path()</a>, <a class="el" href="a00068_source.html#l00063">mkdirp()</a>, <a class="el" href="a00062_source.html#l00070">path_exists()</a>, and <a class="el" href="a00077_source.html#l00080">sstrdup()</a>.</p> <p>Referenced by <a class="el" href="a00071_source.html#l00193">main()</a>.</p> <p><div class="dynheader"> Here is the call graph for this function:</div> <div class="dynsection"> </div> </p> </div> </div> <a class="anchor" id="af5a7853e826d36c9b130d9054e7bf6fb"></a><!-- doxytag: member="ipc.c::IPC_HANDLER" ref="af5a7853e826d36c9b130d9054e7bf6fb" args="(subscribe)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">IPC_HANDLER </td> <td>(</td> <td class="paramtype">subscribe </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00068_source.html#l00317">317</a> of file <a class="el" href="a00068_source.html">ipc.c</a>.</p> <p>References <a class="el" href="a00068_source.html#l00290">add_subscription()</a>, <a class="el" href="a00044_source.html#l00020">ELOG</a>, <a class="el" href="a00042_source.html#l00019">ipc_client::fd</a>, <a class="el" href="a00068_source.html#l00087">ipc_send_message()</a>, and <a class="el" href="a00047_source.html#l00335">TAILQ_FOREACH</a>.</p> <p><div class="dynheader"> Here is the call graph for this function:</div> <div class="dynsection"> </div> </p> </div> </div> <a class="anchor" id="a6d037537a3696ad46474b5ba6cc6ccd9"></a><!-- doxytag: member="ipc.c::IPC_HANDLER" ref="a6d037537a3696ad46474b5ba6cc6ccd9" args="(get_outputs)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">IPC_HANDLER </td> <td>(</td> <td class="paramtype">get_outputs </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00068_source.html#l00241">241</a> of file <a class="el" href="a00068_source.html">ipc.c</a>.</p> <p>References <a class="el" href="a00036_source.html#l00520">xoutput::active</a>, <a class="el" href="a00036_source.html#l00528">xoutput::current_workspace</a>, <a class="el" href="a00036_source.html#l00100">Rect::height</a>, <a class="el" href="a00068_source.html#l00087">ipc_send_message()</a>, <a class="el" href="a00036_source.html#l00516">xoutput::name</a>, <a class="el" href="a00036_source.html#l00184">Workspace::num</a>, <a class="el" href="a00073_source.html#l00047">outputs</a>, <a class="el" href="a00036_source.html#l00531">xoutput::rect</a>, <a class="el" href="a00047_source.html#l00335">TAILQ_FOREACH</a>, <a class="el" href="a00036_source.html#l00099">Rect::width</a>, <a class="el" href="a00036_source.html#l00097">Rect::x</a>, <a class="el" href="a00036_source.html#l00098">Rect::y</a>, <a class="el" href="a00068_source.html#l00041">y</a>, and <a class="el" href="a00068_source.html#l00042">ystr</a>.</p> <p><div class="dynheader"> Here is the call graph for this function:</div> <div class="dynsection"> </div> </p> </div> </div> <a class="anchor" id="a948e9f8fbd8792ba0a9c9aeb340344a6"></a><!-- doxytag: member="ipc.c::IPC_HANDLER" ref="a948e9f8fbd8792ba0a9c9aeb340344a6" args="(get_workspaces)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">IPC_HANDLER </td> <td>(</td> <td class="paramtype">get_workspaces </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00068_source.html#l00178">178</a> of file <a class="el" href="a00068_source.html">ipc.c</a>.</p> <p>References <a class="el" href="a00076_source.html#l00036">c_ws</a>, <a class="el" href="a00036_source.html#l00528">xoutput::current_workspace</a>, <a class="el" href="a00036_source.html#l00100">Rect::height</a>, <a class="el" href="a00068_source.html#l00087">ipc_send_message()</a>, <a class="el" href="a00036_source.html#l00516">xoutput::name</a>, <a class="el" href="a00036_source.html#l00184">Workspace::num</a>, <a class="el" href="a00036_source.html#l00239">Workspace::output</a>, <a class="el" href="a00036_source.html#l00199">Workspace::rect</a>, <a class="el" href="a00047_source.html#l00111">SLIST_END</a>, <a class="el" href="a00047_source.html#l00110">SLIST_FIRST</a>, <a class="el" href="a00047_source.html#l00335">TAILQ_FOREACH</a>, <a class="el" href="a00036_source.html#l00222">Workspace::urgent</a>, <a class="el" href="a00036_source.html#l00187">Workspace::utf8_name</a>, <a class="el" href="a00036_source.html#l00099">Rect::width</a>, <a class="el" href="a00076_source.html#l00034">workspaces</a>, <a class="el" href="a00036_source.html#l00097">Rect::x</a>, <a class="el" href="a00036_source.html#l00098">Rect::y</a>, <a class="el" href="a00068_source.html#l00041">y</a>, and <a class="el" href="a00068_source.html#l00042">ystr</a>.</p> <p><div class="dynheader"> Here is the call graph for this function:</div> <div class="dynsection"> </div> </p> </div> </div> <a class="anchor" id="a30c9a68044bb51d56d31685fc1343a14"></a><!-- doxytag: member="ipc.c::IPC_HANDLER" ref="a30c9a68044bb51d56d31685fc1343a14" args="(command)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">IPC_HANDLER </td> <td>(</td> <td class="paramtype">command </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00068_source.html#l00158">158</a> of file <a class="el" href="a00068_source.html">ipc.c</a>.</p> <p>References <a class="el" href="a00071_source.html#l00058">global_conn</a>, <a class="el" href="a00068_source.html#l00087">ipc_send_message()</a>, <a class="el" href="a00061_source.html#l00950">parse_command()</a>, and <a class="el" href="a00077_source.html#l00074">scalloc()</a>.</p> <p><div class="dynheader"> Here is the call graph for this function:</div> <div class="dynsection"> </div> </p> </div> </div> <a class="anchor" id="ab60981ffa93c190e40d52e05f6c8a4d8"></a><!-- doxytag: member="ipc.c::ipc_new_client" ref="ab60981ffa93c190e40d52e05f6c8a4d8" args="(EV_P_ struct ev_io *w, int revents)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void ipc_new_client </td> <td>(</td> <td class="paramtype">EV_P_ struct ev_io * </td> <td class="paramname"> <em>w</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>revents</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Handler for activity on the listening socket, meaning that a new client has just connected and we should accept() him. </p> <p>Sets up the event handler for activity on the new connection and inserts the file descriptor into the list of clients. </p> <p>Definition at line <a class="el" href="a00068_source.html#l00472">472</a> of file <a class="el" href="a00068_source.html">ipc.c</a>.</p> <p>References <a class="el" href="a00044_source.html#l00021">DLOG</a>, <a class="el" href="a00068_source.html#l00381">ipc_receive_message()</a>, <a class="el" href="a00077_source.html#l00074">scalloc()</a>, and <a class="el" href="a00047_source.html#l00363">TAILQ_INSERT_TAIL</a>.</p> <p>Referenced by <a class="el" href="a00071_source.html#l00193">main()</a>.</p> <p><div class="dynheader"> Here is the call graph for this function:</div> <div class="dynsection"> </div> </p> </div> </div> <a class="anchor" id="a81fcba6a5550d614cc8d47b46aaa00bd"></a><!-- doxytag: member="ipc.c::ipc_receive_message" ref="a81fcba6a5550d614cc8d47b46aaa00bd" args="(EV_P_ struct ev_io *w, int revents)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static void ipc_receive_message </td> <td>(</td> <td class="paramtype">EV_P_ struct ev_io * </td> <td class="paramname"> <em>w</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>revents</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00068_source.html#l00381">381</a> of file <a class="el" href="a00068_source.html">ipc.c</a>.</p> <p>References <a class="el" href="a00044_source.html#l00021">DLOG</a>, <a class="el" href="a00042_source.html#l00023">ipc_client::events</a>, <a class="el" href="a00042_source.html#l00019">ipc_client::fd</a>, <a class="el" href="a00068_source.html#l00364">handlers</a>, <a class="el" href="a00042_source.html#l00022">ipc_client::num_events</a>, <a class="el" href="a00047_source.html#l00335">TAILQ_FOREACH</a>, and <a class="el" href="a00047_source.html#l00387">TAILQ_REMOVE</a>.</p> <p>Referenced by <a class="el" href="a00068_source.html#l00472">ipc_new_client()</a>.</p> </div> </div> <a class="anchor" id="ad525c6fad9f4978ae1f06282ad9de6c6"></a><!-- doxytag: member="ipc.c::ipc_send_event" ref="ad525c6fad9f4978ae1f06282ad9de6c6" args="(const char *event, uint32_t message_type, const char *payload)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void ipc_send_event </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"> <em>event</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t </td> <td class="paramname"> <em>message_type</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"> <em>payload</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Sends the specified event to all IPC clients which are currently connected and subscribed to this kind of event. </p> <p>Definition at line <a class="el" href="a00068_source.html#l00121">121</a> of file <a class="el" href="a00068_source.html">ipc.c</a>.</p> <p>References <a class="el" href="a00042_source.html#l00023">ipc_client::events</a>, <a class="el" href="a00042_source.html#l00019">ipc_client::fd</a>, <a class="el" href="a00068_source.html#l00087">ipc_send_message()</a>, <a class="el" href="a00042_source.html#l00022">ipc_client::num_events</a>, and <a class="el" href="a00047_source.html#l00335">TAILQ_FOREACH</a>.</p> <p>Referenced by <a class="el" href="a00067_source.html#l00444">handle_screen_change()</a>, <a class="el" href="a00067_source.html#l00460">handle_unmap_notify_event()</a>, <a class="el" href="a00073_source.html#l00166">initialize_output()</a>, <a class="el" href="a00061_source.html#l00950">parse_command()</a>, <a class="el" href="a00078_source.html#l00223">workspace_assign_to()</a>, <a class="el" href="a00078_source.html#l00039">workspace_get()</a>, <a class="el" href="a00078_source.html#l00113">workspace_show()</a>, and <a class="el" href="a00078_source.html#l00431">workspace_update_urgent_flag()</a>.</p> <p><div class="dynheader"> Here is the call graph for this function:</div> <div class="dynsection"> </div> </p> </div> </div> <a class="anchor" id="a8fe6a5445971cf6e5b3192f40ea60b2a"></a><!-- doxytag: member="ipc.c::ipc_send_message" ref="a8fe6a5445971cf6e5b3192f40ea60b2a" args="(int fd, const unsigned char *payload, int message_type, int message_size)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static void ipc_send_message </td> <td>(</td> <td class="paramtype">int </td> <td class="paramname"> <em>fd</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const unsigned char * </td> <td class="paramname"> <em>payload</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>message_type</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>message_size</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00068_source.html#l00087">87</a> of file <a class="el" href="a00068_source.html">ipc.c</a>.</p> <p>References <a class="el" href="a00044_source.html#l00021">DLOG</a>.</p> <p>Referenced by <a class="el" href="a00068_source.html#l00158">IPC_HANDLER()</a>, and <a class="el" href="a00068_source.html#l00121">ipc_send_event()</a>.</p> </div> </div> <a class="anchor" id="ae12d3a1c83452d7fb9b9ae9ce23bb424"></a><!-- doxytag: member="ipc.c::ipc_shutdown" ref="ae12d3a1c83452d7fb9b9ae9ce23bb424" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void ipc_shutdown </td> <td>(</td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Calls shutdown() on each socket and closes it. </p> <p>This function to be called when exiting or restarting only! </p> <p>Definition at line <a class="el" href="a00068_source.html#l00145">145</a> of file <a class="el" href="a00068_source.html">ipc.c</a>.</p> <p>References <a class="el" href="a00042_source.html#l00019">ipc_client::fd</a>, and <a class="el" href="a00047_source.html#l00335">TAILQ_FOREACH</a>.</p> <p>Referenced by <a class="el" href="a00077_source.html#l00514">i3_restart()</a>, and <a class="el" href="a00061_source.html#l00950">parse_command()</a>.</p> </div> </div> <a class="anchor" id="a8b513e12d82663825d208b2363e2fecf"></a><!-- doxytag: member="ipc.c::mkdirp" ref="a8b513e12d82663825d208b2363e2fecf" args="(const char *path)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static bool mkdirp </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"> <em>path</em></td> <td> ) </td> <td><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00068_source.html#l00063">63</a> of file <a class="el" href="a00068_source.html">ipc.c</a>.</p> <p>References <a class="el" href="a00044_source.html#l00020">ELOG</a>.</p> <p>Referenced by <a class="el" href="a00068_source.html#l00502">ipc_create_socket()</a>.</p> </div> </div> <a class="anchor" id="a6c85bdb9ef63821dec47a855046b7eb5"></a><!-- doxytag: member="ipc.c::TAILQ_HEAD" ref="a6c85bdb9ef63821dec47a855046b7eb5" args="(ipc_client_head, ipc_client)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">TAILQ_HEAD </td> <td>(</td> <td class="paramtype">ipc_client_head </td> <td class="paramname">, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="a00017.html">ipc_client</a> </td> <td class="paramname"></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00068_source.html#l00044">44</a> of file <a class="el" href="a00068_source.html">ipc.c</a>.</p> </div> </div> <hr/><h2>Variable Documentation</h2> <a class="anchor" id="a68dd4f9828959ce3ad7e600890cae913"></a><!-- doxytag: member="ipc.c::handlers" ref="a68dd4f9828959ce3ad7e600890cae913" args="[4]" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="a00042.html#a6b1a00999ddde8264249521fa10d7b08">handler_t</a> <a class="el" href="a00068.html#a68dd4f9828959ce3ad7e600890cae913">handlers</a>[4]</td> </tr> </table> </div> <div class="memdoc"> <b>Initial value:</b><div class="fragment"><pre class="fragment"> { handle_command, handle_get_workspaces, handle_subscribe, handle_get_outputs } </pre></div> <p>Definition at line <a class="el" href="a00068_source.html#l00364">364</a> of file <a class="el" href="a00068_source.html">ipc.c</a>.</p> <p>Referenced by <a class="el" href="a00068_source.html#l00381">ipc_receive_message()</a>.</p> </div> </div> </div> <hr class="footer"/><address style="text-align: right;"><small>Generated by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2-20100208 </small></address> </body> </html>