Code Search for Developers
 
 
  

agent__registry_8c.html from net-snmp at Krugle


Show agent__registry_8c.html syntax highlighted

<!--#set var="section" value="development" -->
<!--#include virtual="/page-top.html" -->
<!-- CONTENT START -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>agent_registry.c File Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.2.11 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; </center>
<hr><h1>agent_registry.c File Reference</h1><code>#include &lt;<a class="el" href="config_8h-source.html">config.h</a>&gt;</code><br>
<code>#include &lt;signal.h&gt;</code><br>
<code>#include &lt;string.h&gt;</code><br>
<code>#include &lt;stdlib.h&gt;</code><br>
<code>#include &lt;sys/types.h&gt;</code><br>
<code>#include &lt;stdio.h&gt;</code><br>
<code>#include &lt;fcntl.h&gt;</code><br>
<code>#include &lt;sys/time.h&gt;</code><br>
<code>#include &lt;time.h&gt;</code><br>
<code>#include &lt;dmalloc.h&gt;</code><br>
<code>#include "mibincl.h"</code><br>
<code>#include "snmp_client.h"</code><br>
<code>#include "default_store.h"</code><br>
<code>#include "<a class="el" href="ds__agent_8h-source.html">ds_agent.h</a>"</code><br>
<code>#include "callback.h"</code><br>
<code>#include "<a class="el" href="agent__callbacks_8h-source.html">agent_callbacks.h</a>"</code><br>
<code>#include "<a class="el" href="agent__registry_8h-source.html">agent_registry.h</a>"</code><br>
<code>#include "snmp_alarm.h"</code><br>
<code>#include "snmp_secmod.h"</code><br>
<code>#include "vacm.h"</code><br>
<code>#include "<a class="el" href="snmpd_8h-source.html">snmpd.h</a>"</code><br>
<code>#include "mibgroup/struct.h"</code><br>
<code>#include "<a class="el" href="old__api_8h-source.html">helpers/old_api.h</a>"</code><br>
<code>#include "<a class="el" href="null_8h-source.html">helpers/null.h</a>"</code><br>
<code>#include "<a class="el" href="table_8h-source.html">helpers/table.h</a>"</code><br>
<code>#include "<a class="el" href="table__iterator_8h-source.html">helpers/table_iterator.h</a>"</code><br>
<code>#include "mib_module_includes.h"</code><br>

