Sophie

Sophie

distrib > Mageia > 4 > x86_64 > by-pkgid > 83ed8492cae4cb6bfb06db21e0f5f467 > files > 58

open-vm-tools-devel-9.4.0-1.mga4.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/>
<title>open-vm-tools 9.4.0: Debugging Tools Plugins</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">open-vm-tools 9.4.0
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">Debugging Tools Plugins</div>  </div>
</div><!--header-->
<div class="contents">

<p>Defines functions and interfaces for debugging Tools plugins.  
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRpcDebugRecvMapping.html">RpcDebugRecvMapping</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRpcDebugMsgMapping.html">RpcDebugMsgMapping</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRpcDebugMsgList.html">RpcDebugMsgList</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRpcDebugPlugin.html">RpcDebugPlugin</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRpcDebugLibData.html">RpcDebugLibData</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga67131b97f1a2b709a93e2db09c1651ef"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#ga67131b97f1a2b709a93e2db09c1651ef">RPCDEBUG_ASSERT</a>(test, retval)</td></tr>
<tr class="separator:ga67131b97f1a2b709a93e2db09c1651ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga2e1bbebb2ecb549bf1103839e005ce92"><td class="memItemLeft" align="right" valign="top">typedef gboolean(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#ga2e1bbebb2ecb549bf1103839e005ce92">RpcDebugRecvFn</a> )(char *data, size_t dataLen, char **result, size_t *resultLen)</td></tr>
<tr class="separator:ga2e1bbebb2ecb549bf1103839e005ce92"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga372dc4898a0263ba3530cc8f1564b709"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structRpcDebugRecvMapping.html">RpcDebugRecvMapping</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#ga372dc4898a0263ba3530cc8f1564b709">RpcDebugRecvMapping</a></td></tr>
<tr class="separator:ga372dc4898a0263ba3530cc8f1564b709"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9714c81c6c733600f561aea62599cd0b"><td class="memItemLeft" align="right" valign="top">typedef gboolean(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#ga9714c81c6c733600f561aea62599cd0b">RpcDebugValidateFn</a> )(<a class="el" href="structRpcInData.html">RpcInData</a> *data, gboolean ret)</td></tr>
<tr class="separator:ga9714c81c6c733600f561aea62599cd0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga38ec29372168d81a0a73e2c9df95a0d0"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structRpcDebugMsgMapping.html">RpcDebugMsgMapping</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#ga38ec29372168d81a0a73e2c9df95a0d0">RpcDebugMsgMapping</a></td></tr>
<tr class="separator:ga38ec29372168d81a0a73e2c9df95a0d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga168ee63dc3992527af12e34261229170"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structRpcDebugMsgList.html">RpcDebugMsgList</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#ga168ee63dc3992527af12e34261229170">RpcDebugMsgList</a></td></tr>
<tr class="separator:ga168ee63dc3992527af12e34261229170"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4afcca0634c56e2ab90ede417fa06e20"><td class="memItemLeft" align="right" valign="top">typedef gboolean(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#ga4afcca0634c56e2ab90ede417fa06e20">RpcDebugSendFn</a> )(<a class="el" href="structRpcDebugMsgMapping.html">RpcDebugMsgMapping</a> *rpcdata)</td></tr>
<tr class="separator:ga4afcca0634c56e2ab90ede417fa06e20"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga55fc99352e2f1bea87affb1af8292935"><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#ga55fc99352e2f1bea87affb1af8292935">RpcDebugShutdownFn</a> )(<a class="el" href="structToolsAppCtx.html">ToolsAppCtx</a> *ctx, struct <a class="el" href="structRpcDebugPlugin.html">RpcDebugPlugin</a> *plugin)</td></tr>
<tr class="separator:ga55fc99352e2f1bea87affb1af8292935"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga40c531e905da6ca5c1773cddc092b389"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structRpcDebugPlugin.html">RpcDebugPlugin</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#ga40c531e905da6ca5c1773cddc092b389">RpcDebugPlugin</a></td></tr>
<tr class="separator:ga40c531e905da6ca5c1773cddc092b389"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1eb8c10bca3225e90f37248afe48250b"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="structRpcDebugPlugin.html">RpcDebugPlugin</a> *(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#ga1eb8c10bca3225e90f37248afe48250b">RpcDebugOnLoadFn</a> )(<a class="el" href="structToolsAppCtx.html">ToolsAppCtx</a> *ctx)</td></tr>
<tr class="separator:ga1eb8c10bca3225e90f37248afe48250b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf8ac3781bd26cffb500461bc9d667714"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structRpcDebugLibData.html">RpcDebugLibData</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#gaf8ac3781bd26cffb500461bc9d667714">RpcDebugLibData</a></td></tr>
<tr class="separator:gaf8ac3781bd26cffb500461bc9d667714"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaddba6f872aa42f5d6fddf47947c63266"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="structRpcDebugLibData.html">RpcDebugLibData</a> *(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#gaddba6f872aa42f5d6fddf47947c63266">RpcDebugInitializeFn</a> )(<a class="el" href="structToolsAppCtx.html">ToolsAppCtx</a> *, gchar *)</td></tr>
<tr class="separator:gaddba6f872aa42f5d6fddf47947c63266"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga701cad06f90f497a2fd034d9ae927f87"><td class="memItemLeft" align="right" valign="top">G_BEGIN_DECLS void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#ga701cad06f90f497a2fd034d9ae927f87">RpcDebug_DecRef</a> (<a class="el" href="structToolsAppCtx.html">ToolsAppCtx</a> *ctx)</td></tr>
<tr class="separator:ga701cad06f90f497a2fd034d9ae927f87"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4655457e90b2c766f0c6424f0b0e6387"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#ga4655457e90b2c766f0c6424f0b0e6387">RpcDebug_IncRef</a> (void)</td></tr>
<tr class="separator:ga4655457e90b2c766f0c6424f0b0e6387"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga32acd37a879eaf2be8d9c4e20f155091"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structRpcDebugLibData.html">RpcDebugLibData</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#ga32acd37a879eaf2be8d9c4e20f155091">RpcDebug_Initialize</a> (<a class="el" href="structToolsAppCtx.html">ToolsAppCtx</a> *ctx, gchar *dbgPlugin)</td></tr>
<tr class="separator:ga32acd37a879eaf2be8d9c4e20f155091"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacc3389dfd53f9b001bf226e61faf952e"><td class="memItemLeft" align="right" valign="top">gboolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#gacc3389dfd53f9b001bf226e61faf952e">RpcDebug_SendNext</a> (<a class="el" href="structRpcDebugMsgMapping.html">RpcDebugMsgMapping</a> *rpcdata, <a class="el" href="structRpcDebugMsgList.html">RpcDebugMsgList</a> *list)</td></tr>
<tr class="separator:gacc3389dfd53f9b001bf226e61faf952e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3c2cdcb9cc104b4984763388a372ea42"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__vmtools__debug.html#ga3c2cdcb9cc104b4984763388a372ea42">RpcDebug_SetResult</a> (const char *str, char **res, size_t *len)</td></tr>
<tr class="separator:ga3c2cdcb9cc104b4984763388a372ea42"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Defines functions and interfaces for debugging Tools plugins. </p>
<p>This module provides functions for writing "debug plugins" - plugins which provide functionality for driving the Tools Services when they're running in "debug mode". Debug plugins are dynamically loaded by providing specific command-line options to the Tools service process.</p>
<h1><a class="anchor" id="vmtools_debug_how"></a>
How debug plugins work</h1>
<p>Currently, there's only support for GuestRPC-based debug plugins.</p>
<p>The debug library implements an RPC channel that can be driven by a debug plugin, according to information provided by the plugin at load time.</p>
<p>The debug plugin can provide two types of information:</p>
<ul>
<li>RPCs to be sent to the application: these are input to the application, and can be tied to a validation function to make sure the response from the application is correct.</li>
<li>Validation functions for "outgoing" RPCs: these are functions called in response to RPCs initiated by the applications; they can be mapped to specific RPC command strings, to make writing the plugin easier.</li>
</ul>
<p>For more details, check the <a class="el" href="structRpcDebugPlugin.html">RpcDebugPlugin</a> data structure.</p>
<p>Plugins that depend on events that are not only responses to RPC messages (such as timer-based outgoing RPCs) should make sure they tell the library that it should not stop running by incrementing its ref count (see <a class="el" href="group__vmtools__debug.html#ga4655457e90b2c766f0c6424f0b0e6387">RpcDebug_IncRef()</a>). When the test is complete, the code can then call <a class="el" href="group__vmtools__debug.html#ga701cad06f90f497a2fd034d9ae927f87">RpcDebug_DecRef()</a> and, when the ref count reaches zero, the main application loop will be stopped. </p>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="ga67131b97f1a2b709a93e2db09c1651ef"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define RPCDEBUG_ASSERT</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">test, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">retval&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">do</span> {   \</div>
<div class="line">   CU_ASSERT(test);                          \</div>
<div class="line">   g_return_val_if_fail(test, retval);       \</div>
<div class="line">} <span class="keywordflow">while</span> (0)</div>
</div><!-- fragment --><p>Shorthand macro to both call CU_ASSERT() and return from the function if the assertion fails. Note that this file doesn't include CUnit.h, so you'll need to include that header to use this macro. </p>

