Current File : //usr/share/doc/dbus/api/group__DBusObjectTree.html
<!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"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>D-Bus: A hierarchy of objects with container-contained relationship</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />



</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">D-Bus
   &#160;<span id="projectnumber">1.8.20</span>
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.6.1 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Defines</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">A hierarchy of objects with container-contained relationship</div>  </div>
<div class="ingroups"><a class="el" href="group__DBusInternals.html">D-Bus secret internal implementation details</a></div></div><!--header-->
<div class="contents">

<p><a class="el" href="structDBusObjectTree.html" title="Internals of DBusObjectTree.">DBusObjectTree</a> is used by <a class="el" href="structDBusConnection.html" title="Implementation details of DBusConnection.">DBusConnection</a> to track the object tree.  
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDBusObjectTree.html">DBusObjectTree</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Internals of <a class="el" href="structDBusObjectTree.html" title="Internals of DBusObjectTree.">DBusObjectTree</a>.  <a href="structDBusObjectTree.html#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDBusObjectSubtree.html">DBusObjectSubtree</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Struct representing a single registered subtree handler, or node that's a parent of a registered subtree handler.  <a href="structDBusObjectSubtree.html#details">More...</a><br/></td></tr>
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7c65e59e0445cd294f82a4fb42e44772"></a><!-- doxytag: member="DBusObjectTree::VERBOSE_FIND" ref="ga7c65e59e0445cd294f82a4fb42e44772" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__DBusObjectTree.html#ga7c65e59e0445cd294f82a4fb42e44772">VERBOSE_FIND</a>&#160;&#160;&#160;0</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Set to 1 to get a bunch of debug spew about finding the subtree nodes. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9def2cd95c325a4ad26222cddbfed5d5"></a><!-- doxytag: member="DBusObjectTree::VERBOSE_DECOMPOSE" ref="ga9def2cd95c325a4ad26222cddbfed5d5" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__DBusObjectTree.html#ga9def2cd95c325a4ad26222cddbfed5d5">VERBOSE_DECOMPOSE</a>&#160;&#160;&#160;0</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Set to 1 to get a bunch of spew about disassembling the path string. <br/></td></tr>
<tr><td colspan="2"><h2><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga797595db73034eabb225d933f859fc48"></a><!-- doxytag: member="DBusObjectTree::DBusObjectSubtree" ref="ga797595db73034eabb225d933f859fc48" args="" -->
typedef struct <a class="el" href="structDBusObjectSubtree.html">DBusObjectSubtree</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__DBusObjectTree.html#ga797595db73034eabb225d933f859fc48">DBusObjectSubtree</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Subnode of the object hierarchy. <br/></td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__DBusObjectTree.html#ga5920f14b487122f13a3d439952d5ed2e">_dbus_object_tree_new</a> (<a class="el" href="structDBusConnection.html">DBusConnection</a> *connection)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new object tree, representing a mapping from paths to handler vtables.  <a href="#ga5920f14b487122f13a3d439952d5ed2e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__DBusObjectTree.html#ga144a3920922e8badf1018ce22b27d9c4">_dbus_object_tree_ref</a> (<a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *tree)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Increment the reference count.  <a href="#ga144a3920922e8badf1018ce22b27d9c4"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__DBusObjectTree.html#ga7639e273ab160c422a7cef0cda60ded5">_dbus_object_tree_unref</a> (<a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *tree)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Decrement the reference count.  <a href="#ga7639e273ab160c422a7cef0cda60ded5"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__DBusObjectTree.html#gab3da15ee1a73d3b26008d1bce20a78a0">_dbus_object_tree_register</a> (<a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *tree, <a class="el" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> fallback, const char **path, const <a class="el" href="structDBusObjectPathVTable.html">DBusObjectPathVTable</a> *vtable, void *user_data, <a class="el" href="structDBusError.html">DBusError</a> *error)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Registers a new subtree in the global object tree.  <a href="#gab3da15ee1a73d3b26008d1bce20a78a0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__DBusObjectTree.html#ga3babe73ed342b6963997ef2efd73ef75">_dbus_object_tree_unregister_and_unlock</a> (<a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *tree, const char **path)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Unregisters an object subtree that was registered with the same path.  <a href="#ga3babe73ed342b6963997ef2efd73ef75"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__DBusObjectTree.html#ga1c51e43233ce0f3855c128f2555317eb">_dbus_object_tree_free_all_unlocked</a> (<a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *tree)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Free all the handlers in the tree.  <a href="#ga1c51e43233ce0f3855c128f2555317eb"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__DBusShared.html#ga8244b29230187624c24986c24edab1de">DBusHandlerResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__DBusObjectTree.html#gad660d78a12fa207d891838863dfc6ba7">_dbus_object_tree_dispatch_and_unlock</a> (<a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *tree, <a class="el" href="structDBusMessage.html">DBusMessage</a> *message, <a class="el" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> *found_object)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Tries to dispatch a message by directing it to handler for the object path listed in the message header, if any.  <a href="#gad660d78a12fa207d891838863dfc6ba7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__DBusObjectTree.html#ga4cf5a5f35d2bd18b6fa8aa58ba6b5de4">_dbus_object_tree_get_user_data_unlocked</a> (<a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *tree, const char **path)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Looks up the data passed to <a class="el" href="group__DBusObjectTree.html#gab3da15ee1a73d3b26008d1bce20a78a0" title="Registers a new subtree in the global object tree.">_dbus_object_tree_register()</a> for a handler at the given path.  <a href="#ga4cf5a5f35d2bd18b6fa8aa58ba6b5de4"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__DBusObjectTree.html#gaab7040bd1bf037d99e9bbb75d0869a2f">_dbus_object_tree_list_registered_and_unlock</a> (<a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *tree, const char **parent_path, char ***child_entries)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Lists the registered fallback handlers and object path handlers at the given parent_path.  <a href="#gaab7040bd1bf037d99e9bbb75d0869a2f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__DBusObjectTree.html#gab282b916368cd512842d3aaae31e65c7">_dbus_decompose_path</a> (const char *data, int len, char ***path, int *path_len)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Decompose an object path.  <a href="#gab282b916368cd512842d3aaae31e65c7"></a><br/></td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<p><a class="el" href="structDBusObjectTree.html" title="Internals of DBusObjectTree.">DBusObjectTree</a> is used by <a class="el" href="structDBusConnection.html" title="Implementation details of DBusConnection.">DBusConnection</a> to track the object tree. </p>
<p>Types and functions related to <a class="el" href="structDBusObjectTree.html" title="Internals of DBusObjectTree.">DBusObjectTree</a>. These are all library-internal. </p>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="gab282b916368cd512842d3aaae31e65c7"></a><!-- doxytag: member="dbus&#45;object&#45;tree.c::_dbus_decompose_path" ref="gab282b916368cd512842d3aaae31e65c7" args="(const char *data, int len, char ***path, int *path_len)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> <a class="el" href="group__DBusObjectTree.html#gab282b916368cd512842d3aaae31e65c7">_dbus_decompose_path</a> </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char ***&#160;</td>
          <td class="paramname"><em>path</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&#160;</td>
          <td class="paramname"><em>path_len</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Decompose an object path. </p>