<p>
<a href="agent__registry_8c-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a0">IN_SNMP_VARS_C</a></td></tr>
<tr><td colspan=2><br><h2>Functions</h2></td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="agent__registry_8h.html#a31">subtree_context_cache</a> *&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a17">get_top_context_cache</a> (void)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="structsubtree.html">subtree</a> *&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a18">find_first_subtree</a> (const char *context_name)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="structsubtree.html">subtree</a> *&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a19">add_subtree</a> (struct <a class="el" href="structsubtree.html">subtree</a> *new_tree, const char *context_name)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="structsubtree.html">subtree</a> *&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a20">replace_first_subtree</a> (struct <a class="el" href="structsubtree.html">subtree</a> *new_tree, const char *context_name)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a21">tree_compare</a> (const struct <a class="el" href="structsubtree.html">subtree</a> *ap, const struct <a class="el" href="structsubtree.html">subtree</a> *bp)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="structsubtree.html">subtree</a> *&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a22">split_subtree</a> (struct <a class="el" href="structsubtree.html">subtree</a> *current, oid name[], int name_len)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a23">load_subtree</a> (struct <a class="el" href="structsubtree.html">subtree</a> *new_sub, const char *context_name)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a24">register_mib_context2</a> (const char *moduleName, struct <a class="el" href="structvariable.html">variable</a> *var, size_t varsize, size_t numvars, oid *mibloc, size_t mibloclen, int priority, int range_subid, oid range_ubound, struct snmp_session *ss, const char *context, int timeout, int flags, <a class="el" href="helpers_2agent__handler_8h.html#a9">handler_registration</a> *reginfo)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a25">register_mib_context</a> (const char *moduleName, struct <a class="el" href="structvariable.html">variable</a> *var, size_t varsize, size_t numvars, oid *mibloc, size_t mibloclen, int priority, int range_subid, oid range_ubound, struct snmp_session *ss, const char *context, int timeout, int flags)</td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a26">register_mib_reattach_subtree</a> (struct <a class="el" href="structsubtree.html">subtree</a> *it)</td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a27">register_mib_reattach</a> (void)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a28">register_mib_range</a> (const char *moduleName, struct <a class="el" href="structvariable.html">variable</a> *var, size_t varsize, size_t numvars, oid *mibloc, size_t mibloclen, int priority, int range_subid, oid range_ubound, struct snmp_session *ss)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a29">register_mib_priority</a> (const char *moduleName, struct <a class="el" href="structvariable.html">variable</a> *var, size_t varsize, size_t numvars, oid *mibloc, size_t mibloclen, int priority)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a30">register_mib</a> (const char *moduleName, struct <a class="el" href="structvariable.html">variable</a> *var, size_t varsize, size_t numvars, oid *mibloc, size_t mibloclen)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a31">register_mib_table_row</a> (const char *moduleName, struct <a class="el" href="structvariable.html">variable</a> *var, size_t varsize, size_t numvars, oid *mibloc, size_t mibloclen, int priority, int var_subid, struct snmp_session *ss, const char *context, int timeout, int flags)</td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a32">unload_subtree</a> (struct <a class="el" href="structsubtree.html">subtree</a> *sub, struct <a class="el" href="structsubtree.html">subtree</a> *prev)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a33">unregister_mib_context</a> (oid *name, size_t len, int priority, int range_subid, oid range_ubound, const char *context)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a34">unregister_mib_range</a> (oid *name, size_t len, int priority, int range_subid, oid range_ubound)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a35">unregister_mib_priority</a> (oid *name, size_t len, int priority)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a36">unregister_mib</a> (oid *name, size_t len)</td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a37">unregister_mibs_by_session</a> (struct snmp_session *ss)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="structsubtree.html">subtree</a> *&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a38">free_subtree</a> (struct <a class="el" href="structsubtree.html">subtree</a> *st)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a39">in_a_view</a> (oid *name, size_t *namelen, struct snmp_pdu *pdu, int type)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a40">check_access</a> (struct snmp_pdu *pdu)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a41">compare_tree</a> (const oid *in_name1, size_t len1, const oid *in_name2, size_t len2)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="structsubtree.html">subtree</a> *&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a42">find_subtree_previous</a> (oid *name, size_t len, struct <a class="el" href="structsubtree.html">subtree</a> *<a class="el" href="structsubtree.html">subtree</a>, const char *context_name)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="structsubtree.html">subtree</a> *&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a43">find_subtree_next</a> (oid *name, size_t len, struct <a class="el" href="structsubtree.html">subtree</a> *<a class="el" href="structsubtree.html">subtree</a>, const char *context_name)</td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="structsubtree.html">subtree</a> *&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a44">find_subtree</a> (oid *name, size_t len, struct <a class="el" href="structsubtree.html">subtree</a> *<a class="el" href="structsubtree.html">subtree</a>, const char *context_name)</td></tr>
<tr><td nowrap align=right valign=top>snmp_session *&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a45">get_session_for_oid</a> (oid *name, size_t len, const char *context_name)</td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a46">setup_tree</a> (void)</td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a47">dump_idx_registry</a> (void)</td></tr>
<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a48">dump_registry</a> (void)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a49">register_readfd</a> (int fd, void(*func)(int, void *), void *data)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a50">register_writefd</a> (int fd, void(*func)(int, void *), void *data)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a51">register_exceptfd</a> (int fd, void(*func)(int, void *), void *data)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a52">unregister_readfd</a> (int fd)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a53">unregister_writefd</a> (int fd)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a54">unregister_exceptfd</a> (int fd)</td></tr>
<tr><td nowrap align=right valign=top>RETSIGTYPE&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a55">agent_SIGCHLD_handler</a> (int sig)</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a56">register_signal</a> (int sig, void(*func)(int))</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a57">unregister_signal</a> (int sig)</td></tr>
<tr><td colspan=2><br><h2>Variables</h2></td></tr>
<tr><td nowrap align=right valign=top><a class="el" href="agent__registry_8h.html#a31">subtree_context_cache</a> *&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a1">context_subtrees</a> = NULL</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a3">external_readfd</a> [NUM_EXTERNAL_FDS]</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a4">external_readfdlen</a> = 0</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a5">external_writefd</a> [NUM_EXTERNAL_FDS]</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a6">external_writefdlen</a> = 0</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a7">external_exceptfd</a> [NUM_EXTERNAL_FDS]</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a8">external_exceptfdlen</a> = 0</td></tr>
<tr><td nowrap align=right valign=top>void(*&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a9">external_readfdfunc</a> [NUM_EXTERNAL_FDS])(int, void *)</td></tr>
<tr><td nowrap align=right valign=top>void(*&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a10">external_writefdfunc</a> [NUM_EXTERNAL_FDS])(int, void *)</td></tr>
<tr><td nowrap align=right valign=top>void(*&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a11">external_exceptfdfunc</a> [NUM_EXTERNAL_FDS])(int, void *)</td></tr>
<tr><td nowrap align=right valign=top>void *&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a12">external_readfd_data</a> [NUM_EXTERNAL_FDS]</td></tr>
<tr><td nowrap align=right valign=top>void *&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a13">external_writefd_data</a> [NUM_EXTERNAL_FDS]</td></tr>
<tr><td nowrap align=right valign=top>void *&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a14">external_exceptfd_data</a> [NUM_EXTERNAL_FDS]</td></tr>
<tr><td nowrap align=right valign=top>int&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a15">external_signal_scheduled</a> [NUM_EXTERNAL_SIGS]</td></tr>
<tr><td nowrap align=right valign=top>void(*&nbsp;</td><td valign=bottom><a class="el" href="agent__registry_8c.html#a16">external_signal_handler</a> [NUM_EXTERNAL_SIGS])(int)</td></tr>
</table>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="agent_registry.c::IN_SNMP_VARS_C"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> #define IN_SNMP_VARS_C
      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00008">8</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.    </td>
  </tr>
</table>
<hr><h2>Function Documentation</h2>
<a name="a19" doxytag="agent_registry.c::add_subtree"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> struct <a class="el" href="structsubtree.html">subtree</a>* add_subtree </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>struct <a class="el" href="structsubtree.html">subtree</a> *&nbsp;</td>
          <td class="mdname">&nbsp; <em>new_tree</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>const char *&nbsp;</td>
          <td class="mdname">&nbsp; <em>context_name</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00090">90</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.
<p>
Referenced by <a class="el" href="agent__registry_8c-source.html#l00107">replace_first_subtree</a>().
<p>
<div class="fragment"><pre>00090                                                                 {
00091     <a class="code" href="structsubtree__context__cache__s.html">subtree_context_cache</a> *ptr = SNMP_MALLOC_TYPEDEF(<a class="code" href="structsubtree__context__cache__s.html">subtree_context_cache</a>);
00092     <font class="keywordflow">if</font> (!context_name)
00093         context_name = <font class="stringliteral">""</font>;
00094 
00095     <font class="keywordflow">if</font> (!ptr)
00096         <font class="keywordflow">return</font> NULL;
00097 
00098     DEBUGMSGTL((<font class="stringliteral">"add_subtree"</font>,<font class="stringliteral">"adding subtree for context: \"%s\"\n"</font>, context_name));
00099     ptr-&gt;<a class="code" href="structsubtree__context__cache__s.html#m2">next</a> = <a class="code" href="agent__registry_8c.html#a1">context_subtrees</a>;
00100     ptr-&gt;<a class="code" href="structsubtree__context__cache__s.html#m1">first_subtree</a> = new_tree;
00101     ptr-&gt;<a class="code" href="structsubtree__context__cache__s.html#m0">context_name</a> = strdup(context_name);
00102     <a class="code" href="agent__registry_8c.html#a1">context_subtrees</a> = ptr;
00103     <font class="keywordflow">return</font> ptr-&gt;<a class="code" href="structsubtree__context__cache__s.html#m1">first_subtree</a>;
00104 }
</pre></div>    </td>
  </tr>
</table>
<a name="a55" doxytag="agent_registry.c::agent_SIGCHLD_handler"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> RETSIGTYPE agent_SIGCHLD_handler </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname1">&nbsp; <em>sig</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l01172">1172</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>01173 {
01174   external_signal_scheduled[SIGCHLD]++;
01175 <font class="preprocessor">#ifndef HAVE_SIGACTION</font>
01176   <font class="comment">/* signal() sucks. It *might* have SysV semantics, which means that</font>
01177    * a signal handler is reset once it gets called. Ensure that it
01178    * remains active.
01179    */
01180   signal(SIGCHLD, <a class="code" href="agent__registry_8c.html#a55">agent_SIGCHLD_handler</a>);
01181 <font class="preprocessor">#endif</font>
01182 }
</pre></div>    </td>
  </tr>
</table>
<a name="a40" doxytag="agent_registry.c::check_access"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> int check_access </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>struct snmp_pdu *&nbsp;</td>
          <td class="mdname1">&nbsp; <em>pdu</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00866">866</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00867 {
00868   <font class="keyword">struct </font><a class="code" href="structview__parameters.html">view_parameters</a> view_parms;
00869   view_parms.<a class="code" href="structview__parameters.html#m0">pdu</a> = pdu;
00870   view_parms.<a class="code" href="structview__parameters.html#m1">name</a> = 0;
00871   view_parms.<a class="code" href="structview__parameters.html#m2">namelen</a> = 0;
00872   view_parms.<a class="code" href="structview__parameters.html#m3">errorcode</a> = 0;
00873 
00874   <font class="keywordflow">if</font> (pdu-&gt;flags &amp; UCD_MSG_FLAG_ALWAYS_IN_VIEW)
00875     <font class="keywordflow">return</font> 0;           <font class="comment">/* Enable bypassing of view-based access control */</font>
00876 
00877   <font class="keywordflow">switch</font> (pdu-&gt;version) {
00878   <font class="keywordflow">case</font> SNMP_VERSION_1:
00879   <font class="keywordflow">case</font> SNMP_VERSION_2c:
00880   <font class="keywordflow">case</font> SNMP_VERSION_3:
00881     snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
00882                         <a class="code" href="agent__callbacks_8h.html#a5">SNMPD_CALLBACK_ACM_CHECK_INITIAL</a>,
00883                         &amp;view_parms);
00884     <font class="keywordflow">return</font> view_parms.<a class="code" href="structview__parameters.html#m3">errorcode</a>;
00885   }
00886   <font class="keywordflow">return</font> 1;
00887 }
</pre></div>    </td>
  </tr>
</table>
<a name="a41" doxytag="agent_registry.c::compare_tree"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> int compare_tree </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>const oid *&nbsp;</td>
          <td class="mdname">&nbsp; <em>in_name1</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname">&nbsp; <em>len1</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>const oid *&nbsp;</td>
          <td class="mdname">&nbsp; <em>in_name2</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname">&nbsp; <em>len2</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00897">897</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00901 {
00902     <font class="keyword">register</font> <font class="keywordtype">int</font> len, res;
00903     <font class="keyword">register</font> <font class="keyword">const</font> oid * name1 = in_name1;
00904     <font class="keyword">register</font> <font class="keyword">const</font> oid * name2 = in_name2;
00905 
00906     <font class="comment">/* len = minimum of len1 and len2 */</font>
00907     <font class="keywordflow">if</font> (len1 &lt; len2)
00908         len = len1;
00909     <font class="keywordflow">else</font>
00910         len = len2;
00911     <font class="comment">/* find first non-matching OID */</font>
00912     <font class="keywordflow">while</font>(len-- &gt; 0){
00913         res = *(name1++) - *(name2++);
00914         <font class="keywordflow">if</font> (res &lt; 0)
00915             <font class="keywordflow">return</font> -1;
00916         <font class="keywordflow">if</font> (res &gt; 0)
00917             <font class="keywordflow">return</font> 1;
00918     }
00919     <font class="comment">/* both OIDs equal up to length of shorter OID */</font>
00920     <font class="keywordflow">if</font> (len1 &lt; len2)
00921         <font class="keywordflow">return</font> -1;
00922 
00923     <font class="comment">/* name1 matches name2 for length of name2, or they are equal */</font>
00924     <font class="keywordflow">return</font> 0;
00925 }
</pre></div>    </td>
  </tr>
</table>
<a name="a47" doxytag="agent_registry.c::dump_idx_registry"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> void dump_idx_registry </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>void&nbsp;</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__index_8c-source.html#l00495">495</a> of file <a class="el" href="agent__index_8c-source.html">agent_index.c</a>.<div class="fragment"><pre>00496 {
00497     <font class="keyword">struct </font><a class="code" href="structsnmp__index.html">snmp_index</a> *idxptr, *idxptr2;
00498     <font class="keywordtype">char</font> start_oid[SPRINT_MAX_LEN];
00499     <font class="keywordtype">char</font> end_oid[SPRINT_MAX_LEN];
00500 
00501     <font class="keywordflow">if</font> ( snmp_index_head )
00502         printf(<font class="stringliteral">"\nIndex Allocations:\n"</font>);
00503     <font class="keywordflow">for</font>( idxptr = <a class="code" href="agent__index_8c.html#a0">snmp_index_head</a> ; idxptr != NULL; idxptr = idxptr-&gt;<a class="code" href="structsnmp__index.html#m2">next_oid</a>) {
00504         sprint_objid(start_oid, idxptr-&gt;<a class="code" href="structsnmp__index.html#m0">varbind</a>-&gt;name, idxptr-&gt;<a class="code" href="structsnmp__index.html#m0">varbind</a>-&gt;name_length);
00505         printf(<font class="stringliteral">"%s indexes:\n"</font>, start_oid);
00506         <font class="keywordflow">for</font>( idxptr2 = idxptr ; idxptr2 != NULL; idxptr2 = idxptr2-&gt;<a class="code" href="structsnmp__index.html#m4">next_idx</a>) {
00507             <font class="keywordflow">switch</font>( idxptr2-&gt;<a class="code" href="structsnmp__index.html#m0">varbind</a>-&gt;type ) {
00508                 <font class="keywordflow">case</font> ASN_INTEGER:
00509                     printf(<font class="stringliteral">"    %c %ld %c\n"</font>,
00510                         ( idxptr2-&gt;<a class="code" href="structsnmp__index.html#m1">session</a> ? <font class="charliteral">' '</font> : <font class="charliteral">'('</font> ),
00511                           *idxptr2-&gt;<a class="code" href="structsnmp__index.html#m0">varbind</a>-&gt;val.integer,
00512                         ( idxptr2-&gt;<a class="code" href="structsnmp__index.html#m1">session</a> ? <font class="charliteral">' '</font> : <font class="charliteral">')'</font> ));
00513                     <font class="keywordflow">break</font>;
00514                 <font class="keywordflow">case</font> ASN_OCTET_STR:
00515                     printf(<font class="stringliteral">"    %c %s %c\n"</font>,
00516                         ( idxptr2-&gt;<a class="code" href="structsnmp__index.html#m1">session</a> ? <font class="charliteral">' '</font> : <font class="charliteral">'('</font> ),
00517                           idxptr2-&gt;<a class="code" href="structsnmp__index.html#m0">varbind</a>-&gt;val.string,
00518                         ( idxptr2-&gt;<a class="code" href="structsnmp__index.html#m1">session</a> ? <font class="charliteral">' '</font> : <font class="charliteral">')'</font> ));
00519                     <font class="keywordflow">break</font>;
00520                 <font class="keywordflow">case</font> ASN_OBJECT_ID:
00521                     sprint_objid(end_oid, idxptr2-&gt;<a class="code" href="structsnmp__index.html#m0">varbind</a>-&gt;val.objid,
00522                                 idxptr2-&gt;<a class="code" href="structsnmp__index.html#m0">varbind</a>-&gt;val_len/<font class="keyword">sizeof</font>(oid));
00523                     printf(<font class="stringliteral">"    %c %s %c\n"</font>,
00524                         ( idxptr2-&gt;<a class="code" href="structsnmp__index.html#m1">session</a> ? <font class="charliteral">' '</font> : <font class="charliteral">'('</font> ),
00525                           end_oid,
00526                         ( idxptr2-&gt;<a class="code" href="structsnmp__index.html#m1">session</a> ? <font class="charliteral">' '</font> : <font class="charliteral">')'</font> ));
00527                     <font class="keywordflow">break</font>;
00528                 <font class="keywordflow">default</font>:
00529                     printf(<font class="stringliteral">"unsupported type (%d)\n"</font>,
00530                                 idxptr2-&gt;<a class="code" href="structsnmp__index.html#m0">varbind</a>-&gt;type);
00531             }
00532         }
00533     }
00534 }
</pre></div>    </td>
  </tr>