</div>
</div>
<h2 class="groupheader">Typedef Documentation</h2>
<a class="anchor" id="gaddba6f872aa42f5d6fddf47947c63266"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="structRpcDebugLibData.html">RpcDebugLibData</a>*(*  RpcDebugInitializeFn)(<a class="el" href="structToolsAppCtx.html">ToolsAppCtx</a> *, gchar *)</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Signature of the library's initialization function. </p>

</div>
</div>
<a class="anchor" id="gaf8ac3781bd26cffb500461bc9d667714"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="structRpcDebugLibData.html">RpcDebugLibData</a>  <a class="el" href="structRpcDebugLibData.html">RpcDebugLibData</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Describes the external interface of the library. An instance of this struct is returned by <a class="el" href="group__vmtools__debug.html#ga32acd37a879eaf2be8d9c4e20f155091">RpcDebug_Initialize()</a> and can be used by applications using the library to use the debugging functionality. </p>

</div>
</div>
<a class="anchor" id="ga168ee63dc3992527af12e34261229170"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="structRpcDebugMsgList.html">RpcDebugMsgList</a>  <a class="el" href="structRpcDebugMsgList.html">RpcDebugMsgList</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Defines a (NULL-terminated) list of message / validator mappings. </p>

</div>
</div>
<a class="anchor" id="ga38ec29372168d81a0a73e2c9df95a0d0"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="structRpcDebugMsgMapping.html">RpcDebugMsgMapping</a>  <a class="el" href="structRpcDebugMsgMapping.html">RpcDebugMsgMapping</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Defines a mapping between a message and a "validate" function. </p>

