<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta name="robots" content="noindex"> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <!-- THIS FILE IS AUTOMATICALLY GENERATED FROM THE GLOBUS SOURCE CODE DO NOT MODIFY. --> <title>Globus Reference Manual</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head> <body> <!-- Generated by Doxygen 1.7.4 --> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> </ul> </div> </div> <div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="nav-tree"> <div id="nav-tree-contents"> </div> </div> <div id="splitbar" style="-moz-user-select:none;" class="ui-resizable-handle"> </div> </div> <script type="text/javascript"> initNavTree('group__globus__ftp__client__throughput__plugin.html',''); </script> <div id="doc-content"> <div class="header"> <div class="summary"> <a href="#define-members">Defines</a> | <a href="#typedef-members">Typedefs</a> | <a href="#func-members">Functions</a> </div> <div class="headertitle"> <div class="title">Throughput Performance Plugin</div> </div> <div class="ingroups"><a class="el" href="group__globus__ftp__client__plugins.html">Plugins</a></div></div> <div class="contents"> <p>The FTP Throughput Performance plugin allows the user to obtain calculated performance information for all types of transfers except a third party transfer in which Extended Block mode is not enabled. <a href="#details">More...</a></p> <div class="dynheader"> Collaboration diagram for Throughput Performance Plugin:</div> <div class="dyncontent"> <center><table><tr><td><img src="group__globus__ftp__client__throughput__plugin.png" border="0" alt="" usemap="#group____globus____ftp____client____throughput____plugin"/> <map name="group____globus____ftp____client____throughput____plugin" id="group____globus____ftp____client____throughput____plugin"> <area shape="rect" id="node1" href="group__globus__ftp__client__plugins.html" title="Plugin API." alt="" coords="7,5,71,35"/></map> </td></tr></table></center> </div> <h2><a name="define-members"></a> Defines</h2> <ul> <li>#define <a class="el" href="group__globus__ftp__client__throughput__plugin.html#gabd79a3f5b7051bb6b4bee0d8d062d716">GLOBUS_FTP_CLIENT_THROUGHPUT_PLUGIN_MODULE</a>   (&globus_i_ftp_client_throughput_plugin_module) </ul> <h2><a name="typedef-members"></a> Typedefs</h2> <ul> <li>typedef void(* <a class="el" href="group__globus__ftp__client__throughput__plugin.html#ga635fcdcd8bc88682f974b6258665fa77">globus_ftp_client_throughput_plugin_begin_cb_t</a> )(void *user_specific, <a class="el" href="group__globus__ftp__client__handle.html#ga9d8a98c88d529ab539c2fedee545f172">globus_ftp_client_handle_t</a> *handle, const char *source_url, const char *dest_url) <li>typedef void(* <a class="el" href="group__globus__ftp__client__throughput__plugin.html#gad3378988c81b09b07a56be73b81d7e39">globus_ftp_client_throughput_plugin_stripe_cb_t</a> )(void *user_specific, <a class="el" href="group__globus__ftp__client__handle.html#ga9d8a98c88d529ab539c2fedee545f172">globus_ftp_client_handle_t</a> *handle, int stripe_ndx, globus_off_t bytes, float instantaneous_throughput, float avg_throughput) <li>typedef void(* <a class="el" href="group__globus__ftp__client__throughput__plugin.html#ga94697ba39253977f5edc0f616baa3f07">globus_ftp_client_throughput_plugin_total_cb_t</a> )(void *user_specific, <a class="el" href="group__globus__ftp__client__handle.html#ga9d8a98c88d529ab539c2fedee545f172">globus_ftp_client_handle_t</a> *handle, globus_off_t bytes, float instantaneous_throughput, float avg_throughput) <li>typedef void(* <a class="el" href="group__globus__ftp__client__throughput__plugin.html#ga41213a4cc3331fdd9ae607ecaeb35122">globus_ftp_client_throughput_plugin_complete_cb_t</a> )(void *user_specific, <a class="el" href="group__globus__ftp__client__handle.html#ga9d8a98c88d529ab539c2fedee545f172">globus_ftp_client_handle_t</a> *handle, globus_bool_t success) <li>typedef void *(* <a class="el" href="group__globus__ftp__client__throughput__plugin.html#gaee0d6a6086190474c8c752eeb5f58448">globus_ftp_client_throughput_plugin_user_copy_cb_t</a> )(void *user_specific) <li>typedef void(* <a class="el" href="group__globus__ftp__client__throughput__plugin.html#gaf580100a8038cf8e54e15f8b5d484a7b">globus_ftp_client_throughput_plugin_user_destroy_cb_t</a> )(void *user_specific) </ul> <h2><a name="func-members"></a> Functions</h2> <ul> <li>globus_result_t <a class="el" href="group__globus__ftp__client__throughput__plugin.html#ga4c141499bfd91a76758fa558e6328a7e">globus_ftp_client_throughput_plugin_init</a> (<a class="el" href="group__globus__ftp__client__plugins.html#gafd650bbeee4bf50b94275d89352697dc">globus_ftp_client_plugin_t</a> *plugin, <a class="el" href="group__globus__ftp__client__throughput__plugin.html#ga635fcdcd8bc88682f974b6258665fa77">globus_ftp_client_throughput_plugin_begin_cb_t</a> begin_cb, <a class="el" href="group__globus__ftp__client__throughput__plugin.html#gad3378988c81b09b07a56be73b81d7e39">globus_ftp_client_throughput_plugin_stripe_cb_t</a> per_stripe_cb, <a class="el" href="group__globus__ftp__client__throughput__plugin.html#ga94697ba39253977f5edc0f616baa3f07">globus_ftp_client_throughput_plugin_total_cb_t</a> total_cb, <a class="el" href="group__globus__ftp__client__throughput__plugin.html#ga41213a4cc3331fdd9ae607ecaeb35122">globus_ftp_client_throughput_plugin_complete_cb_t</a> complete_cb, void *user_specific) <li>globus_result_t <a class="el" href="group__globus__ftp__client__throughput__plugin.html#ga2bac7cad7c25297659548216b1d547d2">globus_ftp_client_throughput_plugin_set_copy_destroy</a> (<a class="el" href="group__globus__ftp__client__plugins.html#gafd650bbeee4bf50b94275d89352697dc">globus_ftp_client_plugin_t</a> *plugin, <a class="el" href="group__globus__ftp__client__throughput__plugin.html#gaee0d6a6086190474c8c752eeb5f58448">globus_ftp_client_throughput_plugin_user_copy_cb_t</a> copy_cb, <a class="el" href="group__globus__ftp__client__throughput__plugin.html#gaf580100a8038cf8e54e15f8b5d484a7b">globus_ftp_client_throughput_plugin_user_destroy_cb_t</a> destroy_cb) <li>globus_result_t <a class="el" href="group__globus__ftp__client__throughput__plugin.html#gac1041b36437cb1401cf0e65c71246d84">globus_ftp_client_throughput_plugin_destroy</a> (<a class="el" href="group__globus__ftp__client__plugins.html#gafd650bbeee4bf50b94275d89352697dc">globus_ftp_client_plugin_t</a> *plugin) <li>globus_result_t <a class="el" href="group__globus__ftp__client__throughput__plugin.html#gaf384442919d57f1420a29ec72fe3fc09">globus_ftp_client_throughput_plugin_get_user_specific</a> (<a class="el" href="group__globus__ftp__client__plugins.html#gafd650bbeee4bf50b94275d89352697dc">globus_ftp_client_plugin_t</a> *plugin, void **user_specific) </ul> <hr/><a name="details" id="details"></a><h2>Detailed Description</h2> <p>The FTP Throughput Performance plugin allows the user to obtain calculated performance information for all types of transfers except a third party transfer in which Extended Block mode is not enabled. </p> <p>Note: Since this plugin is built on top of the Performance Marker Plugin, it is not possible to associate both plugins with a handle </p> <hr/><h2>Define Documentation</h2> <a class="anchor" id="gabd79a3f5b7051bb6b4bee0d8d062d716"></a><!-- doxytag: member="globus_ftp_client_throughput_plugin.h::GLOBUS_FTP_CLIENT_THROUGHPUT_PLUGIN_MODULE" ref="gabd79a3f5b7051bb6b4bee0d8d062d716" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define GLOBUS_FTP_CLIENT_THROUGHPUT_PLUGIN_MODULE   (&globus_i_ftp_client_throughput_plugin_module)</td> </tr> </table> </div> <div class="memdoc"> <p>Module descriptor. </p> </div> </div> <hr/><h2>Typedef Documentation</h2> <a class="anchor" id="ga635fcdcd8bc88682f974b6258665fa77"></a><!-- doxytag: member="globus_ftp_client_throughput_plugin.h::globus_ftp_client_throughput_plugin_begin_cb_t" ref="ga635fcdcd8bc88682f974b6258665fa77" args=")(void *user_specific, globus_ftp_client_handle_t *handle, const char *source_url, const char *dest_url)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* <a class="el" href="group__globus__ftp__client__throughput__plugin.html#ga635fcdcd8bc88682f974b6258665fa77">globus_ftp_client_throughput_plugin_begin_cb_t</a>)(void *user_specific, <a class="el" href="group__globus__ftp__client__handle.html#ga9d8a98c88d529ab539c2fedee545f172">globus_ftp_client_handle_t</a> *handle, const char *source_url, const char *dest_url)</td> </tr> </table> </div> <div class="memdoc"> <p>Transfer begin callbackThis callback will be called when a transfer begins. </p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">handle</td><td>The client handle associated with this transfer</td></tr> <tr><td class="paramname">user_specific</td><td>User argument passed to globus_ftp_client_throughput_plugin_init</td></tr> <tr><td class="paramname">source_url</td><td>source of the transfer (GLOBUS_NULL if 'put')</td></tr> <tr><td class="paramname">dest_url</td><td>dest of the transfer (GLOBUS_NULL if 'get')</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>n/a </li> </ul> </dd></dl> </div> </div> <a class="anchor" id="gad3378988c81b09b07a56be73b81d7e39"></a><!-- doxytag: member="globus_ftp_client_throughput_plugin.h::globus_ftp_client_throughput_plugin_stripe_cb_t" ref="gad3378988c81b09b07a56be73b81d7e39" args=")(void *user_specific, globus_ftp_client_handle_t *handle, int stripe_ndx, globus_off_t bytes, float instantaneous_throughput, float avg_throughput)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* <a class="el" href="group__globus__ftp__client__throughput__plugin.html#gad3378988c81b09b07a56be73b81d7e39">globus_ftp_client_throughput_plugin_stripe_cb_t</a>)(void *user_specific, <a class="el" href="group__globus__ftp__client__handle.html#ga9d8a98c88d529ab539c2fedee545f172">globus_ftp_client_handle_t</a> *handle, int stripe_ndx, globus_off_t bytes, float instantaneous_throughput, float avg_throughput)</td> </tr> </table> </div> <div class="memdoc"> <p>Stripe performace throughput callbackThis callback will be called with every performance callback that is received by the perf plugin. </p> <p>The first callback for each stripe_ndx will have an instantaneous_throughput based from the time the command was sent.</p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">handle</td><td>The client handle associated with this transfer</td></tr> <tr><td class="paramname">user_specific</td><td>User argument passed to globus_ftp_client_throughput_plugin_init</td></tr> <tr><td class="paramname">bytes</td><td>The total number of bytes received on this stripe</td></tr> <tr><td class="paramname">instantaneous_throughput</td><td>Instanteous throughput on this stripe (bytes / sec)</td></tr> <tr><td class="paramname">avg_throughput</td><td>Average throughput on this stripe (bytes / sec)</td></tr> <tr><td class="paramname">stripe_ndx</td><td>This stripe's index </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga94697ba39253977f5edc0f616baa3f07"></a><!-- doxytag: member="globus_ftp_client_throughput_plugin.h::globus_ftp_client_throughput_plugin_total_cb_t" ref="ga94697ba39253977f5edc0f616baa3f07" args=")(void *user_specific, globus_ftp_client_handle_t *handle, globus_off_t bytes, float instantaneous_throughput, float avg_throughput)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* <a class="el" href="group__globus__ftp__client__throughput__plugin.html#ga94697ba39253977f5edc0f616baa3f07">globus_ftp_client_throughput_plugin_total_cb_t</a>)(void *user_specific, <a class="el" href="group__globus__ftp__client__handle.html#ga9d8a98c88d529ab539c2fedee545f172">globus_ftp_client_handle_t</a> *handle, globus_off_t bytes, float instantaneous_throughput, float avg_throughput)</td> </tr> </table> </div> <div class="memdoc"> <p>Total performace throughput callbackThis callback will be called with every performance callback that is received by the perf plugin. </p> <p>The first callback for will have an instantaneous_throughput based from the time the command was sent. This callback will be called after the per_stripe_cb</p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">handle</td><td>The client handle associated with this transfer</td></tr> <tr><td class="paramname">user_specific</td><td>User argument passed to globus_ftp_client_throughput_plugin_init</td></tr> <tr><td class="paramname">bytes</td><td>The total number of bytes received on all stripes</td></tr> <tr><td class="paramname">instantaneous_throughput</td><td>Total instanteous throughput on all stripes (bytes / sec)</td></tr> <tr><td class="paramname">avg_throughput</td><td>Average total throughput on all stripes (bytes / sec) </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga41213a4cc3331fdd9ae607ecaeb35122"></a><!-- doxytag: member="globus_ftp_client_throughput_plugin.h::globus_ftp_client_throughput_plugin_complete_cb_t" ref="ga41213a4cc3331fdd9ae607ecaeb35122" args=")(void *user_specific, globus_ftp_client_handle_t *handle, globus_bool_t success)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* <a class="el" href="group__globus__ftp__client__throughput__plugin.html#ga41213a4cc3331fdd9ae607ecaeb35122">globus_ftp_client_throughput_plugin_complete_cb_t</a>)(void *user_specific, <a class="el" href="group__globus__ftp__client__handle.html#ga9d8a98c88d529ab539c2fedee545f172">globus_ftp_client_handle_t</a> *handle, globus_bool_t success)</td> </tr> </table> </div> <div class="memdoc"> <p>Transfer complete callbackThis callback will be called upon transfer completion (successful or otherwise) </p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">handle</td><td>The client handle associated with this transfer</td></tr> <tr><td class="paramname">user_specific</td><td>User argument passed to globus_ftp_client_throughput_plugin_init</td></tr> <tr><td class="paramname">success</td><td>indicates whether this transfer completed successfully or was interrupted (by error or abort)</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>n/a </li> </ul> </dd></dl> </div> </div> <a class="anchor" id="gaee0d6a6086190474c8c752eeb5f58448"></a><!-- doxytag: member="globus_ftp_client_throughput_plugin.h::globus_ftp_client_throughput_plugin_user_copy_cb_t" ref="gaee0d6a6086190474c8c752eeb5f58448" args=")(void *user_specific)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void*(* <a class="el" href="group__globus__ftp__client__throughput__plugin.html#gaee0d6a6086190474c8c752eeb5f58448">globus_ftp_client_throughput_plugin_user_copy_cb_t</a>)(void *user_specific)</td> </tr> </table> </div> <div class="memdoc"> <p>Copy constructorThis callback will be called when a copy of this plugin is made, it is intended to allow initialization of a new user_specific data. </p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">user_specific</td><td>this is user specific data either created by this copy method, or the value passed to init</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>a pointer to a user specific piece of data</li> <li>GLOBUS_NULL (does not indicate error) </li> </ul> </dd></dl> </div> </div> <a class="anchor" id="gaf580100a8038cf8e54e15f8b5d484a7b"></a><!-- doxytag: member="globus_ftp_client_throughput_plugin.h::globus_ftp_client_throughput_plugin_user_destroy_cb_t" ref="gaf580100a8038cf8e54e15f8b5d484a7b" args=")(void *user_specific)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* <a class="el" href="group__globus__ftp__client__throughput__plugin.html#gaf580100a8038cf8e54e15f8b5d484a7b">globus_ftp_client_throughput_plugin_user_destroy_cb_t</a>)(void *user_specific)</td> </tr> </table> </div> <div class="memdoc"> <p>DestructorThis callback will be called when a copy of this plugin is destroyed, it is intended to allow the user to free up any memory associated with the user specific data. </p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">user_specific</td><td>this is user specific data created by the copy method</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>n/a </li> </ul> </dd></dl> </div> </div> <hr/><h2>Function Documentation</h2> <a class="anchor" id="ga4c141499bfd91a76758fa558e6328a7e"></a><!-- doxytag: member="globus_ftp_client_throughput_plugin.c::globus_ftp_client_throughput_plugin_init" ref="ga4c141499bfd91a76758fa558e6328a7e" args="(globus_ftp_client_plugin_t *plugin, globus_ftp_client_throughput_plugin_begin_cb_t begin_cb, globus_ftp_client_throughput_plugin_stripe_cb_t per_stripe_cb, globus_ftp_client_throughput_plugin_total_cb_t total_cb, globus_ftp_client_throughput_plugin_complete_cb_t complete_cb, void *user_specific)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">globus_result_t globus_ftp_client_throughput_plugin_init </td> <td>(</td> <td class="paramtype"><a class="el" href="group__globus__ftp__client__plugins.html#gafd650bbeee4bf50b94275d89352697dc">globus_ftp_client_plugin_t</a> * </td> <td class="paramname"><em>plugin</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__globus__ftp__client__throughput__plugin.html#ga635fcdcd8bc88682f974b6258665fa77">globus_ftp_client_throughput_plugin_begin_cb_t</a> </td> <td class="paramname"><em>begin_cb</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__globus__ftp__client__throughput__plugin.html#gad3378988c81b09b07a56be73b81d7e39">globus_ftp_client_throughput_plugin_stripe_cb_t</a> </td> <td class="paramname"><em>per_stripe_cb</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__globus__ftp__client__throughput__plugin.html#ga94697ba39253977f5edc0f616baa3f07">globus_ftp_client_throughput_plugin_total_cb_t</a> </td> <td class="paramname"><em>total_cb</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__globus__ftp__client__throughput__plugin.html#ga41213a4cc3331fdd9ae607ecaeb35122">globus_ftp_client_throughput_plugin_complete_cb_t</a> </td> <td class="paramname"><em>complete_cb</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"><em>user_specific</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Throughput plugin initUse this function to initialize a throughput plugin. </p> <p>The throughput plugin sits on top of the perf_plugin. The only required param is 'plugin', all others may be GLOBUS_NULL</p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">plugin</td><td>a pointer to a plugin type to be initialized</td></tr> <tr><td class="paramname">begin_cb</td><td>the callback to be called upon the start of a transfer</td></tr> <tr><td class="paramname">per_stripe_cb</td><td>the callback to be called every time updated throughput info is available for a given stripe</td></tr> <tr><td class="paramname">total_cb</td><td>the callback to be called every time updated throughput info is available for any stripe</td></tr> <tr><td class="paramname">complete_cb</td><td>the callback to be called to indicate transfer completion</td></tr> <tr><td class="paramname">user_specific</td><td>a pointer to some user specific data that will be provided to all callbacks</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>GLOBUS_SUCCESS</li> <li>Error on NULL plugin</li> <li>Error on init perf plugin </li> </ul> </dd></dl> </div> </div> <a class="anchor" id="ga2bac7cad7c25297659548216b1d547d2"></a><!-- doxytag: member="globus_ftp_client_throughput_plugin.c::globus_ftp_client_throughput_plugin_set_copy_destroy" ref="ga2bac7cad7c25297659548216b1d547d2" args="(globus_ftp_client_plugin_t *plugin, globus_ftp_client_throughput_plugin_user_copy_cb_t copy_cb, globus_ftp_client_throughput_plugin_user_destroy_cb_t destroy_cb)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">globus_result_t globus_ftp_client_throughput_plugin_set_copy_destroy </td> <td>(</td> <td class="paramtype"><a class="el" href="group__globus__ftp__client__plugins.html#gafd650bbeee4bf50b94275d89352697dc">globus_ftp_client_plugin_t</a> * </td> <td class="paramname"><em>plugin</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__globus__ftp__client__throughput__plugin.html#gaee0d6a6086190474c8c752eeb5f58448">globus_ftp_client_throughput_plugin_user_copy_cb_t</a> </td> <td class="paramname"><em>copy_cb</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__globus__ftp__client__throughput__plugin.html#gaf580100a8038cf8e54e15f8b5d484a7b">globus_ftp_client_throughput_plugin_user_destroy_cb_t</a> </td> <td class="paramname"><em>destroy_cb</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Set user copy and destroy callbacksUse this to have the plugin make callbacks any time a copy of this plugin is being made. </p> <p>This will allow the user to keep state for different handles.</p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">plugin</td><td>plugin previously initialized with init (above)</td></tr> <tr><td class="paramname">copy_cb</td><td>func to be called when a copy is needed</td></tr> <tr><td class="paramname">destroy_cb</td><td>func to be called when a copy is to be destroyed</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>Error on NULL arguments</li> <li>GLOBUS_SUCCESS </li> </ul> </dd></dl> </div> </div> <a class="anchor" id="gac1041b36437cb1401cf0e65c71246d84"></a><!-- doxytag: member="globus_ftp_client_throughput_plugin.c::globus_ftp_client_throughput_plugin_destroy" ref="gac1041b36437cb1401cf0e65c71246d84" args="(globus_ftp_client_plugin_t *plugin)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">globus_result_t globus_ftp_client_throughput_plugin_destroy </td> <td>(</td> <td class="paramtype"><a class="el" href="group__globus__ftp__client__plugins.html#gafd650bbeee4bf50b94275d89352697dc">globus_ftp_client_plugin_t</a> * </td> <td class="paramname"><em>plugin</em></td><td>)</td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Destroy throughput pluginFrees up memory associated with plugin. </p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">plugin</td><td>plugin previously initialized with init (above)</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>GLOBUS_SUCCESS</li> <li>Error on NULL plugin </li> </ul> </dd></dl> </div> </div> <a class="anchor" id="gaf384442919d57f1420a29ec72fe3fc09"></a><!-- doxytag: member="globus_ftp_client_throughput_plugin.c::globus_ftp_client_throughput_plugin_get_user_specific" ref="gaf384442919d57f1420a29ec72fe3fc09" args="(globus_ftp_client_plugin_t *plugin, void **user_specific)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">globus_result_t globus_ftp_client_throughput_plugin_get_user_specific </td> <td>(</td> <td class="paramtype"><a class="el" href="group__globus__ftp__client__plugins.html#gafd650bbeee4bf50b94275d89352697dc">globus_ftp_client_plugin_t</a> * </td> <td class="paramname"><em>plugin</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void ** </td> <td class="paramname"><em>user_specific</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Retrieve user specific pointer. </p> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">plugin</td><td>plugin previously initialized with init (above)</td></tr> <tr><td class="paramname">user_specific</td><td>pointer to storage for user_specific pointer</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd><ul> <li>GLOBUS_SUCCESS</li> <li>Error on NULL plugin</li> <li>Error on NULL user_specific </li> </ul> </dd></dl> </div> </div> </div> </div> <div id="nav-path" class="navpath"> <ul> <hr> <p align="center"> <a href="http://www.globus.org/toolkit/about.html" target="_top">about globus</a> | <a href="http://www.globus.org/toolkit/" target="_top">globus toolkit</a> | <a href="https://dev.globus.org/wiki/Welcome/" target="_top">dev.globus</a> <br> <br> Comments? <a href="mailto:webmaster@globus.org">webmaster@globus.org</a> </body> </html>