</table>
<a name="a48" doxytag="agent_registry.c::dump_registry"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> void dump_registry </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>void&nbsp;</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l01031">1031</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>01032 {
01033     <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *myptr, *myptr2;
01034     <font class="keywordtype">char</font> start_oid[SPRINT_MAX_LEN];
01035     <font class="keywordtype">char</font> end_oid[SPRINT_MAX_LEN];
01036 
01037     <a class="code" href="structsubtree__context__cache__s.html">subtree_context_cache</a> *ptr;
01038     <font class="keywordflow">for</font>(ptr = <a class="code" href="agent__registry_8c.html#a1">context_subtrees</a>; ptr; ptr = ptr-&gt;<a class="code" href="structsubtree__context__cache__s.html#m2">next</a>) {
01039         printf(<font class="stringliteral">"Subtrees for Context: %s\n"</font>, ptr-&gt;<a class="code" href="structsubtree__context__cache__s.html#m0">context_name</a>);
01040         <font class="keywordflow">for</font>( myptr = ptr-&gt;<a class="code" href="structsubtree__context__cache__s.html#m1">first_subtree</a> ; myptr != NULL; myptr = myptr-&gt;<a class="code" href="structsubtree.html#m14">next</a>) {
01041             sprint_objid(start_oid, myptr-&gt;<a class="code" href="structsubtree.html#m2">start</a>, myptr-&gt;<a class="code" href="structsubtree.html#m3">start_len</a>);
01042             sprint_objid(end_oid, myptr-&gt;<a class="code" href="structsubtree.html#m4">end</a>, myptr-&gt;<a class="code" href="structsubtree.html#m5">end_len</a>);
01043             printf(<font class="stringliteral">"%s%c %s - %s %c\n"</font>,
01044                    (myptr-&gt;<a class="code" href="structsubtree.html#m11">flags</a> &amp; <a class="code" href="var__struct_8h.html#a1">FULLY_QUALIFIED_INSTANCE</a>)?<font class="stringliteral">"[FQI] "</font>:<font class="stringliteral">""</font>,
01045                    ( myptr-&gt;<a class="code" href="structsubtree.html#m6">variables</a> ? <font class="charliteral">' '</font> : <font class="charliteral">'('</font> ),
01046                    start_oid, end_oid,
01047                    ( myptr-&gt;<a class="code" href="structsubtree.html#m6">variables</a> ? <font class="charliteral">' '</font> : <font class="charliteral">')'</font> ));
01048             <font class="keywordflow">for</font>( myptr2 = myptr ; myptr2 != NULL; myptr2 = myptr2-&gt;<a class="code" href="structsubtree.html#m16">children</a>) {
01049                 <font class="keywordflow">if</font> ( myptr2-&gt;<a class="code" href="structsubtree.html#m9">label</a> &amp;&amp; myptr2-&gt;<a class="code" href="structsubtree.html#m9">label</a>[0] )
01050                     printf(<font class="stringliteral">"\t%s\n"</font>, myptr2-&gt;<a class="code" href="structsubtree.html#m9">label</a>);
01051             }
01052         }
01053     }
01054 
01055     <a class="code" href="agent__index_8c.html#a10">dump_idx_registry</a>();
01056 }
</pre></div>    </td>
  </tr>