<p>A path of just "/" is represented as an empty vector of strings. The path need not be nul terminated.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">data</td><td>the path data </td></tr>
    <tr><td class="paramname">len</td><td>the length of the path string </td></tr>
    <tr><td class="paramname">path</td><td>address to store new object path </td></tr>
    <tr><td class="paramname">path_len</td><td>length of stored path </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="dbus-object-tree_8c_source.html#l01242">1242</a> of file <a class="el" href="dbus-object-tree_8c_source.html">dbus-object-tree.c</a>.</p>

<p>References <a class="el" href="dbus-internals_8c_source.html#l00555">_dbus_memdup()</a>, <a class="el" href="dbus-memory_8c_source.html#l00749">dbus_free_string_array()</a>, <a class="el" href="dbus-memory_8h_source.html#l00059">dbus_new0</a>, <a class="el" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1">FALSE</a>, <a class="el" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, and <a class="el" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>.</p>

<p>Referenced by <a class="el" href="dbus-connection_8c_source.html#l05841">dbus_connection_get_object_path_data()</a>, <a class="el" href="dbus-connection_8c_source.html#l05878">dbus_connection_list_registered()</a>, <a class="el" href="dbus-connection_8c_source.html#l05809">dbus_connection_unregister_object_path()</a>, and <a class="el" href="dbus-message_8c_source.html#l03164">dbus_message_get_path_decomposed()</a>.</p>

