Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 550bbe86d83a7870fdddc73c68e5d2b2 > files > 446

libunbound-devel-1.3.4-1mdv2010.0.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>unbound: winrc/win_svc.c File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.9 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="dirs.html"><span>Directories</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
  <div class="navpath"><a class="el" href="dir_6ddbd83ded91923648db8c933be08f55.html">winrc</a>
  </div>
</div>
<div class="contents">
<h1>win_svc.c File Reference</h1>This file contains functions to integrate with the windows services API.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;config.h&quot;</code><br>
<code>#include &quot;<a class="el" href="win__svc_8h.html">winrc/win_svc.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="w__inst_8h.html">winrc/w_inst.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="daemon_8h.html">daemon/daemon.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="worker_8h.html">daemon/worker.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="remote_8h.html">daemon/remote.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="config__file_8h.html">util/config_file.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="netevent_8h.html">util/netevent.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="winsock__event_8h.html">util/winsock_event.h</a>&quot;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#98f7d862814ea8b21f6cca0e53dd2069">report_status</a> (DWORD state, DWORD exitcode, DWORD wait)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Report current service status to service control manager.  <a href="#98f7d862814ea8b21f6cca0e53dd2069"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#36164b9a4f6be5d0070f59950fde0611">hdlr</a> (DWORD ctrl)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Service control handler.  <a href="#36164b9a4f6be5d0070f59950fde0611"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#220450051cac7d7ac31c4c4ae27a9883">reportev</a> (const char *str)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">report event to system event log For use during startup and shutdown.  <a href="#220450051cac7d7ac31c4c4ae27a9883"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#09f9a9a000a4ca5768b62b2271a6936e">lookup_reg_str</a> (const char *key, const char *name)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Obtain registry string (if it exists).  <a href="#09f9a9a000a4ca5768b62b2271a6936e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#97b746a13df0bc70c7fcbcb351be188e">lookup_reg_int</a> (const char *key, const char *name)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Obtain registry integer (if it exists).  <a href="#97b746a13df0bc70c7fcbcb351be188e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#25859e3441dfb0d9200a49292927050f">service_init</a> (int r, struct <a class="el" href="structdaemon.html">daemon</a> **d, struct <a class="el" href="structconfig__file.html">config_file</a> **c)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Init service.  <a href="#25859e3441dfb0d9200a49292927050f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fe62958ce5f6c83f84f902e4c5b0b608"></a><!-- doxytag: member="win_svc.c::service_deinit" ref="fe62958ce5f6c83f84f902e4c5b0b608" args="(struct daemon *daemon, struct config_file *cfg)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#fe62958ce5f6c83f84f902e4c5b0b608">service_deinit</a> (struct <a class="el" href="structdaemon.html">daemon</a> *<a class="el" href="structdaemon.html">daemon</a>, struct <a class="el" href="structconfig__file.html">config_file</a> *cfg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Deinit the service. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#d390ca1e73b2ce7dc20776fc40659be0">service_main</a> (DWORD argc, LPTSTR *argv)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The main function for the service.  <a href="#d390ca1e73b2ce7dc20776fc40659be0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="06a86b50678511e817b05bdbb48ce501"></a><!-- doxytag: member="win_svc.c::service_start" ref="06a86b50678511e817b05bdbb48ce501" args="(const char *cfgfile, int v, int c)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#06a86b50678511e817b05bdbb48ce501">service_start</a> (const char *<a class="el" href="testbound_8c.html#90e3838491a7b92fdb154c9026326af5">cfgfile</a>, int v, int c)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">start the service <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#18d9e4c0c8d426dc4e754f74c0a82223">wsvc_command_option</a> (const char *wopt, const char *<a class="el" href="testbound_8c.html#90e3838491a7b92fdb154c9026326af5">cfgfile</a>, int v, int c)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Handle commandline service for windows.  <a href="#18d9e4c0c8d426dc4e754f74c0a82223"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3e10ce687063b9f777888bd9a9d8a9cf"></a><!-- doxytag: member="win_svc.c::worker_win_stop_cb" ref="3e10ce687063b9f777888bd9a9d8a9cf" args="(int fd, short ev, void *arg)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#3e10ce687063b9f777888bd9a9d8a9cf">worker_win_stop_cb</a> (int fd, short ev, void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">windows <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> stop event callback handler <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c56fc8a65087ea1ae5a67f42435c1098"></a><!-- doxytag: member="win_svc.c::waitforit" ref="c56fc8a65087ea1ae5a67f42435c1098" args="(PROCESS_INFORMATION *pinfo)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#c56fc8a65087ea1ae5a67f42435c1098">waitforit</a> (PROCESS_INFORMATION *pinfo)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">wait for cron process to finish <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0d593b7dc56cf542cefb1b61d4d295ad"></a><!-- doxytag: member="win_svc.c::win_do_cron" ref="0d593b7dc56cf542cefb1b61d4d295ad" args="(void *arg)" -->
static void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#0d593b7dc56cf542cefb1b61d4d295ad">win_do_cron</a> (void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Do the cron action and wait for result exit value. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d20b5a982926f8b8d046224bacb3ec71"></a><!-- doxytag: member="win_svc.c::set_cron_timer" ref="d20b5a982926f8b8d046224bacb3ec71" args="()" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#d20b5a982926f8b8d046224bacb3ec71">set_cron_timer</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the timer for cron for the next wake up. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c30c93ae8a66caf6df38ee90ed60b8d2"></a><!-- doxytag: member="win_svc.c::wsvc_cron_cb" ref="c30c93ae8a66caf6df38ee90ed60b8d2" args="(void *arg)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#c30c93ae8a66caf6df38ee90ed60b8d2">wsvc_cron_cb</a> (void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">windows cron timer callback handler <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#44cab70a179721bf70e52c0379c7d4dc">wsvc_setup_worker</a> (struct <a class="el" href="structworker.html">worker</a> *<a class="el" href="structworker.html">worker</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Setup lead <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> events.  <a href="#44cab70a179721bf70e52c0379c7d4dc"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#1aa589fcc756d3f05201e0f490d4a736">wsvc_desetup_worker</a> (struct <a class="el" href="structworker.html">worker</a> *<a class="el" href="structworker.html">worker</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Desetup lead <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> events.  <a href="#1aa589fcc756d3f05201e0f490d4a736"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2115ece140c576fd96593de9ae38c997"></a><!-- doxytag: member="win_svc.c::service_status" ref="2115ece140c576fd96593de9ae38c997" args="" -->
static SERVICE_STATUS&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#2115ece140c576fd96593de9ae38c997">service_status</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">global service status <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="adb211bf9912de399d34173a83f5cc8d"></a><!-- doxytag: member="win_svc.c::service_status_handle" ref="adb211bf9912de399d34173a83f5cc8d" args="" -->
static SERVICE_STATUS_HANDLE&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#adb211bf9912de399d34173a83f5cc8d">service_status_handle</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">global service status handle <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1352adf39f788fde1e9b5ce3283bd9d7"></a><!-- doxytag: member="win_svc.c::service_stop_event" ref="1352adf39f788fde1e9b5ce3283bd9d7" args="" -->
static WSAEVENT&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#1352adf39f788fde1e9b5ce3283bd9d7">service_stop_event</a> = NULL</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">global service stop event <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b1abb6f927dc1d7e108535662484d0c3"></a><!-- doxytag: member="win_svc.c::service_stop_ev" ref="b1abb6f927dc1d7e108535662484d0c3" args="" -->
static struct event&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#b1abb6f927dc1d7e108535662484d0c3">service_stop_ev</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">event struct for stop callbacks <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5f69890b6673cba75a520463c9b90c66"></a><!-- doxytag: member="win_svc.c::service_stop_shutdown" ref="5f69890b6673cba75a520463c9b90c66" args="" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#5f69890b6673cba75a520463c9b90c66">service_stop_shutdown</a> = 0</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">if stop even means shutdown or restart <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#38da5bffc23f79ded830b1ec0ecf3b3f">service_cfgfile</a> = CONFIGFILE</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">config file to open.  <a href="#38da5bffc23f79ded830b1ec0ecf3b3f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#e00ed4ff5185c105893a9a673b509b23">service_cmdline_verbose</a> = 0</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">commandline verbosity.  <a href="#e00ed4ff5185c105893a9a673b509b23"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a316b38cdbec3137e42bacf3ea88ae9b"></a><!-- doxytag: member="win_svc.c::service_cron" ref="a316b38cdbec3137e42bacf3ea88ae9b" args="" -->
static struct <a class="el" href="structcomm__timer.html">comm_timer</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#a316b38cdbec3137e42bacf3ea88ae9b">service_cron</a> = NULL</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">the cron callback <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e713447ca83b1b4aa6bf6f241f39365b"></a><!-- doxytag: member="win_svc.c::cron_thread" ref="e713447ca83b1b4aa6bf6f241f39365b" args="" -->
static ub_thread_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#e713447ca83b1b4aa6bf6f241f39365b">cron_thread</a> = NULL</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">the cron thread <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="34fbff41957af5aa0736c8faa57b2618"></a><!-- doxytag: member="win_svc.c::cron_was_quick" ref="34fbff41957af5aa0736c8faa57b2618" args="" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="win__svc_8c.html#34fbff41957af5aa0736c8faa57b2618">cron_was_quick</a> = 0</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">if cron has already done its quick check <br></td></tr>
</table>
<hr><h2>Detailed Description</h2>
This file contains functions to integrate with the windows services API. 
<p>
This means it handles the commandline switches to install and remove the service (via CreateService and DeleteService), it handles the ServiceMain() main service <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> point when started as a service, and it handles the Handler[_ex]() to process requests to the service (such as start and stop and status). <hr><h2>Function Documentation</h2>
<a class="anchor" name="98f7d862814ea8b21f6cca0e53dd2069"></a><!-- doxytag: member="win_svc.c::report_status" ref="98f7d862814ea8b21f6cca0e53dd2069" args="(DWORD state, DWORD exitcode, DWORD wait)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void report_status           </td>
          <td>(</td>
          <td class="paramtype">DWORD&nbsp;</td>
          <td class="paramname"> <em>state</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">DWORD&nbsp;</td>
          <td class="paramname"> <em>exitcode</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">DWORD&nbsp;</td>
          <td class="paramname"> <em>wait</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Report current service status to service control manager. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>state,:</em>&nbsp;</td><td>current state </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>exitcode,:</em>&nbsp;</td><td>error code (when stopped) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>wait,:</em>&nbsp;</td><td><a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> operation estimated time in milliseconds. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="win__svc_8c_source.html#l00057">service_status</a>, and <a class="el" href="win__svc_8c_source.html#l00059">service_status_handle</a>.</p>

<p>Referenced by <a class="el" href="win__svc_8c_source.html#l00104">hdlr()</a>, <a class="el" href="win__svc_8c_source.html#l00243">service_init()</a>, and <a class="el" href="win__svc_8c_source.html#l00331">service_main()</a>.</p>

</div>
</div><p>
<a class="anchor" name="36164b9a4f6be5d0070f59950fde0611"></a><!-- doxytag: member="win_svc.c::hdlr" ref="36164b9a4f6be5d0070f59950fde0611" args="(DWORD ctrl)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void hdlr           </td>
          <td>(</td>
          <td class="paramtype">DWORD&nbsp;</td>
          <td class="paramname"> <em>ctrl</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Service control handler. 
<p>
Called by serviceControlManager when a control code is sent to the service (with ControlService). <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>ctrl,:</em>&nbsp;</td><td>control code </td></tr>
  </table>
</dl>

<p>References <a class="el" href="log_8c_source.html#l00241">log_err()</a>, <a class="el" href="win__svc_8c_source.html#l00083">report_status()</a>, <a class="el" href="win__svc_8c_source.html#l00057">service_status</a>, <a class="el" href="win__svc_8c_source.html#l00061">service_stop_event</a>, and <a class="el" href="win__svc_8c_source.html#l00065">service_stop_shutdown</a>.</p>

<p>Referenced by <a class="el" href="win__svc_8c_source.html#l00331">service_main()</a>.</p>

</div>
</div><p>
<a class="anchor" name="220450051cac7d7ac31c4c4ae27a9883"></a><!-- doxytag: member="win_svc.c::reportev" ref="220450051cac7d7ac31c4c4ae27a9883" args="(const char *str)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void reportev           </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>str</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
report event to system event log For use during startup and shutdown. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>str,:</em>&nbsp;</td><td>the error </td></tr>
  </table>
</dl>

<p>References <a class="el" href="win__svc_8h_source.html#l00061">MSG_GENERIC_ERR</a>, <a class="el" href="win__svc_8h_source.html#l00052">SERVICE_NAME</a>, and <a class="el" href="w__inst_8c_source.html#l00046">wsvc_err2str()</a>.</p>

<p>Referenced by <a class="el" href="win__svc_8c_source.html#l00198">lookup_reg_int()</a>, <a class="el" href="win__svc_8c_source.html#l00158">lookup_reg_str()</a>, <a class="el" href="win__svc_8c_source.html#l00331">service_main()</a>, and <a class="el" href="win__svc_8c_source.html#l00397">service_start()</a>.</p>

</div>
</div><p>
<a class="anchor" name="09f9a9a000a4ca5768b62b2271a6936e"></a><!-- doxytag: member="win_svc.c::lookup_reg_str" ref="09f9a9a000a4ca5768b62b2271a6936e" args="(const char *key, const char *name)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static char* lookup_reg_str           </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>key</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Obtain registry string (if it exists). 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>key,:</em>&nbsp;</td><td>key string </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name,:</em>&nbsp;</td><td>name of value to fetch. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>malloced string with the result or NULL if it did not exist on an error (logged) was encountered. </dd></dl>

<p>References <a class="el" href="win__svc_8c_source.html#l00127">reportev()</a>.</p>

<p>Referenced by <a class="el" href="win__svc_8c_source.html#l00243">service_init()</a>, and <a class="el" href="win__svc_8c_source.html#l00465">win_do_cron()</a>.</p>

</div>
</div><p>
<a class="anchor" name="97b746a13df0bc70c7fcbcb351be188e"></a><!-- doxytag: member="win_svc.c::lookup_reg_int" ref="97b746a13df0bc70c7fcbcb351be188e" args="(const char *key, const char *name)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int lookup_reg_int           </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>key</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Obtain registry integer (if it exists). 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>key,:</em>&nbsp;</td><td>key string </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name,:</em>&nbsp;</td><td>name of value to fetch. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>integer value (if it exists), or 0 on error. </dd></dl>

<p>References <a class="el" href="win__svc_8c_source.html#l00127">reportev()</a>.</p>

<p>Referenced by <a class="el" href="win__svc_8c_source.html#l00496">set_cron_timer()</a>.</p>

</div>
</div><p>
<a class="anchor" name="25859e3441dfb0d9200a49292927050f"></a><!-- doxytag: member="win_svc.c::service_init" ref="25859e3441dfb0d9200a49292927050f" args="(int r, struct daemon **d, struct config_file **c)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int service_init           </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structdaemon.html">daemon</a> **&nbsp;</td>
          <td class="paramname"> <em>d</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structconfig__file.html">config_file</a> **&nbsp;</td>
          <td class="paramname"> <em>c</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Init service. 
<p>
Keeps calling status <a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> to tell service control manager that this process is not hanging. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>r,:</em>&nbsp;</td><td>restart, true on restart </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>d,:</em>&nbsp;</td><td><a class="el" href="structdaemon.html" title="Structure holding worker list.">daemon</a> returned here. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>c,:</em>&nbsp;</td><td>config file returned here. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>false if failed. </dd></dl>

<p>References <a class="el" href="daemon_8h_source.html#l00070">daemon::chroot</a>, <a class="el" href="config__file_8h_source.html#l00162">config_file::chrootdir</a>, <a class="el" href="config__file_8c_source.html#l00069">config_create()</a>, <a class="el" href="config__file_8c_source.html#l00511">config_delete()</a>, <a class="el" href="config__file_8c_source.html#l00446">config_read()</a>, <a class="el" href="daemon_8c_source.html#l00512">daemon_apply_cfg()</a>, <a class="el" href="daemon_8c_source.html#l00475">daemon_delete()</a>, <a class="el" href="daemon_8c_source.html#l00147">daemon_init()</a>, <a class="el" href="daemon_8c_source.html#l00197">daemon_open_shared_ports()</a>, <a class="el" href="remote_8c_source.html#l00139">daemon_remote_create()</a>, <a class="el" href="config__file_8h_source.html#l00166">config_file::directory</a>, <a class="el" href="log_8c_source.html#l00267">fatal_exit()</a>, <a class="el" href="log_8c_source.html#l00241">log_err()</a>, <a class="el" href="log_8c_source.html#l00081">log_init()</a>, <a class="el" href="log_8c_source.html#l00254">log_warn()</a>, <a class="el" href="config__file_8h_source.html#l00168">config_file::logfile</a>, <a class="el" href="win__svc_8c_source.html#l00158">lookup_reg_str()</a>, <a class="el" href="daemon_8h_source.html#l00082">daemon::rc</a>, <a class="el" href="win__svc_8c_source.html#l00083">report_status()</a>, <a class="el" href="win__svc_8c_source.html#l00067">service_cfgfile</a>, <a class="el" href="win__svc_8c_source.html#l00069">service_cmdline_verbose</a>, <a class="el" href="config__file_8h_source.html#l00173">config_file::use_syslog</a>, <a class="el" href="log_8h_source.html#l00056">VERB_QUERY</a>, <a class="el" href="ldns-testpkts_8c.html#a557e5b23b2833d7c1ec0415a1bdd2b1">verbose()</a>, <a class="el" href="config__file_8h_source.html#l00054">config_file::verbosity</a>, and <a class="el" href="log_8c_source.html#l00062">verbosity</a>.</p>

<p>Referenced by <a class="el" href="win__svc_8c_source.html#l00331">service_main()</a>.</p>

</div>
</div><p>
<a class="anchor" name="d390ca1e73b2ce7dc20776fc40659be0"></a><!-- doxytag: member="win_svc.c::service_main" ref="d390ca1e73b2ce7dc20776fc40659be0" args="(DWORD argc, LPTSTR *argv)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void service_main           </td>
          <td>(</td>
          <td class="paramtype">DWORD&nbsp;</td>
          <td class="paramname"> <em>argc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">LPTSTR *&nbsp;</td>
          <td class="paramname"> <em>argv</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
The main function for the service. 
<p>
Called by the services API when starting unbound on windows in background. Arguments could have been present in the string 'path'. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>argc,:</em>&nbsp;</td><td>nr args </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>argv,:</em>&nbsp;</td><td>arg text. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="config__file_8c_source.html#l00511">config_delete()</a>, <a class="el" href="daemon_8c_source.html#l00448">daemon_cleanup()</a>, <a class="el" href="daemon_8c_source.html#l00397">daemon_fork()</a>, <a class="el" href="win__svc_8c_source.html#l00104">hdlr()</a>, <a class="el" href="log_8c_source.html#l00241">log_err()</a>, <a class="el" href="win__svc_8c_source.html#l00083">report_status()</a>, <a class="el" href="win__svc_8c_source.html#l00127">reportev()</a>, <a class="el" href="win__svc_8c_source.html#l00067">service_cfgfile</a>, <a class="el" href="win__svc_8c_source.html#l00316">service_deinit()</a>, <a class="el" href="win__svc_8c_source.html#l00243">service_init()</a>, <a class="el" href="win__svc_8h_source.html#l00052">SERVICE_NAME</a>, <a class="el" href="win__svc_8c_source.html#l00057">service_status</a>, <a class="el" href="win__svc_8c_source.html#l00059">service_status_handle</a>, <a class="el" href="win__svc_8c_source.html#l00061">service_stop_event</a>, <a class="el" href="win__svc_8c_source.html#l00065">service_stop_shutdown</a>, <a class="el" href="log_8h_source.html#l00058">VERB_ALGO</a>, <a class="el" href="log_8h_source.html#l00056">VERB_QUERY</a>, and <a class="el" href="ldns-testpkts_8c.html#a557e5b23b2833d7c1ec0415a1bdd2b1">verbose()</a>.</p>

<p>Referenced by <a class="el" href="win__svc_8c_source.html#l00397">service_start()</a>.</p>

</div>
</div><p>
<a class="anchor" name="18d9e4c0c8d426dc4e754f74c0a82223"></a><!-- doxytag: member="win_svc.c::wsvc_command_option" ref="18d9e4c0c8d426dc4e754f74c0a82223" args="(const char *wopt, const char *cfgfile, int v, int c)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void wsvc_command_option           </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>wopt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>cfgfile</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>v</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>c</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Handle commandline service for windows. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>wopt,:</em>&nbsp;</td><td>windows option string (install, remove, service). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>cfgfile,:</em>&nbsp;</td><td>configfile to open (default or passed with -c). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>v,:</em>&nbsp;</td><td>amount of commandline verbosity added with -v. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>c,:</em>&nbsp;</td><td>true if cfgfile was set by commandline -c option. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="log_8c_source.html#l00267">fatal_exit()</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="win__svc_8c_source.html#l00397">service_start()</a>, <a class="el" href="w__inst_8c_source.html#l00189">wsvc_install()</a>, and <a class="el" href="w__inst_8c_source.html#l00236">wsvc_remove()</a>.</p>

</div>
</div><p>
<a class="anchor" name="44cab70a179721bf70e52c0379c7d4dc"></a><!-- doxytag: member="win_svc.c::wsvc_setup_worker" ref="44cab70a179721bf70e52c0379c7d4dc" args="(struct worker *worker)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void wsvc_setup_worker           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structworker.html">worker</a> *&nbsp;</td>
          <td class="paramname"> <em>worker</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Setup lead <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> events. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a>,:</em>&nbsp;</td><td>the <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> </td></tr>
  </table>
</dl>

<p>References <a class="el" href="worker_8h_source.html#l00089">worker::base</a>, <a class="el" href="fake__event_8c_source.html#l01163">comm_base_internal()</a>, <a class="el" href="fake__event_8c_source.html#l01142">comm_timer_create()</a>, <a class="el" href="log_8c_source.html#l00267">fatal_exit()</a>, <a class="el" href="win__svc_8c_source.html#l00063">service_stop_ev</a>, <a class="el" href="win__svc_8c_source.html#l00061">service_stop_event</a>, <a class="el" href="win__svc_8c_source.html#l00496">set_cron_timer()</a>, <a class="el" href="win__svc_8c_source.html#l00434">worker_win_stop_cb()</a>, and <a class="el" href="win__svc_8c_source.html#l00513">wsvc_cron_cb()</a>.</p>

</div>
</div><p>
<a class="anchor" name="1aa589fcc756d3f05201e0f490d4a736"></a><!-- doxytag: member="win_svc.c::wsvc_desetup_worker" ref="1aa589fcc756d3f05201e0f490d4a736" args="(struct worker *worker)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void wsvc_desetup_worker           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structworker.html">worker</a> *&nbsp;</td>
          <td class="paramname"> <em>worker</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Desetup lead <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> events. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a>,:</em>&nbsp;</td><td>the <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> </td></tr>
  </table>
</dl>

<p>References <a class="el" href="fake__event_8c_source.html#l01158">comm_timer_delete()</a>.</p>

</div>
</div><p>
<hr><h2>Variable Documentation</h2>
<a class="anchor" name="38da5bffc23f79ded830b1ec0ecf3b3f"></a><!-- doxytag: member="win_svc.c::service_cfgfile" ref="38da5bffc23f79ded830b1ec0ecf3b3f" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">char* <a class="el" href="win__svc_8c.html#38da5bffc23f79ded830b1ec0ecf3b3f">service_cfgfile</a> = CONFIGFILE<code> [static]</code>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
config file to open. 
<p>
global communication to <a class="el" href="win__svc_8c.html#d390ca1e73b2ce7dc20776fc40659be0" title="The main function for the service.">service_main()</a> 
<p>Referenced by <a class="el" href="win__svc_8c_source.html#l00243">service_init()</a>, <a class="el" href="win__svc_8c_source.html#l00331">service_main()</a>, and <a class="el" href="win__svc_8c_source.html#l00397">service_start()</a>.</p>

</div>
</div><p>
<a class="anchor" name="e00ed4ff5185c105893a9a673b509b23"></a><!-- doxytag: member="win_svc.c::service_cmdline_verbose" ref="e00ed4ff5185c105893a9a673b509b23" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="win__svc_8c.html#e00ed4ff5185c105893a9a673b509b23">service_cmdline_verbose</a> = 0<code> [static]</code>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
commandline verbosity. 
<p>
global communication to <a class="el" href="win__svc_8c.html#d390ca1e73b2ce7dc20776fc40659be0" title="The main function for the service.">service_main()</a> 
<p>Referenced by <a class="el" href="win__svc_8c_source.html#l00243">service_init()</a>, and <a class="el" href="win__svc_8c_source.html#l00397">service_start()</a>.</p>

</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Tue Oct 13 06:46:33 2009 for unbound by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
</body>
</html>