</table>
<a name="a18" doxytag="agent_registry.c::find_first_subtree"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> struct <a class="el" href="structsubtree.html">subtree</a>* find_first_subtree </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>const char *&nbsp;</td>
          <td class="mdname1">&nbsp; <em>context_name</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00074">74</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00074                                              {
00075     <a class="code" href="structsubtree__context__cache__s.html">subtree_context_cache</a> *ptr;
00076     <font class="keywordflow">if</font> (!context_name)
00077         context_name = <font class="stringliteral">""</font>;
00078     DEBUGMSGTL((<font class="stringliteral">"find_first_subtree"</font>,<font class="stringliteral">"looking for subtree for context: \"%s\"\n"</font>, context_name));
00079     <font class="keywordflow">for</font>(ptr = <a class="code" href="agent__registry_8c.html#a1">context_subtrees</a>; ptr; ptr = ptr-&gt;<a class="code" href="structsubtree__context__cache__s.html#m2">next</a>) {
00080         <font class="keywordflow">if</font> (strcmp(ptr-&gt;<a class="code" href="structsubtree__context__cache__s.html#m0">context_name</a>, context_name) == 0)<font class="keyword"> </font>{
00081             DEBUGMSGTL((<font class="stringliteral">"find_first_subtree"</font>,<font class="stringliteral">"found one for: \"%s\"\n"</font>, context_name));
00082             <font class="keywordflow">return</font> ptr-&gt;<a class="code" href="structsubtree__context__cache__s.html#m1">first_subtree</a>;
00083         }
00084     }
00085     DEBUGMSGTL((<font class="stringliteral">"find_first_subtree"</font>,<font class="stringliteral">"Didn't find a subtree for: \"%s\"\n"</font>, context_name));
00086     <font class="keywordflow">return</font> NULL;
00087 }
</pre></div>    </td>
  </tr>
</table>
<a name="a44" doxytag="agent_registry.c::find_subtree"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> struct <a class="el" href="structsubtree.html">subtree</a>* find_subtree </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>oid *&nbsp;</td>
          <td class="mdname">&nbsp; <em>name</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname">&nbsp; <em>len</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>struct <a class="el" href="structsubtree.html">subtree</a> *&nbsp;</td>
          <td class="mdname">&nbsp; <em>subtree</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>const char *&nbsp;</td>
          <td class="mdname">&nbsp; <em>context_name</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00967">967</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00971 {
00972   <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *myptr;
00973 
00974   myptr = <a class="code" href="agent__registry_8h.html#a35">find_subtree_previous</a>(name, len, <a class="code" href="structsubtree.html">subtree</a>, context_name);
00975   <font class="keywordflow">if</font> (myptr &amp;&amp; snmp_oid_compare(name, len, myptr-&gt;<a class="code" href="structsubtree.html#m4">end</a>, myptr-&gt;<a class="code" href="structsubtree.html#m5">end_len</a>) &lt; 0)
00976         <font class="keywordflow">return</font> myptr;
00977 
00978   <font class="keywordflow">return</font> NULL;
00979 }
</pre></div>    </td>
  </tr>
</table>
<a name="a43" doxytag="agent_registry.c::find_subtree_next"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> struct <a class="el" href="structsubtree.html">subtree</a>* find_subtree_next </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>oid *&nbsp;</td>
          <td class="mdname">&nbsp; <em>name</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname">&nbsp; <em>len</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>struct <a class="el" href="structsubtree.html">subtree</a> *&nbsp;</td>
          <td class="mdname">&nbsp; <em>subtree</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>const char *&nbsp;</td>
          <td class="mdname">&nbsp; <em>context_name</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00947">947</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00951 {
00952   <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *myptr = NULL;
00953 
00954   myptr = <a class="code" href="agent__registry_8h.html#a35">find_subtree_previous</a>(name, len, <a class="code" href="structsubtree.html">subtree</a>, context_name);
00955   <font class="keywordflow">if</font> ( myptr != NULL ) {
00956      myptr = myptr-&gt;<a class="code" href="structsubtree.html#m14">next</a>;
00957      <font class="keywordflow">while</font> ( myptr &amp;&amp; (myptr-&gt;<a class="code" href="structsubtree.html#m6">variables</a> == NULL || myptr-&gt;<a class="code" href="structsubtree.html#m7">variables_len</a> == 0) )
00958          myptr = myptr-&gt;<a class="code" href="structsubtree.html#m14">next</a>;
00959      <font class="keywordflow">return</font> myptr;
00960   }
00961   <font class="keywordflow">else</font> <font class="keywordflow">if</font> (<a class="code" href="structsubtree.html">subtree</a> &amp;&amp; snmp_oid_compare(name, len, subtree-&gt;<a class="code" href="structsubtree.html#m2">start</a>, subtree-&gt;<a class="code" href="structsubtree.html#m3">start_len</a>) &lt; 0)
00962      <font class="keywordflow">return</font> <a class="code" href="structsubtree.html">subtree</a>;
00963   <font class="keywordflow">else</font>
00964      <font class="keywordflow">return</font> NULL;
00965 }
</pre></div>    </td>
  </tr>
</table>
<a name="a42" doxytag="agent_registry.c::find_subtree_previous"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> struct <a class="el" href="structsubtree.html">subtree</a>* find_subtree_previous </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>oid *&nbsp;</td>
          <td class="mdname">&nbsp; <em>name</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname">&nbsp; <em>len</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>struct <a class="el" href="structsubtree.html">subtree</a> *&nbsp;</td>
          <td class="mdname">&nbsp; <em>subtree</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>const char *&nbsp;</td>
          <td class="mdname">&nbsp; <em>context_name</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00927">927</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00931 {
00932   <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *myptr, *previous = NULL;
00933 
00934   <font class="keywordflow">if</font> ( subtree )
00935         myptr = <a class="code" href="structsubtree.html">subtree</a>;
00936   <font class="keywordflow">else</font>
00937         myptr = <a class="code" href="agent__registry_8h.html#a60">find_first_subtree</a>(context_name);  <font class="comment">/* look through everything */</font>
00938 
00939   <font class="keywordflow">for</font>( ; myptr != NULL; previous = myptr, myptr = myptr-&gt;<a class="code" href="structsubtree.html#m14">next</a>) {
00940     <font class="keywordflow">if</font> (snmp_oid_compare(name, len, myptr-&gt;<a class="code" href="structsubtree.html#m2">start</a>, myptr-&gt;<a class="code" href="structsubtree.html#m3">start_len</a>) &lt; 0)<font class="keyword"> </font>{
00941       <font class="keywordflow">return</font> previous;
00942     }
00943   }
00944   <font class="keywordflow">return</font> previous;
00945 }
</pre></div>    </td>
  </tr>