</div>
</div>
<a class="anchor" id="gad660d78a12fa207d891838863dfc6ba7"></a><!-- doxytag: member="dbus&#45;object&#45;tree.c::_dbus_object_tree_dispatch_and_unlock" ref="gad660d78a12fa207d891838863dfc6ba7" args="(DBusObjectTree *tree, DBusMessage *message, dbus_bool_t *found_object)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__DBusShared.html#ga8244b29230187624c24986c24edab1de">DBusHandlerResult</a> <a class="el" href="group__DBusObjectTree.html#gad660d78a12fa207d891838863dfc6ba7">_dbus_object_tree_dispatch_and_unlock</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *&#160;</td>
          <td class="paramname"><em>tree</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structDBusMessage.html">DBusMessage</a> *&#160;</td>
          <td class="paramname"><em>message</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> *&#160;</td>
          <td class="paramname"><em>found_object</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Tries to dispatch a message by directing it to handler for the object path listed in the message header, if any. </p>
<p>Messages are dispatched first to the registered handler that matches the largest number of path elements; that is, message to /foo/bar/baz would go to the handler for /foo/bar before the one for /foo.</p>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000044">Todo:</a></b></dt><dd>thread problems</dd></dl>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">tree</td><td>the global object tree </td></tr>
    <tr><td class="paramname">message</td><td>the message to dispatch </td></tr>
    <tr><td class="paramname">found_object</td><td>return location for the object </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>whether message was handled successfully </dd></dl>

<p>Definition at line <a class="el" href="dbus-object-tree_8c_source.html#l00903">903</a> of file <a class="el" href="dbus-object-tree_8c_source.html">dbus-object-tree.c</a>.</p>

<p>References <a class="el" href="dbus-connection_8c_source.html#l00388">_dbus_connection_lock()</a>, <a class="el" href="dbus-connection_8c_source.html#l00399">_dbus_connection_unlock()</a>, <a class="el" href="dbus-list_8c_source.html#l00270">_dbus_list_append()</a>, <a class="el" href="dbus-list_8c_source.html#l00567">_dbus_list_get_first_link()</a>, <a class="el" href="dbus-list_8c_source.html#l00730">_dbus_list_get_length()</a>, <a class="el" href="dbus-list_8h_source.html#l00090">_dbus_list_get_next_link</a>, <a class="el" href="dbus-list_8c_source.html#l00527">_dbus_list_remove_link()</a>, <a class="el" href="dbus-object-tree_8c_source.html#l00060">connection</a>, <a class="el" href="dbus-list_8h_source.html#l00038">DBusList::data</a>, <a class="el" href="dbus-memory_8c_source.html#l00749">dbus_free_string_array()</a>, <a class="el" href="dbus-shared_8h_source.html#l00070">DBUS_HANDLER_RESULT_NEED_MEMORY</a>, <a class="el" href="dbus-shared_8h_source.html#l00069">DBUS_HANDLER_RESULT_NOT_YET_HANDLED</a>, <a class="el" href="dbus-message_8c_source.html#l03164">dbus_message_get_path_decomposed()</a>, <a class="el" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1">FALSE</a>, <a class="el" href="dbus-object-tree_8c_source.html#l00080">DBusObjectSubtree::invoke_as_fallback</a>, <a class="el" href="dbus-object-tree_8c_source.html#l00075">DBusObjectSubtree::message_function</a>, <a class="el" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="el" href="dbus-object-tree_8c_source.html#l00073">DBusObjectSubtree::parent</a>, and <a class="el" href="dbus-object-tree_8c_source.html#l00076">DBusObjectSubtree::user_data</a>.</p>

<p>Referenced by <a class="el" href="dbus-connection_8c_source.html#l04549">dbus_connection_dispatch()</a>.</p>

</div>
</div>
<a class="anchor" id="ga1c51e43233ce0f3855c128f2555317eb"></a><!-- doxytag: member="dbus&#45;object&#45;tree.c::_dbus_object_tree_free_all_unlocked" ref="ga1c51e43233ce0f3855c128f2555317eb" args="(DBusObjectTree *tree)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="group__DBusObjectTree.html#ga1c51e43233ce0f3855c128f2555317eb">_dbus_object_tree_free_all_unlocked</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *&#160;</td>
          <td class="paramname"><em>tree</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Free all the handlers in the tree. </p>
<p>Lock on tree's connection must not be held.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">tree</td><td>the object tree </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="dbus-object-tree_8c_source.html#l00718">718</a> of file <a class="el" href="dbus-object-tree_8c_source.html">dbus-object-tree.c</a>.</p>

<p>References <a class="el" href="dbus-object-tree_8c_source.html#l00060">connection</a>, <a class="el" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, and <a class="el" href="dbus-object-tree_8c_source.html#l00062">root</a>.</p>

