Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > c67c6057ffd14254a26624517a2352e6 > files > 475

i3-doc-3.e-3.bf1.fc14.noarch.rpm

<!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&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;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&nbsp;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 &lt;sys/types.h&gt;</code><br/>
<code>#include &lt;sys/socket.h&gt;</code><br/>
<code>#include &lt;sys/stat.h&gt;</code><br/>
<code>#include &lt;sys/un.h&gt;</code><br/>
<code>#include &lt;fcntl.h&gt;</code><br/>
<code>#include &lt;unistd.h&gt;</code><br/>
<code>#include &lt;string.h&gt;</code><br/>
<code>#include &lt;errno.h&gt;</code><br/>
<code>#include &lt;err.h&gt;</code><br/>
<code>#include &lt;stdlib.h&gt;</code><br/>
<code>#include &lt;stdint.h&gt;</code><br/>
<code>#include &lt;stdio.h&gt;</code><br/>
<code>#include &lt;libgen.h&gt;</code><br/>
<code>#include &lt;ev.h&gt;</code><br/>
<code>#include &lt;yajl/yajl_gen.h&gt;</code><br/>
<code>#include &lt;yajl/yajl_parse.h&gt;</code><br/>
<code>#include &quot;<a class="el" href="a00047_source.html">queue.h</a>&quot;</code><br/>
<code>#include &quot;<a class="el" href="a00042_source.html">ipc.h</a>&quot;</code><br/>
<code>#include &quot;<a class="el" href="a00041_source.html">i3.h</a>&quot;</code><br/>
<code>#include &quot;<a class="el" href="a00052_source.html">util.h</a>&quot;</code><br/>
<code>#include &quot;<a class="el" href="a00033_source.html">commands.h</a>&quot;</code><br/>
<code>#include &quot;<a class="el" href="a00044_source.html">log.h</a>&quot;</code><br/>
<code>#include &quot;<a class="el" href="a00051_source.html">table.h</a>&quot;</code><br/>
<code>#include &quot;<a class="el" href="a00048_source.html">randr.h</a>&quot;</code><br/>
<code>#include &quot;<a class="el" href="a00034_source.html">config.h</a>&quot;</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&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#a16e56e533e1eb98fda15e06fdec03da6">y</a>(x,...)&nbsp;&nbsp;&nbsp;yajl_gen_ ## x (gen, ##__VA_ARGS__)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#a9e853d0fe52033d8c444e88cf1065852">ystr</a>(str)&nbsp;&nbsp;&nbsp;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">&nbsp;</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&nbsp;</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&nbsp;</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&nbsp;</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">&nbsp;</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&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html#ae12d3a1c83452d7fb9b9ae9ce23bb424">ipc_shutdown</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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&nbsp;</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">&nbsp;</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&nbsp;</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&nbsp;</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">&nbsp;</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&nbsp;</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">&nbsp;</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>&nbsp;</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>&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td>&nbsp;&nbsp;&nbsp;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&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td>&nbsp;&nbsp;&nbsp;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 *&nbsp;</td>
          <td class="paramname"> <em>extra</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char *&nbsp;</td>
          <td class="paramname"> <em>s</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int&nbsp;</td>
          <td class="paramname"> <em>len</em></td><td>&nbsp;</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 *&nbsp;</td>
          <td class="paramname"> <em>filename</em></td>
          <td>&nbsp;)&nbsp;</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&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</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&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</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&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</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&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</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 *&nbsp;</td>
          <td class="paramname"> <em>w</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>revents</em></td><td>&nbsp;</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 *&nbsp;</td>
          <td class="paramname"> <em>w</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>revents</em></td><td>&nbsp;</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 *&nbsp;</td>
          <td class="paramname"> <em>event</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>message_type</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>payload</em></td><td>&nbsp;</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&nbsp;</td>
          <td class="paramname"> <em>fd</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned char *&nbsp;</td>
          <td class="paramname"> <em>payload</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>message_type</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>message_size</em></td><td>&nbsp;</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>&nbsp;)&nbsp;</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 *&nbsp;</td>
          <td class="paramname"> <em>path</em></td>
          <td>&nbsp;)&nbsp;</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&nbsp;</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>&nbsp;</td>
          <td class="paramname"></td><td>&nbsp;</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&nbsp;
<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>