</table>
<a name="a38" doxytag="agent_registry.c::free_subtree"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> struct <a class="el" href="structsubtree.html">subtree</a>* free_subtree </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>struct <a class="el" href="structsubtree.html">subtree</a> *&nbsp;</td>
          <td class="mdname1">&nbsp; <em>st</em>          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00806">806</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00807 {
00808   <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *ret = NULL;
00809 
00810   <font class="keywordflow">if</font> (st-&gt;<a class="code" href="structsubtree.html#m6">variables</a> != NULL &amp;&amp;
00811       snmp_oid_compare(st-&gt;<a class="code" href="structsubtree.html#m0">name</a>, st-&gt;<a class="code" href="structsubtree.html#m1">namelen</a>, st-&gt;<a class="code" href="structsubtree.html#m2">start</a>, st-&gt;<a class="code" href="structsubtree.html#m3">start_len</a>) == 0)<font class="keyword"> </font>{
00812     free(st-&gt;<a class="code" href="structsubtree.html#m6">variables</a>);
00813     st-&gt;<a class="code" href="structsubtree.html#m6">variables</a> = NULL;
00814   }
00815   <font class="keywordflow">if</font> (st-&gt;<a class="code" href="structsubtree.html#m14">next</a> != NULL) {
00816     ret = st-&gt;<a class="code" href="structsubtree.html#m14">next</a>;
00817   }
00818   free(st);
00819   <font class="keywordflow">return</font> ret;
00820 }
</pre></div>    </td>
  </tr>
</table>
<a name="a45" doxytag="agent_registry.c::get_session_for_oid"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> struct snmp_session* get_session_for_oid </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>oid *&nbsp;</td>
          <td class="mdname">&nbsp; <em>name</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname">&nbsp; <em>len</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>const char *&nbsp;</td>
          <td class="mdname">&nbsp; <em>context_name</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00981">981</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00983 {
00984    <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *myptr;
00985 
00986    myptr = <a class="code" href="agent__registry_8h.html#a35">find_subtree_previous</a>(name, len, <a class="code" href="agent__registry_8h.html#a60">find_first_subtree</a>(context_name),
00987                                  context_name);
00988    <font class="keywordflow">while</font> ( myptr &amp;&amp; myptr-&gt;<a class="code" href="structsubtree.html#m6">variables</a> == NULL )
00989         myptr = myptr-&gt;<a class="code" href="structsubtree.html#m14">next</a>;
00990 
00991    <font class="keywordflow">if</font> ( myptr == NULL )
00992         <font class="keywordflow">return</font> NULL;
00993    <font class="keywordflow">else</font>
00994         <font class="keywordflow">return</font> myptr-&gt;<a class="code" href="structsubtree.html#m10">session</a>;
00995 }
</pre></div>    </td>
  </tr>
</table>
<a name="a17" doxytag="agent_registry.c::get_top_context_cache"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> <a class="el" href="agent__registry_8h.html#a31">subtree_context_cache</a>* get_top_context_cache </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>void&nbsp;</td>
          <td class="mdname1">&nbsp;          </td>
          <td class="md">)&nbsp;</td>
          <td class="md"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00069">69</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00069                                                    {
00070     <font class="keywordflow">return</font> <a class="code" href="agent__registry_8c.html#a1">context_subtrees</a>;
00071 }
</pre></div>    </td>
  </tr>
</table>
<a name="a39" doxytag="agent_registry.c::in_a_view"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> int in_a_view </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>oid *&nbsp;</td>
          <td class="mdname">&nbsp; <em>name</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>size_t *&nbsp;</td>
          <td class="mdname">&nbsp; <em>namelen</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>struct snmp_pdu *&nbsp;</td>
          <td class="mdname">&nbsp; <em>pdu</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname">&nbsp; <em>type</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00831">831</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00835 {
00836 
00837   <font class="keyword">struct </font><a class="code" href="structview__parameters.html">view_parameters</a> view_parms;
00838   view_parms.<a class="code" href="structview__parameters.html#m0">pdu</a> = pdu;
00839   view_parms.<a class="code" href="structview__parameters.html#m1">name</a> = name;
00840   <font class="keywordflow">if</font> (namelen)
00841       view_parms.<a class="code" href="structview__parameters.html#m2">namelen</a> = *namelen;
00842   <font class="keywordflow">else</font>
00843       view_parms.<a class="code" href="structview__parameters.html#m2">namelen</a> = 0;
00844   view_parms.<a class="code" href="structview__parameters.html#m3">errorcode</a> = 0;
00845 
00846   <font class="keywordflow">if</font> (pdu-&gt;flags &amp; UCD_MSG_FLAG_ALWAYS_IN_VIEW)
00847     <font class="keywordflow">return</font> VACM_SUCCESS; <font class="comment">/* Enable bypassing of view-based access control */</font>
00848 
00849   <font class="comment">/* check for v1 and counter64s, since snmpv1 doesn't support it */</font>
00850   <font class="keywordflow">if</font> (pdu-&gt;version == SNMP_VERSION_1 &amp;&amp; type == ASN_COUNTER64)
00851     <font class="keywordflow">return</font> VACM_NOTINVIEW;
00852   <font class="keywordflow">switch</font> (pdu-&gt;version) {
00853   <font class="keywordflow">case</font> SNMP_VERSION_1:
00854   <font class="keywordflow">case</font> SNMP_VERSION_2c:
00855   <font class="keywordflow">case</font> SNMP_VERSION_3:
00856     snmp_call_callbacks(SNMP_CALLBACK_APPLICATION, <a class="code" href="agent__callbacks_8h.html#a0">SNMPD_CALLBACK_ACM_CHECK</a>,
00857                         &amp;view_parms);
00858     <font class="keywordflow">return</font> view_parms.<a class="code" href="structview__parameters.html#m3">errorcode</a>;
00859   }
00860   <font class="keywordflow">return</font> VACM_NOSECNAME;
00861 }
</pre></div>    </td>
  </tr>
</table>
<a name="a23" doxytag="agent_registry.c::load_subtree"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> int load_subtree </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>struct <a class="el" href="structsubtree.html">subtree</a> *&nbsp;</td>
          <td class="mdname">&nbsp; <em>new_sub</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>const char *&nbsp;</td>
          <td class="mdname">&nbsp; <em>context_name</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00203">203</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.