<p>Referenced by <a class="el" href="dbus-object-tree_8c_source.html#l00143">_dbus_object_tree_unref()</a>.</p>

</div>
</div>
<a class="anchor" id="ga4cf5a5f35d2bd18b6fa8aa58ba6b5de4"></a><!-- doxytag: member="dbus&#45;object&#45;tree.c::_dbus_object_tree_get_user_data_unlocked" ref="ga4cf5a5f35d2bd18b6fa8aa58ba6b5de4" args="(DBusObjectTree *tree, const char **path)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void* <a class="el" href="group__DBusObjectTree.html#ga4cf5a5f35d2bd18b6fa8aa58ba6b5de4">_dbus_object_tree_get_user_data_unlocked</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *&#160;</td>
          <td class="paramname"><em>tree</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char **&#160;</td>
          <td class="paramname"><em>path</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Looks up the data passed to <a class="el" href="group__DBusObjectTree.html#gab3da15ee1a73d3b26008d1bce20a78a0" title="Registers a new subtree in the global object tree.">_dbus_object_tree_register()</a> for a handler at the given path. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">tree</td><td>the global object tree </td></tr>
    <tr><td class="paramname">path</td><td>NULL-terminated array of path elements giving path to subtree </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>the object's user_data or <a class="el" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a> if none found </dd></dl>

<p>Definition at line <a class="el" href="dbus-object-tree_8c_source.html#l01075">1075</a> of file <a class="el" href="dbus-object-tree_8c_source.html">dbus-object-tree.c</a>.</p>

<p>References <a class="el" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, and <a class="el" href="dbus-object-tree_8c_source.html#l00076">DBusObjectSubtree::user_data</a>.</p>

<p>Referenced by <a class="el" href="dbus-connection_8c_source.html#l05841">dbus_connection_get_object_path_data()</a>.</p>

</div>
</div>
<a class="anchor" id="gaab7040bd1bf037d99e9bbb75d0869a2f"></a><!-- doxytag: member="dbus&#45;object&#45;tree.c::_dbus_object_tree_list_registered_and_unlock" ref="gaab7040bd1bf037d99e9bbb75d0869a2f" args="(DBusObjectTree *tree, const char **parent_path, char ***child_entries)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> <a class="el" href="group__DBusObjectTree.html#gaab7040bd1bf037d99e9bbb75d0869a2f">_dbus_object_tree_list_registered_and_unlock</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *&#160;</td>
          <td class="paramname"><em>tree</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char **&#160;</td>
          <td class="paramname"><em>parent_path</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char ***&#160;</td>
          <td class="paramname"><em>child_entries</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Lists the registered fallback handlers and object path handlers at the given parent_path. </p>
<p>The returned array should be freed with <a class="el" href="group__DBusMemory.html#gac200b2dbc8b3f6ecac4d42426fb97b40" title="Frees a NULL-terminated array of strings.">dbus_free_string_array()</a>.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">tree</td><td>the object tree </td></tr>
    <tr><td class="paramname">parent_path</td><td>the path to list the child handlers of </td></tr>
    <tr><td class="paramname">child_entries</td><td>returns <a class="el" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>-terminated array of children </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd><a class="el" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a> if no memory to allocate the child entries </dd></dl>

<p>Definition at line <a class="el" href="dbus-object-tree_8c_source.html#l01206">1206</a> of file <a class="el" href="dbus-object-tree_8c_source.html">dbus-object-tree.c</a>.</p>

<p>References <a class="el" href="dbus-connection_8c_source.html#l00399">_dbus_connection_unlock()</a>, and <a class="el" href="dbus-object-tree_8c_source.html#l00060">connection</a>.</p>

<p>Referenced by <a class="el" href="dbus-connection_8c_source.html#l05878">dbus_connection_list_registered()</a>.</p>

</div>
</div>
<a class="anchor" id="ga5920f14b487122f13a3d439952d5ed2e"></a><!-- doxytag: member="dbus&#45;object&#45;tree.c::_dbus_object_tree_new" ref="ga5920f14b487122f13a3d439952d5ed2e" args="(DBusConnection *connection)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structDBusObjectTree.html">DBusObjectTree</a>* <a class="el" href="group__DBusObjectTree.html#ga5920f14b487122f13a3d439952d5ed2e">_dbus_object_tree_new</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structDBusConnection.html">DBusConnection</a> *&#160;</td>
          <td class="paramname"><em>connection</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Creates a new object tree, representing a mapping from paths to handler vtables. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">connection</td><td>the connection this tree belongs to </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>the new tree or <a class="el" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a> if no memory </dd></dl>