</div>
</div>
<a class="anchor" id="ga1eb8c10bca3225e90f37248afe48250b"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="structRpcDebugPlugin.html">RpcDebugPlugin</a>*(* RpcDebugOnLoadFn)(<a class="el" href="structToolsAppCtx.html">ToolsAppCtx</a> *ctx)</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Signature for the plugin's entry point. The function works in a similar way to the "ToolsOnLoad" function for regular plugins. </p>

</div>
</div>
<a class="anchor" id="ga40c531e905da6ca5c1773cddc092b389"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="structRpcDebugPlugin.html">RpcDebugPlugin</a>  <a class="el" href="structRpcDebugPlugin.html">RpcDebugPlugin</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Registration data for debug plugins, should be returned by the plugin's entry point function. </p>

</div>
</div>
<a class="anchor" id="ga2e1bbebb2ecb549bf1103839e005ce92"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef gboolean(* RpcDebugRecvFn)(char *data, size_t dataLen, char **result, size_t *resultLen)</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Signature for the plugin's "receive" function, to validate the data applications send using RpcChannel_Send. </p>

</div>
</div>
<a class="anchor" id="ga372dc4898a0263ba3530cc8f1564b709"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="structRpcDebugRecvMapping.html">RpcDebugRecvMapping</a>  <a class="el" href="structRpcDebugRecvMapping.html">RpcDebugRecvMapping</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Defines a mapping between a message and a "receive" function. </p>