<p>
Referenced by <a class="el" href="agent__registry_8c-source.html#l00355">register_mib_context2</a>(), and <a class="el" href="agent__registry_8c-source.html#l00578">register_mib_table_row</a>().
<p>
<div class="fragment"><pre>00204 {
00205     <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *tree1, *tree2, *new2;
00206     <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *prev, *next;
00207     <font class="keywordtype">int</font> res;
00208 
00209     <font class="keywordflow">if</font> ( new_sub == NULL )
00210         <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a0">MIB_REGISTERED_OK</a>;       <font class="comment">/* Degenerate case */</font>
00211 
00212                 <font class="comment">/*</font>
00213                  * Find the subtree that contains the start of 
00214                  *  the new subtree (if any)...
00215                  */
00216     tree1 = <a class="code" href="agent__registry_8h.html#a33">find_subtree</a>( new_sub-&gt;<a class="code" href="structsubtree.html#m2">start</a>, new_sub-&gt;<a class="code" href="structsubtree.html#m3">start_len</a>, NULL,
00217                           context_name );
00218                 <font class="comment">/*</font>
00219                  * ...and the subtree that follows the new one
00220                  *      (NULL implies this is the final region covered)
00221                  */  
00222     <font class="keywordflow">if</font> ( tree1 == NULL )
00223         tree2 = <a class="code" href="agent__registry_8h.html#a34">find_subtree_next</a>( new_sub-&gt;<a class="code" href="structsubtree.html#m2">start</a>, new_sub-&gt;<a class="code" href="structsubtree.html#m3">start_len</a>, NULL,
00224                                    context_name);
00225     <font class="keywordflow">else</font>
00226         tree2 = tree1-&gt;<a class="code" href="structsubtree.html#m14">next</a>;
00227 
00228 
00229         <font class="comment">/*</font>
00230          * Handle new subtrees that start in virgin territory.
00231          */
00232     <font class="keywordflow">if</font> ( tree1 == NULL ) {
00233         new2 = NULL;
00234                 <font class="comment">/* Is there any overlap with later subtrees ? */</font>
00235         <font class="keywordflow">if</font> ( tree2 &amp;&amp; snmp_oid_compare( new_sub-&gt;<a class="code" href="structsubtree.html#m4">end</a>, new_sub-&gt;<a class="code" href="structsubtree.html#m5">end_len</a>,
00236                                         tree2-&gt;<a class="code" href="structsubtree.html#m2">start</a>, tree2-&gt;<a class="code" href="structsubtree.html#m3">start_len</a> ) &gt; 0 )
00237             new2 = <a class="code" href="agent__registry_8c.html#a22">split_subtree</a>( new_sub, tree2-&gt;<a class="code" href="structsubtree.html#m2">start</a>, tree2-&gt;<a class="code" href="structsubtree.html#m3">start_len</a> );
00238                 <font class="comment">/*</font>
00239                  * Link the new subtree (less any overlapping region)
00240                  *  with the list of existing registrations
00241                  */
00242         <font class="keywordflow">if</font> ( tree2 ) {
00243             new_sub-&gt;<a class="code" href="structsubtree.html#m15">prev</a> = tree2-&gt;<a class="code" href="structsubtree.html#m15">prev</a>;
00244             tree2-&gt;<a class="code" href="structsubtree.html#m15">prev</a>       = new_sub;
00245         }
00246         <font class="keywordflow">else</font>
00247             new_sub-&gt;<a class="code" href="structsubtree.html#m15">prev</a> = <a class="code" href="agent__registry_8h.html#a35">find_subtree_previous</a>( new_sub-&gt;<a class="code" href="structsubtree.html#m2">start</a>, new_sub-&gt;<a class="code" href="structsubtree.html#m3">start_len</a>, NULL, context_name );
00248 
00249         <font class="keywordflow">if</font> ( new_sub-&gt;<a class="code" href="structsubtree.html#m15">prev</a> )
00250             new_sub-&gt;<a class="code" href="structsubtree.html#m15">prev</a>-&gt;<a class="code" href="structsubtree.html#m14">next</a> = new_sub;
00251         <font class="keywordflow">else</font>
00252             <a class="code" href="agent__registry_8c.html#a20">replace_first_subtree</a>(new_sub, context_name);
00253 
00254         new_sub-&gt;<a class="code" href="structsubtree.html#m14">next</a>     = tree2;
00255 
00256                 <font class="comment">/*</font>
00257                  * If there was any overlap,
00258                  *  recurse to merge in the overlapping region
00259                  *  (including anything that may follow the overlap)
00260                  */
00261         <font class="keywordflow">if</font> ( new2 )
00262             <font class="keywordflow">return</font> <a class="code" href="agent__registry_8c.html#a23">load_subtree</a>( new2, context_name );
00263     }
00264 
00265     <font class="keywordflow">else</font> {
00266         <font class="comment">/*</font>
00267          *  If the new subtree starts *within* an existing registration
00268          *    (rather than at the same point as it), then split the
00269          *    existing subtree at this point.
00270          */
00271         <font class="keywordflow">if</font> ( snmp_oid_compare( new_sub-&gt;<a class="code" href="structsubtree.html#m2">start</a>, new_sub-&gt;<a class="code" href="structsubtree.html#m3">start_len</a>, 
00272                                tree1-&gt;<a class="code" href="structsubtree.html#m2">start</a>,   tree1-&gt;<a class="code" href="structsubtree.html#m3">start_len</a>) != 0 )
00273             tree1 = <a class="code" href="agent__registry_8c.html#a22">split_subtree</a>( tree1, new_sub-&gt;<a class="code" href="structsubtree.html#m2">start</a>, new_sub-&gt;<a class="code" href="structsubtree.html#m3">start_len</a>);
00274             <font class="keywordflow">if</font> ( tree1 == NULL )
00275                 <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a2">MIB_REGISTRATION_FAILED</a>;
00276 
00277         <font class="comment">/*  Now consider the end of this existing subtree:</font>
00278          *      If it matches the new subtree precisely,
00279          *        simply merge the new one into the list of children
00280          *      If it includes the whole of the new subtree,
00281          *        split it at the appropriate point, and merge again
00282          *
00283          *      If the new subtree extends beyond this existing region,
00284          *        split it, and recurse to merge the two parts.
00285          */
00286 
00287          <font class="keywordflow">switch</font> ( snmp_oid_compare( new_sub-&gt;<a class="code" href="structsubtree.html#m4">end</a>, new_sub-&gt;<a class="code" href="structsubtree.html#m5">end_len</a>, 
00288                                     tree1-&gt;<a class="code" href="structsubtree.html#m4">end</a>,   tree1-&gt;<a class="code" href="structsubtree.html#m5">end_len</a>))<font class="keyword">  </font>{
00289 
00290                 <font class="keywordflow">case</font> -1:        <font class="comment">/* Existing subtree contains new one */</font>
00291                         (void) <a class="code" href="agent__registry_8c.html#a22">split_subtree</a>( tree1,
00292                                         new_sub-&gt;<a class="code" href="structsubtree.html#m4">end</a>, new_sub-&gt;<a class="code" href="structsubtree.html#m5">end_len</a>);
00293                         <font class="comment">/* Fall Through */</font>
00294 
00295                 <font class="keywordflow">case</font>  0:        <font class="comment">/* The two trees match precisely */</font>
00296                         <font class="comment">/*</font>
00297                          * Note: This is the only point where the original
00298                          *       registration OID ("name") is used
00299                          */
00300                         prev = NULL;
00301                         next = tree1;
00302                         <font class="keywordflow">while</font> ( next &amp;&amp; next-&gt;<a class="code" href="structsubtree.html#m1">namelen</a> &gt; new_sub-&gt;<a class="code" href="structsubtree.html#m1">namelen</a> ) {
00303                                 prev = next;
00304                                 next = next-&gt;<a class="code" href="structsubtree.html#m16">children</a>;
00305                         }
00306                         <font class="keywordflow">while</font> ( next &amp;&amp; next-&gt;<a class="code" href="structsubtree.html#m1">namelen</a> == new_sub-&gt;<a class="code" href="structsubtree.html#m1">namelen</a> &amp;&amp;
00307                                         next-&gt;<a class="code" href="structsubtree.html#m12">priority</a> &lt; new_sub-&gt;<a class="code" href="structsubtree.html#m12">priority</a> ) {
00308                                 prev = next;
00309                                 next = next-&gt;<a class="code" href="structsubtree.html#m16">children</a>;
00310                         }
00311                         <font class="keywordflow">if</font> ( next &amp;&amp;    next-&gt;<a class="code" href="structsubtree.html#m1">namelen</a>  == new_sub-&gt;<a class="code" href="structsubtree.html#m1">namelen</a> &amp;&amp;
00312                                         next-&gt;<a class="code" href="structsubtree.html#m12">priority</a> == new_sub-&gt;<a class="code" href="structsubtree.html#m12">priority</a> )
00313                            <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a1">MIB_DUPLICATE_REGISTRATION</a>;
00314 
00315                         <font class="keywordflow">if</font> ( prev ) {
00316                             new_sub-&gt;<a class="code" href="structsubtree.html#m16">children</a> = next;
00317                             prev-&gt;<a class="code" href="structsubtree.html#m16">children</a>    = new_sub;
00318                             new_sub-&gt;<a class="code" href="structsubtree.html#m15">prev</a> = prev-&gt;<a class="code" href="structsubtree.html#m15">prev</a>;
00319                             new_sub-&gt;<a class="code" href="structsubtree.html#m14">next</a> = prev-&gt;<a class="code" href="structsubtree.html#m14">next</a>;
00320                         }
00321                         <font class="keywordflow">else</font> {
00322                             new_sub-&gt;<a class="code" href="structsubtree.html#m16">children</a> = next;
00323                             new_sub-&gt;<a class="code" href="structsubtree.html#m15">prev</a> = next-&gt;<a class="code" href="structsubtree.html#m15">prev</a>;
00324                             new_sub-&gt;<a class="code" href="structsubtree.html#m14">next</a> = next-&gt;<a class="code" href="structsubtree.html#m14">next</a>;
00325 
00326                             <font class="keywordflow">for</font> ( next = new_sub-&gt;<a class="code" href="structsubtree.html#m14">next</a> ;
00327                                   next != NULL ;
00328                                   next = next-&gt;<a class="code" href="structsubtree.html#m16">children</a> )
00329                                         next-&gt;<a class="code" href="structsubtree.html#m15">prev</a> = new_sub;
00330 
00331                             <font class="keywordflow">for</font> ( prev = new_sub-&gt;<a class="code" href="structsubtree.html#m15">prev</a> ;
00332                                   prev != NULL ;
00333                                   prev = prev-&gt;<a class="code" href="structsubtree.html#m16">children</a> )
00334                                         prev-&gt;<a class="code" href="structsubtree.html#m14">next</a> = new_sub;
00335                         }
00336                         <font class="keywordflow">break</font>;
00337 
00338                 <font class="keywordflow">case</font>  1:        <font class="comment">/* New subtree contains the existing one */</font>
00339                         new2 = <a class="code" href="agent__registry_8c.html#a22">split_subtree</a>( new_sub,
00340                                         tree1-&gt;<a class="code" href="structsubtree.html#m4">end</a>, tree1-&gt;<a class="code" href="structsubtree.html#m5">end_len</a>);
00341                         res = <a class="code" href="agent__registry_8c.html#a23">load_subtree</a>( new_sub, context_name );
00342                         <font class="keywordflow">if</font> ( res != <a class="code" href="agent__registry_8h.html#a0">MIB_REGISTERED_OK</a> ) {
00343                             <a class="code" href="agent__registry_8h.html#a47">free_subtree</a>(new2);
00344                             <font class="keywordflow">return</font> res;
00345                         }
00346                         <font class="keywordflow">return</font> <a class="code" href="agent__registry_8c.html#a23">load_subtree</a>( new2, context_name );
00347 
00348          }
00349 
00350     }
00351     <font class="keywordflow">return</font> 0;
00352 }
</pre></div>    </td>
  </tr>