<p>Definition at line <a class="el" href="dbus-object-tree_8c_source.html#l00092">92</a> of file <a class="el" href="dbus-object-tree_8c_source.html">dbus-object-tree.c</a>.</p>

<p>References <a class="el" href="dbus-object-tree_8c_source.html#l00060">connection</a>, <a class="el" href="dbus-memory_8c_source.html#l00701">dbus_free()</a>, <a class="el" href="dbus-memory_8h_source.html#l00059">dbus_new0</a>, <a class="el" href="dbus-object-tree_8c_source.html#l00080">DBusObjectSubtree::invoke_as_fallback</a>, <a class="el" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="el" href="dbus-object-tree_8c_source.html#l00059">refcount</a>, <a class="el" href="dbus-object-tree_8c_source.html#l00062">root</a>, and <a class="el" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>.</p>

<p>Referenced by <a class="el" href="dbus-connection_8c_source.html#l01249">_dbus_connection_new_for_transport()</a>.</p>

</div>
</div>
<a class="anchor" id="ga144a3920922e8badf1018ce22b27d9c4"></a><!-- doxytag: member="dbus&#45;object&#45;tree.c::_dbus_object_tree_ref" ref="ga144a3920922e8badf1018ce22b27d9c4" args="(DBusObjectTree *tree)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structDBusObjectTree.html">DBusObjectTree</a>* <a class="el" href="group__DBusObjectTree.html#ga144a3920922e8badf1018ce22b27d9c4">_dbus_object_tree_ref</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *&#160;</td>
          <td class="paramname"><em>tree</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Increment the reference count. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">tree</td><td>the object tree </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>the object tree </dd></dl>

<p>Definition at line <a class="el" href="dbus-object-tree_8c_source.html#l00129">129</a> of file <a class="el" href="dbus-object-tree_8c_source.html">dbus-object-tree.c</a>.</p>

<p>References <a class="el" href="dbus-object-tree_8c_source.html#l00059">refcount</a>.</p>

</div>
</div>
<a class="anchor" id="gab3da15ee1a73d3b26008d1bce20a78a0"></a><!-- doxytag: member="dbus&#45;object&#45;tree.c::_dbus_object_tree_register" ref="gab3da15ee1a73d3b26008d1bce20a78a0" args="(DBusObjectTree *tree, dbus_bool_t fallback, const char **path, const DBusObjectPathVTable *vtable, void *user_data, DBusError *error)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> <a class="el" href="group__DBusObjectTree.html#gab3da15ee1a73d3b26008d1bce20a78a0">_dbus_object_tree_register</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *&#160;</td>
          <td class="paramname"><em>tree</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>&#160;</td>
          <td class="paramname"><em>fallback</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char **&#160;</td>
          <td class="paramname"><em>path</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structDBusObjectPathVTable.html">DBusObjectPathVTable</a> *&#160;</td>
          <td class="paramname"><em>vtable</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>user_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structDBusError.html">DBusError</a> *&#160;</td>
          <td class="paramname"><em>error</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Registers a new subtree in the global object tree. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">tree</td><td>the global object tree </td></tr>
    <tr><td class="paramname">fallback</td><td><a class="el" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a> to handle messages to children of this path </td></tr>
    <tr><td class="paramname">path</td><td>NULL-terminated array of path elements giving path to subtree </td></tr>
    <tr><td class="paramname">vtable</td><td>the vtable used to traverse this subtree </td></tr>
    <tr><td class="paramname">user_data</td><td>user data to pass to methods in the vtable </td></tr>
    <tr><td class="paramname">error</td><td>address where an error can be returned </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd><a class="el" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a> if an error (<a class="el" href="group__DBusProtocol.html#gac32eaf0b92f798307853cd4fe0cf11c2" title="There was not enough memory to complete an operation.">DBUS_ERROR_NO_MEMORY</a> or <a class="el" href="group__DBusProtocol.html#ga6a4358a62f0cd68d637532772475e576" title="There&#39;s already an object with the requested object path.">DBUS_ERROR_OBJECT_PATH_IN_USE</a>) is reported </dd></dl>

<p>Definition at line <a class="el" href="dbus-object-tree_8c_source.html#l00391">391</a> of file <a class="el" href="dbus-object-tree_8c_source.html">dbus-object-tree.c</a>.</p>