</div>
</div>
<a class="anchor" id="ga4afcca0634c56e2ab90ede417fa06e20"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef gboolean(* RpcDebugSendFn)(<a class="el" href="structRpcDebugMsgMapping.html">RpcDebugMsgMapping</a> *rpcdata)</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Signature for the plugin's "send" function, which provides the data to be sent when the service tries to read from the RPC Channel.</p>
<p>The function should return FALSE if the service should finish the test (any data provided when this function returns FALSE is ignored). </p>

</div>
</div>
<a class="anchor" id="ga55fc99352e2f1bea87affb1af8292935"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef void(* RpcDebugShutdownFn)(<a class="el" href="structToolsAppCtx.html">ToolsAppCtx</a> *ctx, struct <a class="el" href="structRpcDebugPlugin.html">RpcDebugPlugin</a> *plugin)</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Signature for the plugin's "shutdown" function. </p>

</div>
</div>
<a class="anchor" id="ga9714c81c6c733600f561aea62599cd0b"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef gboolean(* RpcDebugValidateFn)(<a class="el" href="structRpcInData.html">RpcInData</a> *data, gboolean ret)</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Signature for validation functions. Validation functions are called after an application has processed an "incoming" RPC, so that the plugin can validate the response. </p>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga701cad06f90f497a2fd034d9ae927f87"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">G_BEGIN_DECLS void RpcDebug_DecRef </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structToolsAppCtx.html">ToolsAppCtx</a> *&#160;</td>
          <td class="paramname"><em>ctx</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Decreases the internal ref count of the library. When the ref count reaches zero, this function will ask the application's main loop to stop running.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">ctx</td><td>The application contexnt. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga4655457e90b2c766f0c6424f0b0e6387"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void RpcDebug_IncRef </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Increases the internal ref count of the library. Test code that needs the process to stay alive should call this function to ensure that. </p>

</div>
</div>
<a class="anchor" id="ga32acd37a879eaf2be8d9c4e20f155091"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structRpcDebugLibData.html">RpcDebugLibData</a>* RpcDebug_Initialize </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structToolsAppCtx.html">ToolsAppCtx</a> *&#160;</td>
          <td class="paramname"><em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">gchar *&#160;</td>
          <td class="paramname"><em>dbgPlugin</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Initializes the debug library and loads the debug plugin at the given path. This function panics if something goes wrong.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">ctx</td><td>The application context. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dbgPlugin</td><td>Path to the debug plugin.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Structure containing the debug library's information. </dd></dl>

</div>
</div>
<a class="anchor" id="gacc3389dfd53f9b001bf226e61faf952e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gboolean RpcDebug_SendNext </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structRpcDebugMsgMapping.html">RpcDebugMsgMapping</a> *&#160;</td>
          <td class="paramname"><em>rpcdata</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structRpcDebugMsgList.html">RpcDebugMsgList</a> *&#160;</td>
          <td class="paramname"><em>list</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Places the next item on the given RPC message list into the given RPC data. Updates the current index of the list.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">rpcdata</td><td>The injected RPC data. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">list</td><td>The message list.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>TRUE if updated the RPC data, FALSE if reached the end of the list. </dd></dl>

</div>
</div>
<a class="anchor" id="ga3c2cdcb9cc104b4984763388a372ea42"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void RpcDebug_SetResult </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>str</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char **&#160;</td>
          <td class="paramname"><em>res</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&#160;</td>
          <td class="paramname"><em>len</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Sets <em>res</em> / <em>len</em> when responding to an RPC.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">str</td><td>The string to set. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">res</td><td>Where to store the result. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">len</td><td>Where to store the length. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Nov 13 2013 17:04:41 for open-vm-tools 9.4.0 by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.5
</small></address>
</body>
</html>