</table>
<a name="a51" doxytag="agent_registry.c::register_exceptfd"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> int register_exceptfd </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname">&nbsp; <em>fd</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>void(*&nbsp;</td>
          <td class="mdname">&nbsp; <em>func</em>)(int, void *), </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>void *&nbsp;</td>
          <td class="mdname">&nbsp; <em>data</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l01097">1097</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>01097                                                                      {
01098     <font class="keywordflow">if</font> (external_exceptfdlen &lt; <a class="code" href="agent__registry_8h.html#a8">NUM_EXTERNAL_FDS</a>) {
01099         external_exceptfd[external_exceptfdlen] = fd;
01100         external_exceptfdfunc[external_exceptfdlen] = func;
01101         external_exceptfd_data[external_exceptfdlen] = data;
01102         external_exceptfdlen++;
01103         DEBUGMSGTL((<font class="stringliteral">"register_exceptfd"</font>, <font class="stringliteral">"registered fd %d\n"</font>, fd));
01104         <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a9">FD_REGISTERED_OK</a>;
01105     } <font class="keywordflow">else</font> {
01106         snmp_log(LOG_CRIT, <font class="stringliteral">"register_exceptfd: too many file descriptors\n"</font>);
01107         <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a10">FD_REGISTRATION_FAILED</a>;
01108     }
01109 }
</pre></div>    </td>
  </tr>
</table>
<a name="a30" doxytag="agent_registry.c::register_mib"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> int register_mib </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>const char *&nbsp;</td>
          <td class="mdname">&nbsp; <em>moduleName</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>struct <a class="el" href="structvariable.html">variable</a> *&nbsp;</td>
          <td class="mdname">&nbsp; <em>var</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname">&nbsp; <em>varsize</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname">&nbsp; <em>numvars</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>oid *&nbsp;</td>
          <td class="mdname">&nbsp; <em>mibloc</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname">&nbsp; <em>mibloclen</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00565">565</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00571 {
00572   <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a38">register_mib_priority</a>( moduleName, var, varsize, numvars,
00573                                 mibloc, mibloclen, <a class="code" href="agent__registry_8h.html#a6">DEFAULT_MIB_PRIORITY</a> );
00574 }
</pre></div>    </td>
  </tr>
</table>
<a name="a25" doxytag="agent_registry.c::register_mib_context"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> int register_mib_context </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>const char *&nbsp;</td>
          <td class="mdname">&nbsp; <em>moduleName</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>struct <a class="el" href="structvariable.html">variable</a> *&nbsp;</td>
          <td class="mdname">&nbsp; <em>var</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname">&nbsp; <em>varsize</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname">&nbsp; <em>numvars</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>oid *&nbsp;</td>
          <td class="mdname">&nbsp; <em>mibloc</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname">&nbsp; <em>mibloclen</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname">&nbsp; <em>priority</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname">&nbsp; <em>range_subid</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>oid&nbsp;</td>
          <td class="mdname">&nbsp; <em>range_ubound</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>struct snmp_session *&nbsp;</td>
          <td class="mdname">&nbsp; <em>ss</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>const char *&nbsp;</td>
          <td class="mdname">&nbsp; <em>context</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname">&nbsp; <em>timeout</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname">&nbsp; <em>flags</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00481">481</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.<div class="fragment"><pre>00493                                 {
00494     <font class="keywordflow">return</font> <a class="code" href="old__api_8h.html#a4">register_old_api</a>(moduleName, var, varsize, numvars, mibloc,
00495                             mibloclen, priority,
00496                             range_subid, range_ubound,
00497                             ss, context, timeout, flags);
00498 }
</pre></div>    </td>
  </tr>