<p>References <a class="el" href="dbus-protocol_8h_source.html#l00445">DBUS_ERROR_OBJECT_PATH_IN_USE</a>, <a class="el" href="dbus-memory_8c_source.html#l00701">dbus_free()</a>, <a class="el" href="dbus-errors_8c_source.html#l00354">dbus_set_error()</a>, <a class="el" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1">FALSE</a>, <a class="el" href="dbus-object-tree_8c_source.html#l00080">DBusObjectSubtree::invoke_as_fallback</a>, <a class="el" href="dbus-object-tree_8c_source.html#l00075">DBusObjectSubtree::message_function</a>, <a class="el" href="dbus-connection_8h_source.html#l00387">DBusObjectPathVTable::message_function</a>, <a class="el" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="el" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>, <a class="el" href="dbus-object-tree_8c_source.html#l00074">DBusObjectSubtree::unregister_function</a>, <a class="el" href="dbus-connection_8h_source.html#l00386">DBusObjectPathVTable::unregister_function</a>, and <a class="el" href="dbus-object-tree_8c_source.html#l00076">DBusObjectSubtree::user_data</a>.</p>

</div>
</div>
<a class="anchor" id="ga7639e273ab160c422a7cef0cda60ded5"></a><!-- doxytag: member="dbus&#45;object&#45;tree.c::_dbus_object_tree_unref" ref="ga7639e273ab160c422a7cef0cda60ded5" args="(DBusObjectTree *tree)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="group__DBusObjectTree.html#ga7639e273ab160c422a7cef0cda60ded5">_dbus_object_tree_unref</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *&#160;</td>
          <td class="paramname"><em>tree</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Decrement the reference count. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">tree</td><td>the object tree </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="dbus-object-tree_8c_source.html#l00143">143</a> of file <a class="el" href="dbus-object-tree_8c_source.html">dbus-object-tree.c</a>.</p>

<p>References <a class="el" href="dbus-object-tree_8c_source.html#l00718">_dbus_object_tree_free_all_unlocked()</a>, <a class="el" href="dbus-memory_8c_source.html#l00701">dbus_free()</a>, and <a class="el" href="dbus-object-tree_8c_source.html#l00059">refcount</a>.</p>

<p>Referenced by <a class="el" href="dbus-connection_8c_source.html#l01249">_dbus_connection_new_for_transport()</a>.</p>

</div>
</div>
<a class="anchor" id="ga3babe73ed342b6963997ef2efd73ef75"></a><!-- doxytag: member="dbus&#45;object&#45;tree.c::_dbus_object_tree_unregister_and_unlock" ref="ga3babe73ed342b6963997ef2efd73ef75" args="(DBusObjectTree *tree, const char **path)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="group__DBusObjectTree.html#ga3babe73ed342b6963997ef2efd73ef75">_dbus_object_tree_unregister_and_unlock</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structDBusObjectTree.html">DBusObjectTree</a> *&#160;</td>
          <td class="paramname"><em>tree</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char **&#160;</td>
          <td class="paramname"><em>path</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Unregisters an object subtree that was registered with the same path. </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">tree</td><td>the global object tree </td></tr>
    <tr><td class="paramname">path</td><td>path to the subtree (same as the one passed to <a class="el" href="group__DBusObjectTree.html#gab3da15ee1a73d3b26008d1bce20a78a0" title="Registers a new subtree in the global object tree.">_dbus_object_tree_register()</a>) </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="dbus-object-tree_8c_source.html#l00623">623</a> of file <a class="el" href="dbus-object-tree_8c_source.html">dbus-object-tree.c</a>.</p>

<p>References <a class="el" href="dbus-connection_8c_source.html#l01419">_dbus_connection_ref_unlocked()</a>, <a class="el" href="dbus-connection_8c_source.html#l00399">_dbus_connection_unlock()</a>, <a class="el" href="dbus-internals_8c_source.html#l00230">_dbus_warn()</a>, <a class="el" href="dbus-object-tree_8c_source.html#l00060">connection</a>, <a class="el" href="dbus-connection_8c_source.html#l02817">dbus_connection_unref()</a>, <a class="el" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1">FALSE</a>, <a class="el" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="el" href="dbus-object-tree_8c_source.html#l00062">root</a>, and <a class="el" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>.</p>

<p>Referenced by <a class="el" href="dbus-connection_8c_source.html#l05809">dbus_connection_unregister_object_path()</a>.</p>

</div>
</div>
</div><!-- contents -->


<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 3 2016 17:50:33 for D-Bus by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.7.6.1
</small></address>

</body>
</html>