<!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: include/ipc.h 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>include/ipc.h File Reference</h1><code>#include <ev.h></code><br/> <code>#include "i3/ipc.h"</code><br/> <div class="dynheader"> Include dependency graph for ipc.h:</div> <div class="dynsection"> </div> <div class="dynheader"> This graph shows which files directly or indirectly include this file:</div> <div class="dynsection"> </div> <p><a href="a00042_source.html">Go to the source code of this file.</a></p> <table border="0" cellpadding="0" cellspacing="0"> <tr><td colspan="2"><h2>Data Structures</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00017.html">ipc_client</a></td></tr> <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="a00042.html#a0d061102ea72ae69fcd76e0692ccac71">IPC_HANDLER</a>(name)</td></tr> <tr><td colspan="2"><h2>Typedefs</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="a00017.html">ipc_client</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a6c3882373e502e870d1a84af77b51b02">ipc_client</a></td></tr> <tr><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html#a6b1a00999ddde8264249521fa10d7b08">handler_t</a> )(int, uint8_t *, int, uint32_t, uint32_t)</td></tr> <tr><td colspan="2"><h2>Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.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="a00042.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 class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.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="a00042.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> </table> <hr/><h2>Define Documentation</h2> <a class="anchor" id="a0d061102ea72ae69fcd76e0692ccac71"></a><!-- doxytag: member="ipc.h::IPC_HANDLER" ref="a0d061102ea72ae69fcd76e0692ccac71" args="(name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define IPC_HANDLER</td> <td>(</td> <td class="paramtype">name </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">static</span> <span class="keywordtype">void</span> handle_ ## name (<span class="keywordtype">int</span> fd, uint8_t *message, \ <span class="keywordtype">int</span> size, uint32_t message_size, \ uint32_t message_type) </pre></div> <p>Definition at line <a class="el" href="a00042_source.html#l00042">42</a> of file <a class="el" href="a00042_source.html">ipc.h</a>.</p> </div> </div> <hr/><h2>Typedef Documentation</h2> <a class="anchor" id="a6b1a00999ddde8264249521fa10d7b08"></a><!-- doxytag: member="ipc.h::handler_t" ref="a6b1a00999ddde8264249521fa10d7b08" args=")(int, uint8_t *, int, uint32_t, uint32_t)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* <a class="el" href="a00042.html#a6b1a00999ddde8264249521fa10d7b08">handler_t</a>)(int, uint8_t *, int, uint32_t, uint32_t)</td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00042_source.html#l00039">39</a> of file <a class="el" href="a00042_source.html">ipc.h</a>.</p> </div> </div> <a class="anchor" id="a6c3882373e502e870d1a84af77b51b02"></a><!-- doxytag: member="ipc.h::ipc_client" ref="a6c3882373e502e870d1a84af77b51b02" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef struct <a class="el" href="a00017.html">ipc_client</a> <a class="el" href="a00017.html">ipc_client</a></td> </tr> </table> </div> <div class="memdoc"> </div> </div> <hr/><h2>Function Documentation</h2> <a class="anchor" id="a173c2426068f80edfacc45e1fca642d4"></a><!-- doxytag: member="ipc.h::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="ab60981ffa93c190e40d52e05f6c8a4d8"></a><!-- doxytag: member="ipc.h::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="ad525c6fad9f4978ae1f06282ad9de6c6"></a><!-- doxytag: member="ipc.h::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="ae12d3a1c83452d7fb9b9ae9ce23bb424"></a><!-- doxytag: member="ipc.h::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> </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>