</table>
<a name="a24" doxytag="agent_registry.c::register_mib_context2"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
  <tr>
    <td class="md">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top"> int register_mib_context2 </td>
          <td class="md">(&nbsp;</td>
          <td class="md" nowrap>const char *&nbsp;</td>
          <td class="mdname">&nbsp; <em>moduleName</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>struct <a class="el" href="structvariable.html">variable</a> *&nbsp;</td>
          <td class="mdname">&nbsp; <em>var</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname">&nbsp; <em>varsize</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname">&nbsp; <em>numvars</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>oid *&nbsp;</td>
          <td class="mdname">&nbsp; <em>mibloc</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname">&nbsp; <em>mibloclen</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname">&nbsp; <em>priority</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname">&nbsp; <em>range_subid</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>oid&nbsp;</td>
          <td class="mdname">&nbsp; <em>range_ubound</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>struct snmp_session *&nbsp;</td>
          <td class="mdname">&nbsp; <em>ss</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>const char *&nbsp;</td>
          <td class="mdname">&nbsp; <em>context</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname">&nbsp; <em>timeout</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname">&nbsp; <em>flags</em>, </td>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td class="md" nowrap><a class="el" href="helpers_2agent__handler_8h.html#a9">handler_registration</a> *&nbsp;</td>
          <td class="mdname">&nbsp; <em>reginfo</em></td>
        </tr>
        <tr>
          <td></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>

      </table>
    </td>
  </tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>

<p>
Definition at line <a class="el" href="agent__registry_8c-source.html#l00355">355</a> of file <a class="el" href="agent__registry_8c-source.html">agent_registry.c</a>.
<p>
Referenced by <a class="el" href="agent__handler_8c-source.html#l00020">register_handler</a>().
<p>
<div class="fragment"><pre>00369 {
00370   <font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *subtree, *sub2;
00371   <font class="keywordtype">int</font> res, i;
00372   <font class="keyword">struct </font><a class="code" href="structregister__parameters.html">register_parameters</a> reg_parms;
00373   
00374   <a class="code" href="structsubtree.html">subtree</a> = (<font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *) malloc(sizeof(struct subtree));
00375   <font class="keywordflow">if</font> (<a class="code" href="structsubtree.html">subtree</a> == NULL) {
00376     <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a2">MIB_REGISTRATION_FAILED</a>;
00377   }
00378   memset(<a class="code" href="structsubtree.html">subtree</a>, 0, <font class="keyword">sizeof</font>(<font class="keyword">struct</font> <a class="code" href="structsubtree.html">subtree</a>));
00379 
00380   DEBUGMSGTL((<font class="stringliteral">"register_mib"</font>, <font class="stringliteral">"registering \"%s\" at "</font>, moduleName));
00381   DEBUGMSGOID((<font class="stringliteral">"register_mib"</font>, mibloc, mibloclen));
00382   DEBUGMSG((<font class="stringliteral">"register_mib"</font>,<font class="stringliteral">"\n"</font>));
00383     
00384         <font class="comment">/*</font>
00385          * Create the new subtree node being registered
00386          */
00387   memcpy(subtree-&gt;<a class="code" href="structsubtree.html#m0">name</a>, mibloc, mibloclen*<font class="keyword">sizeof</font>(oid));
00388   <a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m1">namelen</a> = (u_char) mibloclen;
00389   memcpy(subtree-&gt;<a class="code" href="structsubtree.html#m2">start</a>, mibloc, mibloclen*<font class="keyword">sizeof</font>(oid));
00390   <a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m3">start_len</a> = (u_char) mibloclen;
00391   memcpy(subtree-&gt;<a class="code" href="structsubtree.html#m4">end</a>, mibloc, mibloclen*<font class="keyword">sizeof</font>(oid));
00392   <a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m4">end</a>[ mibloclen-1 ]++;        <font class="comment">/* XXX - or use 'variables' info ? */</font>
00393   <a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m5">end_len</a> = (u_char) mibloclen;
00394   memcpy(subtree-&gt;<a class="code" href="structsubtree.html#m9">label</a>, moduleName, strlen(moduleName)+1);
00395   <font class="keywordflow">if</font> (var) {
00396     <a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m6">variables</a> = (<font class="keyword">struct </font><a class="code" href="structvariable.html">variable</a> *) malloc(varsize*numvars);
00397     <font class="keywordflow">if</font> (<a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m6">variables</a> == NULL) {
00398       free(<a class="code" href="structsubtree.html">subtree</a>);
00399       <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a2">MIB_REGISTRATION_FAILED</a>;
00400     }
00401     memcpy(subtree-&gt;<a class="code" href="structsubtree.html#m6">variables</a>, var, numvars*varsize);
00402     <a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m7">variables_len</a> = numvars;
00403     <a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m8">variables_width</a> = varsize;
00404   }
00405   <a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m12">priority</a> = priority;
00406   <a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m13">timeout</a>  = timeout;
00407   <a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m17">range_subid</a> = range_subid;
00408   <a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m18">range_ubound</a> = range_ubound;
00409   <a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m10">session</a> = ss;
00410   <a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m19">reginfo</a> = reginfo;
00411   <a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m11">flags</a> = (u_char)flags;  <font class="comment">/* used to identify instance oids */</font>
00412   <a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m20">cacheid</a> = -1;
00413   res = <a class="code" href="agent__registry_8c.html#a23">load_subtree</a>(<a class="code" href="structsubtree.html">subtree</a>, context);
00414 
00415         <font class="comment">/*</font>
00416          * If registering a range,
00417          *   use the first subtree as a template
00418          *   for the rest of the range
00419          */
00420   <font class="keywordflow">if</font> (( res == <a class="code" href="agent__registry_8h.html#a0">MIB_REGISTERED_OK</a> ) &amp;&amp; ( range_subid != 0 )) {
00421     <font class="keywordflow">for</font> ( i = mibloc[range_subid-1] +1 ; i &lt;= (int)range_ubound ; i++ ) {
00422         sub2 = (<font class="keyword">struct </font><a class="code" href="structsubtree.html">subtree</a> *) malloc(sizeof(struct subtree));
00423 
00424         <font class="keywordflow">if</font> (sub2 == NULL) {
00425             <a class="code" href="agent__registry_8h.html#a45">unregister_mib_context</a>(mibloc, mibloclen, priority,
00426                                    range_subid, range_ubound, context);
00427             <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a2">MIB_REGISTRATION_FAILED</a>;
00428         }
00429 
00430         memcpy(sub2, <a class="code" href="structsubtree.html">subtree</a>, <font class="keyword">sizeof</font>(<font class="keyword">struct</font> <a class="code" href="structsubtree.html">subtree</a>));
00431 
00432         <font class="comment">/*  Note: have to deep-copy sub2-&gt;variables, otherwise it will</font>
00433             be free()d more than once.  This is kind of inefficient.  */
00434         
00435         <font class="keywordflow">if</font> (<a class="code" href="structsubtree.html">subtree</a>-&gt;<a class="code" href="structsubtree.html#m6">variables</a> != NULL) {
00436           sub2-&gt;<a class="code" href="structsubtree.html#m6">variables</a> = (<font class="keyword">struct </font><a class="code" href="structvariable.html">variable</a> *)malloc(varsize * numvars);
00437           <font class="keywordflow">if</font> (sub2-&gt;<a class="code" href="structsubtree.html#m6">variables</a> == NULL) {
00438             free(sub2);
00439             <a class="code" href="agent__registry_8h.html#a45">unregister_mib_context</a>(mibloc, mibloclen, priority,
00440                                    range_subid, range_ubound, context);
00441             <font class="keywordflow">return</font> <a class="code" href="agent__registry_8h.html#a2">MIB_REGISTRATION_FAILED</a>;
00442           }
00443 
00444           memcpy(sub2-&gt;<a class="code" href="structsubtree.html#m6">variables</a>, var, numvars * varsize);
00445         }
00446         
00447         sub2-&gt;<a class="code" href="structsubtree.html#m0">name</a>[range_subid-1] = i;
00448         sub2-&gt;<a class="code" href="structsubtree.html#m2">start</a>[range_subid-1] = i;
00449         sub2-&gt;<a class="code" href="structsubtree.html#m4">end</a>[  range_subid-1] = i;         <font class="comment">/* XXX - ???? */</font>
00450         res = <a class="code" href="agent__registry_8c.html#a23">load_subtree</a>(sub2, context);
00451         <font class="keywordflow">if</font> (res != <a class="code" href="agent__registry_8h.html#a0">MIB_REGISTERED_OK</a>) {
00452             <a