<!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 Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data 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> | <a href="#define-members">Macros</a> | <a href="#typedef-members">Typedefs</a> | <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  </td><td class="memItemRight" valign="bottom"><a class="el" href="structRpcDebugRecvMapping.html">RpcDebugRecvMapping</a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structRpcDebugMsgMapping.html">RpcDebugMsgMapping</a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structRpcDebugMsgList.html">RpcDebugMsgList</a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structRpcDebugPlugin.html">RpcDebugPlugin</a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structRpcDebugLibData.html">RpcDebugLibData</a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </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 </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"> </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(* </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"> </td></tr> <tr class="memitem:ga372dc4898a0263ba3530cc8f1564b709"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structRpcDebugRecvMapping.html">RpcDebugRecvMapping</a> </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"> </td></tr> <tr class="memitem:ga9714c81c6c733600f561aea62599cd0b"><td class="memItemLeft" align="right" valign="top">typedef gboolean(* </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"> </td></tr> <tr class="memitem:ga38ec29372168d81a0a73e2c9df95a0d0"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structRpcDebugMsgMapping.html">RpcDebugMsgMapping</a> </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"> </td></tr> <tr class="memitem:ga168ee63dc3992527af12e34261229170"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structRpcDebugMsgList.html">RpcDebugMsgList</a> </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"> </td></tr> <tr class="memitem:ga4afcca0634c56e2ab90ede417fa06e20"><td class="memItemLeft" align="right" valign="top">typedef gboolean(* </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"> </td></tr> <tr class="memitem:ga55fc99352e2f1bea87affb1af8292935"><td class="memItemLeft" align="right" valign="top">typedef void(* </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"> </td></tr> <tr class="memitem:ga40c531e905da6ca5c1773cddc092b389"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structRpcDebugPlugin.html">RpcDebugPlugin</a> </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"> </td></tr> <tr class="memitem:ga1eb8c10bca3225e90f37248afe48250b"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="structRpcDebugPlugin.html">RpcDebugPlugin</a> *(* </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"> </td></tr> <tr class="memitem:gaf8ac3781bd26cffb500461bc9d667714"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structRpcDebugLibData.html">RpcDebugLibData</a> </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"> </td></tr> <tr class="memitem:gaddba6f872aa42f5d6fddf47947c63266"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="structRpcDebugLibData.html">RpcDebugLibData</a> *(* </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"> </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 </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"> </td></tr> <tr class="memitem:ga4655457e90b2c766f0c6424f0b0e6387"><td class="memItemLeft" align="right" valign="top">void </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"> </td></tr> <tr class="memitem:ga32acd37a879eaf2be8d9c4e20f155091"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structRpcDebugLibData.html">RpcDebugLibData</a> * </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"> </td></tr> <tr class="memitem:gacc3389dfd53f9b001bf226e61faf952e"><td class="memItemLeft" align="right" valign="top">gboolean </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"> </td></tr> <tr class="memitem:ga3c2cdcb9cc104b4984763388a372ea42"><td class="memItemLeft" align="right" valign="top">void </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"> </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"> </td> <td class="paramname">test, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">retval </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> * </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 </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> * </td> <td class="paramname"><em>ctx</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">gchar * </td> <td class="paramname"><em>dbgPlugin</em> </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> * </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> * </td> <td class="paramname"><em>list</em> </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 * </td> <td class="paramname"><em>str</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">char ** </td> <td class="paramname"><em>res</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t * </td> <td class="paramname"><em>len</em> </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  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.5 </small></address> </body> </html>