GLOBUS_FTP_CLIENT_PLUGIN_RESPONSE_T(3)

okay bestie, welcome to globus_ftp_client_plugins(3) from the Library Functions Manual πŸ’– this is the plugin API and it's literally the moment.

✨ NAME ✨

globus_ftp_client_plugins β€” Plugins

  • Plugin API.

✨ SYNOPSIS ✨

🌸 Topics 🌸

  • Debugging Plugin β€” Debugging Plugin.
  • Performance Marker Plugin β€” Performance Marker Plugin.
  • Restart Marker Plugin β€” Restart Marker Plugin.
  • Restart Plugin β€” Restart Plugin.
  • Netlogger Throughput Plugin β€” Netlogger Throughput Plugin.
  • Throughput Performance Plugin β€” Throughput Performance Plugin.

πŸ¦‹ Data Structures πŸ¦‹

  • struct globus_i_ftp_client_plugin_t β€” FTP Client Plugin.

πŸ’… Typedefs πŸ’…

okay so here's the whole squad of typedefs, every single one, no skips πŸ’…

typedef struct globus_i_ftp_client_plugin_t * globus_ftp_client_plugin_t
           FTP Client plugin.
typedef globus_ftp_client_plugin_t *(* globus_ftp_client_plugin_copy_t)
           (globus_ftp_client_plugin_t *plugin_template, void *plugin_specific)
typedef void(* globus_ftp_client_plugin_destroy_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific)
typedef void(* globus_ftp_client_plugin_connect_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url)
typedef void(* globus_ftp_client_plugin_authenticate_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const
           globus_ftp_control_auth_info_t *auth_info)
typedef void(* globus_ftp_client_plugin_chmod_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, int mode, const
           globus_ftp_client_operationattr_t *attr, globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_chgrp_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const char
           *group, const globus_ftp_client_operationattr_t *attr, globus_bool_t
           restart)
typedef void(* globus_ftp_client_plugin_utime_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const struct tm
           *utime_time, const globus_ftp_client_operationattr_t *attr,
           globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_symlink_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const char
           *link_url, const globus_ftp_client_operationattr_t *attr,
           globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_cksm_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, globus_off_t
           offset, globus_off_t length, const char *algorithm, const
           globus_ftp_client_operationattr_t *attr, globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_delete_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const
           globus_ftp_client_operationattr_t *attr, globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_feat_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const
           globus_ftp_client_operationattr_t *attr, globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_mkdir_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const
           globus_ftp_client_operationattr_t *attr, globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_rmdir_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const
           globus_ftp_client_operationattr_t *attr, globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_list_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const
           globus_ftp_client_operationattr_t *attr, globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_verbose_list_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const
           globus_ftp_client_operationattr_t *attr, globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_machine_list_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const
           globus_ftp_client_operationattr_t *attr, globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_recursive_list_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const
           globus_ftp_client_operationattr_t *attr, globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_mlst_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const
           globus_ftp_client_operationattr_t *attr, globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_stat_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const
           globus_ftp_client_operationattr_t *attr, globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_move_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *source_url, const
           char *dest_url, const globus_ftp_client_operationattr_t *attr,
           globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_get_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const
           globus_ftp_client_operationattr_t *attr, globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_put_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const
           globus_ftp_client_operationattr_t *attr, globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_third_party_transfer_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *source_url, const
           globus_ftp_client_operationattr_t *source_attr, const char
           *dest_url, const globus_ftp_client_operationattr_t *dest_attr,
           globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_modification_time_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const
           globus_ftp_client_operationattr_t *attr, globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_size_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const
           globus_ftp_client_operationattr_t *attr, globus_bool_t restart)
typedef void(* globus_ftp_client_plugin_abort_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle)
typedef void(* globus_ftp_client_plugin_read_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const globus_byte_t *buffer,
           globus_size_t buffer_length)
typedef void(* globus_ftp_client_plugin_write_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const globus_byte_t *buffer,
           globus_size_t buffer_length, globus_off_t offset, globus_bool_t eof)
typedef void(* globus_ftp_client_plugin_data_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, globus_object_t *error, const
           globus_byte_t *buffer, globus_size_t length, globus_off_t offset,
           globus_bool_t eof)
typedef void(* globus_ftp_client_plugin_command_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, const char
           *command)
typedef void(* globus_ftp_client_plugin_response_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, globus_object_t
           *error, const globus_ftp_control_response_t *ftp_response)
typedef void(* globus_ftp_client_plugin_fault_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle, const char *url, globus_object_t
           *error)
typedef void(* globus_ftp_client_plugin_complete_t)
           (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
           globus_ftp_client_handle_t *handle)
typedef struct globus_i_ftp_client_plugin_t globus_i_ftp_client_plugin_t
           FTP Client Plugin.

πŸ‘‘ Enumerations πŸ‘‘

  • enum globus_ftp_client_plugin_command_mask_t { }

✨ FUNCTIONS ✨

okay bestie, here's the whole roster of function pointers you can plug into your plugin. each one gets its own lil moment πŸ’…

  • globus_result_t globus_ftp_client_plugin_restart_list (globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_verbose_list (globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_machine_list (globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_recursive_list (globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_mlst (globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_stat (globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_chmod (globus_ftp_client_handle_t *handle, const char *url, int mode, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_chgrp (globus_ftp_client_handle_t *handle, const char *url, const char *group, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_utime (globus_ftp_client_handle_t *handle, const char *url, const struct tm *utime_time, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_symlink (globus_ftp_client_handle_t *handle, const char *url, const char *link_url, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_cksm (globus_ftp_client_handle_t *handle, const char *url, globus_off_t offset, globus_off_t length, const char *algorithm, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_delete (globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_feat (globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_mkdir (globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_rmdir (globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_move (globus_ftp_client_handle_t *handle, const char *source_url, const char *dest_url, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_get (globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, globus_ftp_client_restart_marker_t *restart_marker, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_put (globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, globus_ftp_client_restart_marker_t *restart_marker, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_third_party_transfer (globus_ftp_client_handle_t *handle, const char *source_url, const globus_ftp_client_operationattr_t *source_attr, const char *dest_url, const globus_ftp_client_operationattr_t *dest_attr, globus_ftp_client_restart_marker_t *restart_marker, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_size (globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_modification_time (globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, const globus_abstime_t *when)
  • globus_result_t globus_ftp_client_plugin_restart_get_marker (globus_ftp_client_handle_t *handle, globus_ftp_client_restart_marker_t *marker)
  • globus_result_t globus_ftp_client_plugin_abort (globus_ftp_client_handle_t *handle)
  • globus_result_t globus_ftp_client_plugin_add_data_channels (globus_ftp_client_handle_t *handle, unsigned int num_channels, unsigned int stripe)
  • globus_result_t globus_ftp_client_plugin_remove_data_channels (globus_ftp_client_handle_t *handle, unsigned int num_channels, unsigned int stripe)

🌈 DETAILED DESCRIPTION 🌈

Plugin API.

so like, a plugin is literally just a way to implement reliability and performance tuning behavior that doesn't care about your specific app. it's app-independent, periodt. and you write plugins using the API described in this doc πŸ’–

a plugin gets created by defining a globus_ftp_client_plugin_t, which holds all the function pointers and the plugin-specific data it needs to actually do its thing. and ngl, the recommended move is for a plugin to define a globus_module_descriptor_t plus some plugin initialization functions, so that everything is properly initialized. do it. don't skip it. it's giving responsible queen behavior ✨

the functions that your plugin points to get called when ~significant events~ happen in the life of an FTP Client operation. but here's the tea: plugins only get called when the plugin has the function pointer defined for both the operation (get, put, list, etc) and the event (connect, authenticate, command, etc). both. not one. both 🫢 and the command and response functions get filtered based on the command_mask defined in the plugin structure.

and every single plugin β€” no exceptions β€” must define copy and destroy functions.

  • the copy function gets called when the plugin is added to an attribute set, or when a handle is initialized with an attribute set that contains the plugin.
  • the destroy function gets called when the handle or attribute set is destroyed.
okay but literally do not forget those two, bestie, the whole thing falls apart πŸ’€

πŸŽ€ TYPEDEF DOCUMENTATION πŸŽ€

typedef void(* globus_ftp_client_plugin_abort_t) (globus_ftp_client_plugin_t *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle)

Plugin abort notification callback.

this callback is how you tell a plugin "hey, an abort is being requested on a client handle." and it fires in both cases β€” when the user aborts a request, and when a plugin aborts the currently active request. double duty, iconic πŸ’…

Parameters

  • plugin β€” The plugin which is being notified.
  • plugin_specific β€” Plugin-specific data.
  • handle β€” The handle associated with the request.

typedef void(* globus_ftp_client_plugin_authenticate_t) (globus_ftp_client_plugin_t *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_control_auth_info_t *auth_info)

Plugin authentication notification callback.

this one tells a plugin that an authentication handshake is happening for this client handle. it can fire when a new request is made, or when a plugin does a hard restart. πŸ”₯

and if a plugin defines a response_callback, then that one fires once the authentication has completed β€” whether it succeeded or didn't. either way, you get the callback. no ghosting 😭

Parameters

  • plugin β€” The plugin which is being notified.
  • plugin_specific β€” Plugin-specific data.
  • handle β€” The handle associated with the connection.
  • url β€” The URL of the server to connect to.
  • auth_info β€” Authentication and authorization info being used to authenticate with the FTP or GridFTP server.

typedef void(* globus_ftp_client_plugin_chgrp_t) (globus_ftp_client_plugin_t *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle, const char *url, const char *group, const globus_ftp_client_operationattr_t *attr, globus_bool_t restart)

Plugin chgrp notification callback.

this one notifies a plugin that a chgrp is being requested on a client handle. it happens in both situations: when the user requests a chgrp, and when a plugin restarts the currently active chgrp request. πŸ¦‹

and listen β€” if this function is not defined by the plugin, then no plugin callbacks associated with the chgrp will be called. none. zero. that's the vibe check πŸ‘‘

Parameters

  • plugin β€” The plugin which is being notified.
  • plugin_specific β€” Plugin-specific data.
  • handle β€” The handle associated with the delete operation.
  • url β€” The url to chgrp.
  • group β€” The group name or ID to change to.
  • attr β€” The attributes to be used during this operation.
  • restart β€” This value is set to GLOBUS_TRUE when this callback is caused by a plugin restarting the current delete operation; otherwise, this is set to GLOBUS_FALSE.

typedef void(* globus_ftp_client_plugin_chmod_t) (globus_ftp_client_plugin_t *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle, const char *url, int mode, const globus_ftp_client_operationattr_t *attr, globus_bool_t restart)

Plugin chmod notification callback.

same energy, different command: this notifies a plugin that a chmod is being requested on a client handle. it fires both when the user requests a chmod and when a plugin restarts the currently active chmod request. πŸ’œ

and again β€” if this function is not defined by the plugin, then no plugin callbacks associated with the chmod will be called. so define it if you want in on the action, fr fr ✨

Parameters

  • plugin β€” The plugin which is being notified.
  • plugin_specific β€” Plugin-specific data.
  • handle β€” The handle associated with the delete operation.
  • url β€” The url to chmod.
  • mode β€” The file mode to be applied.
  • attr β€” The attributes to be used during this operation.
  • restart β€” This value is set to GLOBUS_TRUE when this callback is caused by a plugin restarting the current delete operation; otherwise, this is set to GLOBUS_FALSE.

typedef void(* globus_ftp_client_plugin_cksm_t) (globus_ftp_client_plugin_t *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle, const char *url, globus_off_t offset, globus_off_t length, const char *algorithm, const globus_ftp_client_operationattr_t *attr, globus_bool_t restart)

Plugin cksm notification callback.

and this cutie notifies a plugin that a cksm is being requested on a client handle. it happens both when the user requests a cksm, and when a plugin restarts the currently active cksm request. 🌸

If this function isn't defined by the plugin, then literally none of the plugin callbacks tied to the cksm get called. Not one. 🫢

Parameters

  • plugin β€” the plugin getting notified.
  • plugin_specific β€” plugin-specific data. πŸŽ€
  • handle β€” the handle vibing with the delete operation.
  • url β€” the url to cksm.
  • offset β€” file offset where we start calculating the checksum.
  • length β€” how much data to read from the starting offset. Use -1 to read the entire file. πŸ“
  • algorithm β€” a pointer to a string that gets filled in with the checksum of the file. On error, the value it points at is undefined β€” so do not trust it, bestie. πŸ’€
  • attr β€” the attributes to be used during this operation.
  • restart β€” set to GLOBUS_TRUE when this callback is caused by a plugin restarting the current delete operation; otherwise it's GLOBUS_FALSE.

πŸ‘‘ globus_ftp_client_plugin_command_t β€” command callback

typedef void(* globus_ftp_client_plugin_command_t) (globus_ftp_client_plugin_t *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle, const char *url, const char *command)

This one tells a plugin that an FTP control command is heading out the door. πŸ“¨ And listen β€” the client library will only call this for response callbacks tied to a command that's in the plugin's command mask, and tied to one of the other ftp operations that has a defined callback in the plugin. Both conditions, okay? It's giving exclusive. ✨

Parameters

  • plugin β€” the plugin getting notified.
  • plugin_specific β€” plugin-specific data.
  • handle β€” the handle associated with the request.
  • url β€” the URL this command is being sent to.
  • command β€” a string containing the command being sent to the server (TYPE I, for example). πŸ”₯

πŸ’– globus_ftp_client_plugin_complete_t β€” completion notification callback

typedef void(* globus_ftp_client_plugin_complete_t) (globus_ftp_client_plugin_t *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle)

Tells a plugin that an operation it started earlier is done done. πŸŽ‰ And here's the rule: the plugin may not call any other plugin operation on this handle after this has happened. This is the final callback for the plugin while it's processing the operation β€” the last one, periodt. Which means it's also the moment where the plugin is free to free any internal state it was holding for that operation. Go off, clean up. 🧹

Parameters

  • plugin β€” the plugin getting notified.
  • plugin_specific β€” plugin-specific data.
  • handle β€” the handle associated with the operation.

πŸ¦‹ globus_ftp_client_plugin_connect_t β€” plugin connection begin function

typedef void(* globus_ftp_client_plugin_connect_t) (globus_ftp_client_plugin_t *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle, const char *url)

This one lets a plugin know that connection establishment is happening for this client handle. It can pop off when a new request is made, or when a plugin does a restart. πŸŒ€

If a response_callback is defined by a plugin, then that one happens once the connection establishment has completed β€” successfully or unsuccessfully, either way. 😌

Parameters

  • plugin β€” the plugin getting notified.
  • plugin_specific β€” plugin-specific data.
  • handle β€” the handle associated with the connection.
  • url β€” the URL of the server to connect to.
Note: this function will not be called for a get, put, or third-party transfer operation when a cached connection is used. So if you were waiting on it β€” she's not coming. πŸ’…

🌸 globus_ftp_client_plugin_copy_t β€” plugin copy function

typedef globus_ftp_client_plugin_t *(* globus_ftp_client_plugin_copy_t) (globus_ftp_client_plugin_t *plugin_template, void *plugin_specific)

This is the one that makes a brand new copy of a plugin, or just bumps its reference count. 🫢 The FTP Client library calls it when a plugin gets added to a handle attribute set, or when a handle is initialized with an attribute that contains the plugin.

Important: a plugin may not call any of the plugin API functions from it's instantiate method. Just don't. 🚫

Parameters

  • plugin_template β€” a plugin previously initialized by a call to the plugin-specific initialization function. by the user.
  • plugin_specific β€” plugin-specific data.

Returns

A pointer to a plugin. This plugin copy must remain valid until the copy's destroy function is called on the copy. πŸ‘‘

See also

globus_ftp_client_plugin_destroy_t


🌈 globus_ftp_client_plugin_data_t β€” plugin data callback handler

typedef void(* globus_ftp_client_plugin_data_t) (globus_ftp_client_plugin_t *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle, globus_object_t *error, const globus_byte_t *buffer, globus_size_t length, globus_off_t offset, globus_bool_t eof)

Tells a plugin that a read or write operation it registered earlier has completed. πŸ“₯ The buffer pointer will match the one from a previous plugin read or write registration callback β€” same pointer, no switch-ups, iykyk.

Parameters

  • plugin β€” the plugin getting notified.
  • plugin_specific β€” plugin-specific data.
  • handle β€” the handle associated with the request.
  • error β€” an error which occurred while processing this command/response pair.
  • buffer β€” the buffer which was successfully transferred over the network. ✨
  • length β€” the amount of data to read or written.
  • offset β€” the offset into the file where this data buffer belongs.
  • eof β€” set to GLOBUS_TRUE if end-of-file is being processed for this transfer. 🏁

πŸ’œ globus_ftp_client_plugin_delete_t β€” plugin delete notification callback

typedef void(* globus_ftp_client_plugin_delete_t) (globus_ftp_client_plugin_t *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, globus_bool_t restart)

Tells a plugin that a delete is being requested on a client handle. It fires in both cases: when the user requests a delete, and when a plugin restarts the currently active delete request. πŸ”₯

And if this function isn't defined by the plugin, then no plugin callbacks associated with the delete will be called. None. Zero. 🫠

Parameters

  • plugin β€” the plugin getting notified.
  • plugin_specific β€” plugin-specific data.
  • handle β€” the handle associated with the delete operation.
  • url β€” the url to be deleted.
  • attr β€” the attributes to be used during this operation.
  • restart β€” set to GLOBUS_TRUE when this callback is caused by a plugin restarting the current delete operation; otherwise it's GLOBUS_FALSE.

πŸŽ€ globus_ftp_client_plugin_destroy_t β€” plugin destroy function

typedef void(* globus_ftp_client_plugin_destroy_t) (globus_ftp_client_plugin_t *plugin, void *plugin_specific)

This one frees a copy of a plugin, or drops its reference count β€” whichever applies. It's for a copy that got allocated by calling the instantiate function from the plugin. Bye bye, bestie. πŸ‘‹πŸ’–

Parameters

  • plugin β€” the plugin, created by the create function, which is to be destroyed.
  • plugin_specific β€” plugin-specific data.

πŸ’€ globus_ftp_client_plugin_fault_t β€” fault notification callback

typedef void(* globus_ftp_client_plugin_fault_t) (globus_ftp_client_plugin_t *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle, const char *url, globus_object_t *error)

Tells a plugin that a fault happened while processing the request. 😭 The fault might be internally generated, or it might come from a call to another library β€” either way, this is how you find out.

Parameters

  • plugin β€” the plugin getting notified.
  • plugin_specific β€” plugin-specific data.
  • handle β€” the handle associated with the request.
  • url β€” the url being processed when the fault ocurred.
  • error β€” an error object describing the fault.

⭐ globus_ftp_client_plugin_feat_t β€” plugin feat notification callback

typedef void(* globus_ftp_client_plugin_feat_t) (globus_ftp_client_plugin_t *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, globus_bool_t restart)

Tells a plugin that a feat is being requested on a client handle. It pops off both when the user requests a feat, and when a plugin restarts the currently active feat request. 🌟

If this function isn't defined by the plugin, then no plugin callbacks associated with the feat will be called. That's the deal. 🀷

Parameters

  • plugin β€” the plugin getting notified.
  • plugin_specific β€” plugin-specific data.
  • handle β€” the handle associated with the feat operation.
  • url β€” the url to be feat'd.
  • attr β€” the attributes to be used during this operation.
  • restart β€” set to GLOBUS_TRUE when this callback is caused by a plugin restarting the current feat operation; otherwise it's GLOBUS_FALSE.

🧚 globus_ftp_client_plugin_get_t β€” plugin get notification callback

typedef void(* globus_ftp_client_plugin_get_t) (globus_ftp_client_plugin_t *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, globus_bool_t restart)

Tells a plugin that a get is being requested on a client handle. Happens both when the user requests a get, and when a plugin restarts the currently active get request. πŸ“₯✨

If this function isn't defined by the plugin, then no plugin callbacks associated with the get will be called.

Parameters

  • plugin β€” the plugin getting notified.
  • plugin_specific β€” plugin-specific data.
  • handle β€” the handle associated with the get operation.
  • url β€” the url of the get operation.
  • attr β€” the attributes to be used during this transfer.
  • restart β€” set to GLOBUS_TRUE when this callback is caused by a plugin restarting the current get transfer; otherwise it's GLOBUS_FALSE.

🌺 globus_ftp_client_plugin_list_t β€” plugin list notification callback

typedef void(* globus_ftp_client_plugin_list_t) (globus_ftp_client_plugin_t *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, globus_bool_t restart)

Tells a plugin that a list is being requested on a client handle. Fires both when the user requests a list, and when a plugin restarts the currently active list request. πŸ“‹

If this function isn't defined by the plugin, then no plugin callbacks associated with the list will be called.

Parameters

  • plugin β€” the plugin getting notified.
  • plugin_specific β€” plugin-specific data.
  • handle β€” the handle associated with the list operation.
  • url β€” the url of the list operation.
  • attr β€” the attributes to be used during this transfer.
  • restart β€” set to GLOBUS_TRUE when this callback is caused by a plugin restarting the current list transfer; otherwise it's GLOBUS_FALSE.

πŸŒ™ globus_ftp_client_plugin_machine_list_t β€” plugin machine list notification callback

typedef void(* globus_ftp_client_plugin_machine_list_t) (globus_ftp_client_plugin_t *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle, const char *url, const globus_ftp_client_operationattr_t *attr, globus_bool_t restart)

This callback is your plugin's lil notification that a list is being asked for on a client handle. Bestie, it fires in both situations: when the user asks for a list, and when a plugin restarts the list request that's currently active. πŸ‘‘

Heads up fr fr: if this function is not defined by the plugin, then no plugin callbacks associated with the list will be called. Not a single one. That's the whole vibe check. πŸ’€

Parameters

  • plugin β€” the plugin which is being notified 🫢
  • plugin_specific β€” plugin-specific data
  • handle β€” the handle associated with the list operation
  • url β€” the url of the list operation
  • attr β€” the attributes to be used during this transfer
  • restart β€” this value is set to GLOBUS_TRUE when this callback is caused by a plugin restarting the current list transfer; otherwise, this is set to GLOBUS_FALSE ✨

🌸 globus_ftp_client_plugin_mkdir_t β€” Plugin mkdir notification callback

typedef void(* globus_ftp_client_plugin_mkdir_t) (globus_ftp_client_plugin_t
    *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle,
    const char *url, const globus_ftp_client_operationattr_t *attr,
    globus_bool_t restart)

This callback is used to notify a plugin that a mkdir is being requested on a client handle. It happens both when the user requests a mkdir, and when a plugin restarts the mkdir request that's currently active. two-for-one notification, we love to see it πŸŽ€

If this function is not defined by the plugin, then no plugin callbacks associated with the mkdir will be called. periodt.

Parameters

  • plugin β€” the plugin which is being notified πŸ’–
  • plugin_specific β€” plugin-specific data
  • handle β€” the handle associated with the mkdir operation
  • url β€” the url of the directory to create
  • attr β€” the attributes to be used during this operation
  • restart β€” this value is set to GLOBUS_TRUE when this callback is caused by a plugin restarting the current mkdir operation; otherwise, this is set to GLOBUS_FALSE

πŸ¦‹ globus_ftp_client_plugin_mlst_t β€” Plugin mlst notification callback

typedef void(* globus_ftp_client_plugin_mlst_t) (globus_ftp_client_plugin_t
    *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle,
    const char *url, const globus_ftp_client_operationattr_t *attr,
    globus_bool_t restart)

This callback is used to notify a plugin that a mlst is being requested on a client handle. This notification happens both when the user requests a list, and when a plugin restarts the currently active list request.

If this function is not defined by the plugin, then no plugin callbacks associated with the list will be called.

Parameters

  • plugin β€” the plugin which is being notified ✨
  • plugin_specific β€” plugin-specific data
  • handle β€” the handle associated with the list operation
  • url β€” the url of the list operation
  • attr β€” the attributes to be used during this transfer
  • restart β€” this value is set to GLOBUS_TRUE when this callback is caused by a plugin restarting the current list transfer; otherwise, this is set to GLOBUS_FALSE
πŸ‘€ okay so yes, the docs literally say "list" all over the mlst entry. Not me editing it β€” I'm just reading it to you exactly as it is, bestie. no cap. πŸ’…

⭐ globus_ftp_client_plugin_modification_time_t β€” Plugin modification time notification callback

typedef void(* globus_ftp_client_plugin_modification_time_t)
    (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
    globus_ftp_client_handle_t *handle, const char *url, const
    globus_ftp_client_operationattr_t *attr, globus_bool_t restart)

This callback is used to notify a plugin that a modification time check is being requested on a client handle. It fires both when the user requests the modification time of a file, and when a plugin restarts the request that's currently active. πŸ•

If this function is not defined by the plugin, then no plugin callbacks associated with the modification time request will be called.

Parameters

  • plugin β€” the plugin which is being notified 🫢
  • plugin_specific β€” plugin-specific data
  • handle β€” the handle associated with the list operation
  • url β€” the url of the list operation
  • attr β€” the attributes to be used during this transfer
  • restart β€” this value is set to GLOBUS_TRUE when this callback is caused by a plugin restarting the current list transfer; otherwise, this is set to GLOBUS_FALSE
and yes, the "list operation"/"list transfer" wording is verbatim from the page. I am but a humble messenger 🧚

πŸ”₯ globus_ftp_client_plugin_move_t β€” Plugin move notification callback

typedef void(* globus_ftp_client_plugin_move_t) (globus_ftp_client_plugin_t
    *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle,
    const char *source_url, const char *dest_url, const
    globus_ftp_client_operationattr_t *attr, globus_bool_t restart)

This callback is used to notify a plugin that a move is being requested on a client handle. Happens both when the user requests a move and when a plugin restarts the move request that's currently active. ✨

If this function is not defined by the plugin, then no plugin callbacks associated with the move will be called.

Parameters

  • plugin β€” the plugin which is being notified
  • plugin_specific β€” plugin-specific data
  • handle β€” the handle associated with the move operation
  • source_url β€” the source url of the move operation
  • dest_url β€” the destination url of the move operation
  • attr β€” the attributes to be used during this move
  • restart β€” this value is set to GLOBUS_TRUE when this callback is caused by a plugin restarting the current move transfer; otherwise, this is set to GLOBUS_FALSE πŸ’–

πŸ“ globus_ftp_client_plugin_put_t β€” Plugin put notification callback

typedef void(* globus_ftp_client_plugin_put_t) (globus_ftp_client_plugin_t
    *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle,
    const char *url, const globus_ftp_client_operationattr_t *attr,
    globus_bool_t restart)

This callback is used to notify a plugin that a put is being requested on a client handle. Fires both when the user requests a put and when a plugin restarts the put request that's currently active. sending files up, iconic behaviour 🌈

If this function is not defined by the plugin, then no plugin callbacks associated with the put will be called.

Parameters

  • plugin β€” the plugin which is being notified 🌸
  • plugin_specific β€” plugin-specific data
  • handle β€” the handle associated with the put operation
  • url β€” the url of the put operation
  • attr β€” the attributes to be used during this transfer
  • restart β€” this value is set to GLOBUS_TRUE when this callback is caused by a plugin restarting the current put transfer; otherwise, this is set to GLOBUS_FALSE

πŸŽ€ globus_ftp_client_plugin_read_t β€” Plugin read registration callback

typedef void(* globus_ftp_client_plugin_read_t) (globus_ftp_client_plugin_t
    *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle,
    const globus_byte_t *buffer, globus_size_t buffer_length)

This callback is used to notify a plugin that the client API has registered a buffer with the FTP control API for reading when processing a get. πŸ“₯

Parameters

  • plugin β€” the plugin which is being notified
  • plugin_specific β€” plugin-specific data
  • handle β€” the handle associated with the request
  • buffer β€” the data buffer to read into
  • buffer_length β€” the maximum amount of data to read into the buffer
note bestie: no restart param here, and no url or attr either. this one is built different. πŸ‘‘

πŸ’œ globus_ftp_client_plugin_recursive_list_t β€” Plugin recursive list notification callback

typedef void(* globus_ftp_client_plugin_recursive_list_t)
    (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
    globus_ftp_client_handle_t *handle, const char *url, const
    globus_ftp_client_operationattr_t *attr, globus_bool_t restart)

This callback is used to notify a plugin that a list is being requested on a client handle. This notification happens both when the user requests a list, and when a plugin restarts the currently active list request. πŸ’«

If this function is not defined by the plugin, then no plugin callbacks associated with the list will be called.

Parameters

  • plugin β€” the plugin which is being notified
  • plugin_specific β€” plugin-specific data
  • handle β€” the handle associated with the list operation
  • url β€” the url of the list operation
  • attr β€” the attributes to be used during this transfer
  • restart β€” this value is set to GLOBUS_TRUE when this callback is caused by a plugin restarting the current list transfer; otherwise, this is set to GLOBUS_FALSE ✨

🌟 globus_ftp_client_plugin_response_t β€” Response callback

typedef void(* globus_ftp_client_plugin_response_t)
    (globus_ftp_client_plugin_t *plugin, void *plugin_specific,
    globus_ftp_client_handle_t *handle, const char *url, globus_object_t
    *error, const globus_ftp_control_response_t *ftp_response)

This callback is used to notify a plugin that a FTP control response has occurred on a control connection. FTP response callbacks will come back to the user in the order which the commands were executed. The client library will only call this function for response callbacks associated with a command which is in the plugin's command mask, or associated with one of the other ftp operations with a defined callback in the plugin. πŸ”₯

Parameters

  • plugin β€” the plugin which is being notified
  • plugin_specific β€” plugin-specific data
  • handle β€” the handle associated with the request
  • url β€” the URL which this response came from
  • error β€” an error which occurred while processing this command/response pair
  • ftp_response β€” the response structure from the ftp control library

🧚 globus_ftp_client_plugin_rmdir_t β€” Plugin rmdir notification callback

typedef void(* globus_ftp_client_plugin_rmdir_t) (globus_ftp_client_plugin_t
    *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle,
    const char *url, const globus_ftp_client_operationattr_t *attr,
    globus_bool_t restart)

This callback is used to notify a plugin that a rmdir is being requested on a client handle. This notification happens both when the user requests a rmdir, and when a plugin restarts the currently active rmdir request. πŸ—‘οΈ

If this function is not defined by the plugin, then no plugin callbacks associated with the rmdir will be called.

Parameters

  • plugin β€” the plugin which is being notified πŸ’–
  • plugin_specific β€” plugin-specific data
  • handle β€” the handle associated with the rmdir operation
  • url β€” the url of the rmdir operation
  • attr β€” the attributes to be used during this operation
  • restart β€” this value is set to GLOBUS_TRUE when this callback is caused by a plugin restarting the current rmdir operation; otherwise, this is set to GLOBUS_FALSE

🌈 globus_ftp_client_plugin_size_t β€” Plugin size notification callback

typedef void(* globus_ftp_client_plugin_size_t) (globus_ftp_client_plugin_t
    *plugin, void *plugin_specific, globus_ftp_client_handle_t *handle,
    const char *url, const globus_ftp_client_operationattr_t *attr,
    globus_bool_t restart)

This callback is used to notify a plugin that a size check is being requested on a client handle. It happens both when the user requests the size of a file, and when a plugin restarts the request that's currently active. πŸ“

If this function is not defined by the plugin, then no plugin callbacks associated with the size request will be called.

okay so before we bounce to the next one, here are the params for the callback we were just vibing with 🫢:

  • plugin β€” the plugin which is being notified πŸ‘‘
  • plugin_specific β€” plugin-specific data, aka each plugin's own little stash of extras πŸ’œ
  • handle β€” the handle associated with the list operation ✨
  • url β€” the url of the list operation 🌸
  • attr β€” the attributes to be used during this transfer πŸŽ€
  • restart β€” this is GLOBUS_TRUE when a plugin is the whole reason we're restarting the current list transfer, and GLOBUS_FALSE any other time πŸ”

globus_ftp_client_plugin_stat_t

typedef void(* globus_ftp_client_plugin_stat_t) (globus_ftp_client_plugin_t *plugin,
                                                 void *plugin_specific,
                                                 globus_ftp_client_handle_t *handle,
                                                 const char *url,
                                                 const globus_ftp_client_operationattr_t *attr,
                                                 globus_bool_t restart)

Plugin stat notification callback. πŸŽ€

This is the lil messenger that tells a plugin hey bestie, somebody's asking for a stat on this client handle. And it fires in two situations, no cap: when the user asks for a list, and when a plugin restarts the list request that's currently active. Same callback, different plotline ✨

⚠️ real talk: if the plugin doesn't define this function, then none of the plugin callbacks tied to the list will get called. Like, zero. πŸ’€

Parameters

  • plugin β€” the plugin which is being notified πŸ‘‘
  • plugin_specific β€” plugin-specific data πŸ’œ
  • handle β€” the handle associated with the list operation ✨
  • url β€” the url of the list operation 🌸
  • attr β€” the attributes to be used during this transfer πŸŽ€
  • restart β€” GLOBUS_TRUE when a plugin is restarting the current list transfer, otherwise GLOBUS_FALSE πŸ”

typedef void(* globus_ftp_client_plugin_symlink_t) (globus_ftp_client_plugin_t *plugin,
                                                    void *plugin_specific,
                                                    globus_ftp_client_handle_t *handle,
                                                    const char *url,
                                                    const char *link_url,
                                                    const globus_ftp_client_operationattr_t *attr,
                                                    globus_bool_t restart)

Plugin symlink notification callback. πŸ¦‹

This one slides into a plugin's DMs to say a symlink is being requested on a client handle. It happens both when the user requests a symlink and when a plugin restarts the symlink request that's currently active. so iconic of it ✨

⚠️ if this function isn't defined by the plugin, then none of the plugin callbacks associated with the symlink get called. periodt. πŸ’…

Parameters

  • plugin β€” the plugin which is being notified πŸ‘‘
  • plugin_specific β€” plugin-specific data πŸ’œ
  • handle β€” the handle associated with the symlink operation ✨
  • url β€” the url of the new link 🌸
  • link_url β€” the url to which the new link should point 🎯
  • attr β€” the attributes to be used during this operation πŸŽ€
  • restart β€” GLOBUS_TRUE when a plugin is the cause of restarting the current utime operation, otherwise GLOBUS_FALSE πŸ” (yes bestie, the original really says utime there, we don't make the rules πŸ™ˆ)

globus_ftp_client_plugin_t

typedef struct globus_i_ftp_client_plugin_t* globus_ftp_client_plugin_t

FTP Client plugin. πŸ‘‘

An FTP Client plugin is the whole entire moment β€” it's how you add restart, monitoring, and performance tuning operations to the FTP Client library without touching the base API. And you're not limited to one, bestie: multiple plugins may be associated with a single globus_ftp_client_handle_t. polyamory but for callbacks πŸ’…

See also

  • globus_ftp_client_handle_init()
  • globus_ftp_client_handle_destroy()
  • globus_ftp_client_handleattr_t
  • Debugging Plugin

globus_ftp_client_plugin_third_party_transfer_t

typedef void(* globus_ftp_client_plugin_third_party_transfer_t) (globus_ftp_client_plugin_t *plugin,
                                                                 void *plugin_specific,
                                                                 globus_ftp_client_handle_t *handle,
                                                                 const char *source_url,
                                                                 const globus_ftp_client_operationattr_t *source_attr,
                                                                 const char *dest_url,
                                                                 const globus_ftp_client_operationattr_t *dest_attr,
                                                                 globus_bool_t restart)

Plugin third-party transfer notification callback. πŸ”₯

The notification that says a transfer is being requested on a client handle. Fires in two cases: when the user requests a transfer, and when a plugin restarts the transfer request that's currently active. main character behaviour fr fr ✨

⚠️ no definition of this function in the plugin? then none of the plugin callbacks associated with the third-party transfer get called. that's the rule 🫢

Parameters

  • plugin β€” the plugin which is being notified πŸ‘‘
  • plugin_specific β€” plugin-specific data πŸ’œ
  • handle β€” the handle associated with the transfer operation ✨
  • source_url β€” the source url of the transfer operation 🌸
  • source_attr β€” the attributes to be used during this transfer on the source πŸŽ€
  • dest_url β€” the destination url of the third-party transfer operation 🎯
  • dest_attr β€” the attributes to be used during this transfer on the destination πŸŽ€
  • restart β€” GLOBUS_TRUE when a plugin restarting the current transfer transfer is the cause, otherwise GLOBUS_FALSE πŸ” (and yes, "transfer transfer" is in there twice, we are simply relaying the lore 😭)

globus_ftp_client_plugin_utime_t

typedef void(* globus_ftp_client_plugin_utime_t) (globus_ftp_client_plugin_t *plugin,
                                                  void *plugin_specific,
                                                  globus_ftp_client_handle_t *handle,
                                                  const char *url,
                                                  const struct tm *utime_time,
                                                  const globus_ftp_client_operationattr_t *attr,
                                                  globus_bool_t restart)

Plugin utime notification callback. ⏰

Tells a plugin a utime is being requested on a client handle. Happens when the user requests a utime, and also when a plugin restarts the currently active utime request. double duty, no complaints 🌈

⚠️ if the plugin doesn't define this function, then none of the plugin callbacks associated with the utime will be called. full stop πŸ›‘

Parameters

  • plugin β€” the plugin which is being notified πŸ‘‘
  • plugin_specific β€” plugin-specific data πŸ’œ
  • handle β€” the handle associated with the utime operation ✨
  • url β€” the url to utime 🌸
  • utime_time β€” the modification time to change the file to πŸ•°οΈ
  • attr β€” the attributes to be used during this operation πŸŽ€
  • restart β€” GLOBUS_TRUE when a plugin restarting the current utime operation is the cause, otherwise GLOBUS_FALSE πŸ”

globus_ftp_client_plugin_verbose_list_t

typedef void(* globus_ftp_client_plugin_verbose_list_t) (globus_ftp_client_plugin_t *plugin,
                                                         void *plugin_specific,
                                                         globus_ftp_client_handle_t *handle,
                                                         const char *url,
                                                         const globus_ftp_client_operationattr_t *attr,
                                                         globus_bool_t restart)

Plugin verbose list notification callback. πŸ“œβœ¨

This is the one that goes bestie, a list is being requested on a client handle. It shows up when the user requests a list, and when a plugin restarts the currently active list request. yes it's very similar to the other list one, they're siblings, let them live πŸ’œ

⚠️ no function defined? then none of the plugin callbacks associated with the list will be called. it's giving all-or-nothing πŸ’€

Parameters

  • plugin β€” the plugin which is being notified πŸ‘‘
  • plugin_specific β€” plugin-specific data πŸ’œ
  • handle β€” the handle associated with the list operation ✨
  • url β€” the url of the list operation 🌸
  • attr β€” the attributes to be used during this transfer πŸŽ€
  • restart β€” GLOBUS_TRUE when a plugin is restarting the current list transfer, otherwise GLOBUS_FALSE πŸ”

globus_ftp_client_plugin_write_t

typedef void(* globus_ftp_client_plugin_write_t) (globus_ftp_client_plugin_t *plugin,
                                                  void *plugin_specific,
                                                  globus_ftp_client_handle_t *handle,
                                                  const globus_byte_t *buffer,
                                                  globus_size_t buffer_length,
                                                  globus_off_t offset,
                                                  globus_bool_t eof)

Plugin write registration callback. ✍️πŸ”₯

This one tells a plugin that the client API has registered a buffer with the FTP control API for writing while it's processing a put. it's the hey, we're about to write this heads-up 🌸

Parameters

  • plugin β€” the plugin which is being notified πŸ‘‘
  • plugin_specific β€” plugin-specific data πŸ’œ
  • handle β€” the handle associated with the request ✨
  • buffer β€” the buffer which is being written πŸ“¦
  • buffer_length β€” the amount of data in the buffer πŸ“
  • offset β€” the offset within the file where the buffer is to be written 🎯
  • eof β€” GLOBUS_TRUE if this is the last data buffer to be sent for this put request 🏁

globus_i_ftp_client_plugin_t

typedef struct globus_i_ftp_client_plugin_t globus_i_ftp_client_plugin_t

FTP Client Plugin. πŸ‘‘

Every plugin implementation is supposed to define a method for initializing one of these structures. And you've got options, bestie: plugins may be implemented as either a static function table, or as a specialized plugin with plugin-specific attributes. pick your fighter πŸ’…

Each plugin function may be either GLOBUS_NULL or a valid function pointer. And if the function is GLOBUS_NULL, then the plugin will not be notified when the corresponding event happens. simple as that 🫢


Enumeration Type Documentation πŸ”’

enum globus_ftp_client_plugin_command_mask_t

Command Mask. 🎭

This enumeration is literally just the list of command types that a plugin is interested in. choose your faves ✨

Enumerator

  • GLOBUS_FTP_CLIENT_CMD_MASK_CONTROL_ESTABLISHMENT β€” connect, authenticate πŸ”
  • GLOBUS_FTP_CLIENT_CMD_MASK_DATA_ESTABLISHMENT β€” PASV, PORT, SPOR, SPAS πŸ“‘
  • GLOBUS_FTP_CLIENT_CMD_MASK_TRANSFER_PARAMETERS β€” MODE, TYPE, STRU, OPTS RETR, DCAU βš™οΈ
  • GLOBUS_FTP_CLIENT_CMD_MASK_TRANSFER_MODIFIERS β€” ALLO, REST 🎚️
  • GLOBUS_FTP_CLIENT_CMD_MASK_FILE_ACTIONS β€” STOR, RETR, ESTO, ERET, APPE, LIST, NLST, MLSD, MLSR, GET, PUT πŸ“‚
  • GLOBUS_FTP_CLIENT_CMD_MASK_INFORMATION β€” HELP, SITE HELP, FEAT, STAT, SYST, SIZE ℹ️
  • GLOBUS_FTP_CLIENT_CMD_MASK_MISC β€” SITE, NOOP πŸŒ€
  • GLOBUS_FTP_CLIENT_CMD_MASK_BUFFER β€” SBUF, ABUF 🧺
  • GLOBUS_FTP_CLIENT_CMD_MASK_ALL β€” All possible commands πŸ‘‘πŸŒˆ (the whole menu, no crumbs)

Function Documentation πŸ› οΈ

globus_ftp_client_plugin_abort

globus_result_t globus_ftp_client_plugin_abort (globus_ftp_client_handle_t * handle)

Abort a transfer operation. πŸ›‘

This function will cause the currently executing transfer operation to be aborted. And when that happens, the order of operations is very specific, bestie, so listen up πŸ‘‚:

  1. all plugins get notified via their abort callbacks πŸ’…
  2. once those are processed, the complete callback gets called for all plugins 🫢
  3. and then it's called for the user's callback ✨

The complete callback will indicate that the transfer did not complete successfully. it's giving sad ending but at least everybody knows 😭

Parameters

  • handle β€” the handle which is associated with the transfer ✨

globus_ftp_client_plugin_add_data_channels

globus_result_t globus_ftp_client_plugin_add_data_channels (globus_ftp_client_handle_t * handle,
                                                            unsigned int num_channels,
                                                            unsigned int stripe)

Add data channels to an existing put transfer. βž•πŸ“‘

This function will cause the currently executing transfer operation to have additional data channels acquired β€” but only if the attribute set allows it. so like, only with permission, we're not rude πŸ’…

Parameters

  • handle β€” the handle which is associated with the transfer ✨
  • num_channels β€” the number of channels to add to the transfer πŸ”’
  • stripe β€” the stripe number to have the channels added to 🎯
Note β€” Do the plugins need to be notified when this happens? 🫠 (the docs literally left this as an open question, we're just passing the vibe along)

globus_ftp_client_plugin_remove_data_channels

globus_result_t globus_ftp_client_plugin_remove_data_channels (globus_ftp_client_handle_t * handle,
                                                               unsigned int num_channels,
                                                               unsigned int stripe)

Remove data channels from an existing put transfer. βž–πŸ“‘

This function will cause the currently executing transfer operation to have data channels removed β€” again, only if the attribute set allows it. consent is key πŸ”‘

Parameters

  • handle β€” the handle which is associated with the transfer ✨
  • num_channels β€” the number of channels to remove from the transfer πŸ”’
  • stripe β€” the stripe number to have the channels removed from 🎯
Note β€” Do the plugins need to be notified when this happens? 🫠 (same existential question as its sibling, love that for us)

πŸ’– globus_result_t globus_ftp_client_plugin_restart_chgrp

globus_result_t globus_ftp_client_plugin_restart_chgrp
    (globus_ftp_client_handle_t * handle, const char * url, const char *
    group, const globus_ftp_client_operationattr_t * attr, const
    globus_abstime_t * when)

Restart an existing chgrp. πŸ”

okay so this one literally makes the chgrp operation that's running right now get restarted. And when a restart happens, the operation gets silently aborted β€” like, no drama, no warning β€” and then restarted with potentially a new url and new attributes. Any data buffers that are currently queued get cleared out and reused once the connection is re-established. ✨

Heads up bestie: the user will not receive any notification that a restart has happened. None. Zero. Silent. πŸ™ˆ

Every plugin that's interested in chgrp events will get a chgrp callback with the restart boolean set to GLOBUS_TRUE.

Parameters

  • handle β€” the handle that's associated with the chgrp.
  • url β€” the destination URL of the transfer. This may be different than the original chgrp's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL.
  • group β€” the group name or ID to change the file to.
  • attr β€” the attributes to use for the new transfer. This may be a modified version of the original chgrp's attribute set.
  • when β€” absolute time for when to restart the chgrp. The current control and data connections will be stopped immediately. If this completes before when, then the restart will be delayed until that time. Otherwise, it will be immediately restarted.

🌸 globus_result_t globus_ftp_client_plugin_restart_chmod

globus_result_t globus_ftp_client_plugin_restart_chmod
    (globus_ftp_client_handle_t * handle, const char * url, int mode, const
    globus_ftp_client_operationattr_t * attr, const globus_abstime_t * when)

Restart an existing chmod. πŸ”

This function will cause the currently executing chmod operation to be restarted. When a restart happens, the operation will be silently aborted, and then restarted with potentially a new URL and attributes. Any data buffers which are currently queued will be cleared and reused once the connection is re-established. πŸ¦‹

The user will not receive any notification that a restart has happened. Each plugin which is interested in chmod events will receive a chmod callback with the restart boolean set to GLOBUS_TRUE.

Parameters

  • handle β€” the handle which is associated with the chmod.
  • url β€” the destination URL of the transfer. This may be different than the original chmod's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL.
  • mode β€” the file mode that will be applied. Must be an octal number representing the bit pattern for the new permissions.
  • attr β€” the attributes to use for the new transfer. This may be a modified version of the original chmod's attribute set.
  • when β€” absolute time for when to restart the chmod. The current control and data connections will be stopped immediately. If this completes before when, then the restart will be delayed until that time. Otherwise, it will be immediately restarted.

πŸŽ€ globus_result_t globus_ftp_client_plugin_restart_cksm

globus_result_t globus_ftp_client_plugin_restart_cksm
    (globus_ftp_client_handle_t * handle, const char * url, globus_off_t
    offset, globus_off_t length, const char * algorithm, const
    globus_ftp_client_operationattr_t * attr, const globus_abstime_t * when)

Restart an existing cksm. πŸ”

This function will cause the currently executing cksm operation to be restarted. When a restart happens, the operation will be silently aborted, and then restarted with potentially a new URL and attributes. Any data buffers which are currently queued will be cleared and reused once the connection is re-established. ✨

The user will not receive any notification that a restart has happened. Each plugin which is interested in cksm events will receive a cksm callback with the restart boolean set to GLOBUS_TRUE.

Parameters

  • handle β€” the handle which is associated with the cksm.
  • url β€” the destination URL of the transfer. This may be different than the original cksm's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL.
  • offset β€” file offset to start calculating checksum.
  • length β€” length of data to read from the starting offset. Use -1 to read the entire file.
  • algorithm β€” a pointer to a string to be filled with the checksum of the file. On error the value pointed to by it is undefined.
  • attr β€” the attributes to use for the new transfer. This may be a modified version of the original cksm's attribute set.
  • when β€” absolute time for when to restart the cksm. The current control and data connections will be stopped immediately. If this completes before when, then the restart will be delayed until that time. Otherwise, it will be immediately restarted.

πŸ’œ globus_result_t globus_ftp_client_plugin_restart_delete

globus_result_t globus_ftp_client_plugin_restart_delete
    (globus_ftp_client_handle_t * handle, const char * url, const
    globus_ftp_client_operationattr_t * attr, const globus_abstime_t * when)

Restart an existing delete. πŸ”

This function will cause the currently executing delete operation to be restarted. When a restart happens, the operation will be silently aborted, and then restarted with potentially a new URL and attributes. Any data buffers which are currently queued will be cleared and reused once the connection is re-established. 🌈

The user will not receive any notification that a restart has happened. Each plugin which is interested in delete events will receive a delete callback with the restart boolean set to GLOBUS_TRUE.

Parameters

  • handle β€” the handle which is associated with the delete.
  • url β€” the destination URL of the transfer. This may be different than the original delete's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL.
  • attr β€” the attributes to use for the new transfer. This may be a modified version of the original delete's attribute set.
  • when β€” absolute time for when to restart the delete. The current control and data connections will be stopped immediately. If this completes before when, then the restart will be delayed until that time. Otherwise, it will be immediately restarted.

πŸ¦‹ globus_result_t globus_ftp_client_plugin_restart_feat

globus_result_t globus_ftp_client_plugin_restart_feat
    (globus_ftp_client_handle_t * handle, const char * url, const
    globus_ftp_client_operationattr_t * attr, const globus_abstime_t * when)

Restart an existing feat. πŸ”

This function will cause the currently executing feat operation to be restarted. When a restart happens, the operation will be silently aborted, and then restarted with potentially a new URL and attributes. Any data buffers which are currently queued will be cleared and reused once the connection is re-established. ⭐

The user will not receive any notification that a restart has happened. Each plugin which is interested in feat events will receive a feat callback with the restart boolean set to GLOBUS_TRUE.

Parameters

  • handle β€” the handle which is associated with the feat.
  • url β€” the destination URL of the transfer. This may be different than the original feat's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL.
  • attr β€” the attributes to use for the new transfer. This may be a modified version of the original feat's attribute set.
  • when β€” absolute time for when to restart the feat. The current control and data connections will be stopped immediately. If this completes before when, then the restart will be delayed until that time. Otherwise, it will be immediately restarted.

πŸ‘‘ globus_result_t globus_ftp_client_plugin_restart_get

globus_result_t globus_ftp_client_plugin_restart_get
    (globus_ftp_client_handle_t * handle, const char * url, const
    globus_ftp_client_operationattr_t * attr,
    globus_ftp_client_restart_marker_t * restart_marker, const
    globus_abstime_t * when)

Restart an existing get. πŸ”

This function will cause the currently executing transfer operation to be restarted. When a restart happens, the operation will be silently aborted, and then restarted with potentially a new URL and attributes. Any data buffers which are currently queued will be cleared and reused once the connection is re-established. πŸ’–

The user will not receive any notification that a restart has happened. Each plugin which is interested in get events will receive a get callback with the restart boolean set to GLOBUS_TRUE.

Parameters

  • handle β€” the handle which is associated with the get.
  • url β€” the source URL of the transfer. This may be different than the original get's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL.
  • attr β€” the attributes to use for the new transfer. This may be a modified version of the original get's attribute set. This may be useful when the plugin wishes to send restart markers to the FTP server to prevent re-sending the data which has already been sent.
  • restart_marker β€” plugin-provided restart marker for resuming at a non-default restart point. This may be used to implement a persistent restart across process invocations. The default behavior if this is NULL is to use any restart information which has been received by the ftp client library while processing this operation when restarted.
  • when β€” absolute time for when to restart the get. The current control and data connections will be stopped immediately. If this completes before when, then the restart will be delayed until that time. Otherwise, it will be immediately restarted.

✨ globus_result_t globus_ftp_client_plugin_restart_get_marker

globus_result_t globus_ftp_client_plugin_restart_get_marker
    (globus_ftp_client_handle_t * handle, globus_ftp_client_restart_marker_t
    * marker)

Get restart marker 🎯

This function will allow this user to get the restart marker associated with a restarted file transfer. This function may only be called within the get, put, or third party transfer callback in which the 'restart' argument is GLOBUS_TRUE β€” like, that's the whole rule, no exceptions bestie. πŸ’…

Parameters

  • handle β€” the handle which is associated with the transfer.
  • marker β€” pointer to an uninitialized restart marker type.

Returns

  • Error on NULL handle or marker
  • Error on invalid use of function
  • GLOBUS_SUCCESS (marker will be populated)

🧚 globus_result_t globus_ftp_client_plugin_restart_list

globus_result_t globus_ftp_client_plugin_restart_list
    (globus_ftp_client_handle_t * handle, const char * url, const
    globus_ftp_client_operationattr_t * attr, const globus_abstime_t * when)

Restart an existing list. πŸ”

Parameters

  • handle β€” the handle that's holding this list, bestie 🫢
  • url β€” the destination URL of the transfer. Ok so this can literally be different from the original list's URL, if the plugin is like "mm no" and decides to redirect to another FTP server because the original one is giving performance or reliability problems 😭
  • attr β€” the attributes to use for the new transfer. Could be a modified version of the original list's attribute set, no biggie πŸ’…
  • when β€” the absolute time for when to restart the list. The current control and data connections get stopped immediately. If that finishes before when, then the restart is delayed until that time. Otherwise? It restarts immediately, periodt ⚑

✨ globus_result_t globus_ftp_client_plugin_restart_machine_list ✨

globus_result_t globus_ftp_client_plugin_restart_machine_list
    (globus_ftp_client_handle_t * handle, const char * url, const
    globus_ftp_client_operationattr_t * attr, const globus_abstime_t * when)

Restart an existing machine list. πŸ‘‘

This function makes the currently executing transfer operation restart. When a restart happens, the operation gets silently aborted, and then restarted with potentially a new URL and attributes. Any data buffers currently queued get cleared and reused once the connection is re-established πŸ¦‹

The user gets no notification that a restart happened β€” like, none. Every plugin that's interested in list events will receive a list callback with the restart boolean set to GLOBUS_TRUE πŸ’«

Parameters

  • handle β€” the handle that's associated with the list
  • url β€” the destination URL of the transfer. May be different from the original list's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL πŸ™ˆ
  • attr β€” the attributes to use for the new transfer. May be a modified version of the original list's attribute set
  • when β€” absolute time for when to restart the list. The current control and data connections are stopped immediately. If this completes before when, the restart is delayed until that time. Otherwise it's immediately restarted ⏰

🌸 globus_result_t globus_ftp_client_plugin_restart_mkdir 🌸

globus_result_t globus_ftp_client_plugin_restart_mkdir
    (globus_ftp_client_handle_t * handle, const char * url, const
    globus_ftp_client_operationattr_t * attr, const globus_abstime_t * when)

Restart an existing mkdir. πŸŽ€

This function makes the currently executing operation restart. When a restart happens, the operation is silently aborted, and then restarted with potentially a new URL and attributes. Any data buffers currently queued get cleared and reused once the connection is re-established ✨

The user gets no notification that a restart happened. Every plugin interested in mkdir events will receive a mkdir callback with the restart boolean set to GLOBUS_TRUE πŸ’–

Parameters

  • handle β€” the handle that's associated with the mkdir
  • url β€” the destination URL of the transfer. May be different from the original mkdir's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL
  • attr β€” the attributes to use for the new transfer. May be a modified version of the original mkdir's attribute set
  • when β€” absolute time for when to restart the mkdir. The current control and data connections are stopped immediately. If this completes before when, the restart is delayed until that time. Otherwise it's immediately restarted πŸ•

πŸ¦‹ globus_result_t globus_ftp_client_plugin_restart_mlst πŸ¦‹

globus_result_t globus_ftp_client_plugin_restart_mlst
    (globus_ftp_client_handle_t * handle, const char * url, const
    globus_ftp_client_operationattr_t * attr, const globus_abstime_t * when)

Restart an existing MLST. ⭐

This function makes the currently executing transfer operation restart. When a restart happens, the operation is silently aborted, and then restarted with potentially a new URL and attributes. Any data buffers currently queued get cleared and reused once the connection is re-established 🌈

The user gets no notification that a restart happened. Every plugin interested in list events will receive a list callback with the restart boolean set to GLOBUS_TRUE πŸ’œ

Parameters

  • handle β€” the handle that's associated with the list
  • url β€” the destination URL of the transfer. May be different from the original list's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL
  • attr β€” the attributes to use for the new transfer. May be a modified version of the original list's attribute set
  • when β€” absolute time for when to restart the list. The current control and data connections are stopped immediately. If this completes before when, the restart is delayed until that time. Otherwise it's immediately restarted βŒ›

πŸ“ globus_result_t globus_ftp_client_plugin_restart_modification_time πŸ“

globus_result_t globus_ftp_client_plugin_restart_modification_time
    (globus_ftp_client_handle_t * handle, const char * url, const
    globus_ftp_client_operationattr_t * attr, const globus_abstime_t * when)

Restart a modification time check operation. πŸ•°οΈ

This function makes the currently executing modification time check operation restart. When a restart happens, the operation is silently aborted, and then restarted with potentially a new URL and attributes.

Heads up bestie: this one does not mention any data buffers being cleared and reused β€” the original says it, so I'm saying it. No invented lore here πŸ’€

The user gets no notification that a restart happened. Every plugin interested in modification time operations will receive a modification time callback with the restart boolean set to GLOBUS_TRUE ✨

Parameters

  • handle β€” the handle that's associated with the operation
  • url β€” the source URL of the modification time check. May be different from the original operations URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL
  • attr β€” the attributes to use for the new operation. May be a modified version of the original operations's attribute set
  • when β€” absolute time for when to restart the modification time check. The current control and data connections are stopped immediately. If this completes before when, the restart is delayed until that time. Otherwise it's immediately restarted ⏳

🧚 globus_result_t globus_ftp_client_plugin_restart_move 🧚

globus_result_t globus_ftp_client_plugin_restart_move
    (globus_ftp_client_handle_t * handle, const char * source_url, const
    char * dest_url, const globus_ftp_client_operationattr_t * attr, const
    globus_abstime_t * when)

Restart an existing move. 🚚

This function makes the currently executing move operation restart. When a restart happens, the operation is silently aborted, and then restarted with potentially new URLs and attributes. (Yes, plural URLs, this one has two πŸ‘―)

The user gets no notification that a restart happened. Every plugin interested in get events will receive a move callback with the restart boolean set to GLOBUS_TRUE πŸ’«

Parameters

  • handle β€” the handle that's associated with the move
  • source_url β€” the source URL of the move. May be different from the original get's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL
  • dest_url β€” the destination URL of the move. May be different from the original get's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL. Note that only the path component of this URL is used. πŸ‘€
  • attr β€” the attributes to use for the new transfer. May be a modified version of the original move's attribute set. This may be useful when the plugin wishes to send restart markers to the FTP server to prevent re-sending the data which has already been sent πŸ™Œ
  • when β€” absolute time for when to restart the move. The current control and data connections are stopped immediately. If this completes before when, the restart is delayed until that time. Otherwise it's immediately restarted πŸ•

πŸ‘‘ globus_result_t globus_ftp_client_plugin_restart_put πŸ‘‘

globus_result_t globus_ftp_client_plugin_restart_put
    (globus_ftp_client_handle_t * handle, const char * url, const
    globus_ftp_client_operationattr_t * attr,
    globus_ftp_client_restart_marker_t * restart_marker, const
    globus_abstime_t * when)

Restart an existing put. πŸ’…

This function makes the currently executing transfer operation restart. When a restart happens, the operation is silently aborted, and then restarted with potentially a new URL and attributes. Any data buffers currently queued but not called back will be resent once the connection is re-established πŸ”

Not me noticing this one has a whole extra param, restart_marker, that the others don't πŸ‘€ it's in the signature, it's real, it's iconic.

The user gets no notification that a restart happened. Every plugin interested in get events will receive a put callback with the restart boolean set to GLOBUS_TRUE πŸ’–

πŸ’… Parameters πŸ’…

  • handle β€” the handle that's riding with this put 🫢
  • url β€” the URL of the transfer. Lowkey it can be different from the original put's URL, if the plugin decides to redirect to another FTP server because the original one is giving performance or reliability problems 😭 If the put gets restarted with a different URL, the plugin must re-send any data that its callback has already acknowledged. No cap.
  • attr β€” the attributes to use for the new transfer. This can be a modified version of the original put's attribute set ✨ Which is super handy when the plugin wants to send restart markers to the FTP server so it doesn't re-send data that's already been sent. Iconic.
  • restart_marker β€” a plugin-provided restart marker for resuming at a non-default restart point. Use this if you want a persistent restart that survives across process invocations πŸ‘‘ The default behavior when this is NULL is to use whatever restart info the ftp client library received while processing this operation, when it gets restarted.
  • when β€” absolute time for when to restart the put ⏰ The current control and data connections get stopped immediately. If this completes before when, then the restart is delayed until that time. Otherwise, it restarts immediately.

globus_result_t globus_ftp_client_plugin_restart_recursive_list (globus_ftp_client_handle_t * handle, const char * url, const globus_ftp_client_operationattr_t * attr, const globus_abstime_t * when)

Restart an existing recursive list. πŸ¦‹

This function will cause the currently executing transfer operation to be restarted. When a restart happens, the operation gets silently aborted, and then restarted with potentially a new URL and attributes. Any data buffers that are currently queued get cleared and reused once the connection is re-established.

The user will not receive any notification that a restart has happened πŸ™ˆ Each plugin that's interested in list events will receive a list callback with the restart boolean set to GLOBUS_TRUE.

Parameters

  • handle β€” the handle that's associated with the list
  • url β€” the destination URL of the transfer. This may be different than the original list's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL.
  • attr β€” the attributes to use for the new transfer. This may be a modified version of the original list's attribute set.
  • when β€” absolute time for when to restart the list. The current control and data connections will be stopped immediately. If this completes before when, then the restart will be delayed until that time. Otherwise, it will be immediately restarted.

globus_result_t globus_ftp_client_plugin_restart_rmdir (globus_ftp_client_handle_t * handle, const char * url, const globus_ftp_client_operationattr_t * attr, const globus_abstime_t * when)

Restart an existing rmdir. πŸŽ€

This function will cause the currently executing operation to be restarted. When a restart happens, the operation gets silently aborted, and then restarted with potentially a new URL and attributes. Any data buffers that are currently queued will be cleared and reused once the connection is re-established.

The user will not receive any notification that a restart has happened πŸ™ˆ Each plugin that's interested in rmdir events will receive a rmdir callback with the restart boolean set to GLOBUS_TRUE.

Parameters

  • handle β€” the handle that's associated with the rmdir
  • url β€” the destination URL of the transfer. This may be different than the original rmdir's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL.
  • attr β€” the attributes to use for the new transfer. This may be a modified version of the original rmdir's attribute set.
  • when β€” absolute time for when to restart the rmdir. The current control and data connections will be stopped immediately. If this completes before when, then the restart will be delayed until that time. Otherwise, it will be immediately restarted.

globus_result_t globus_ftp_client_plugin_restart_size (globus_ftp_client_handle_t * handle, const char * url, const globus_ftp_client_operationattr_t * attr, const globus_abstime_t * when)

Restart a size check operation. 🌸

This function will cause the currently executing size check operation to be restarted. When a restart happens, the operation gets silently aborted, and then restarted with potentially a new URL and attributes.

The user will not receive any notification that a restart has happened πŸ™ˆ Each plugin that's interested in size operations will receive a size callback with the restart boolean set to GLOBUS_TRUE.

Parameters

  • handle β€” the handle that's associated with the operation
  • url β€” the source URL of the size check. This may be different than the original operation's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL.
  • attr β€” the attributes to use for the new operation. This may be a modified version of the original operation's attribute set.
  • when β€” absolute time for when to restart the size check. The current control and data connections will be stopped immediately. If this completes before when, then the restart will be delayed until that time. Otherwise, it will be immediately restarted.

globus_result_t globus_ftp_client_plugin_restart_stat (globus_ftp_client_handle_t * handle, const char * url, const globus_ftp_client_operationattr_t * attr, const globus_abstime_t * when)

Restart an existing STAT. ⭐

This function will cause the currently executing transfer operation to be restarted. When a restart happens, the operation gets silently aborted, and then restarted with potentially a new URL and attributes. Any data buffers that are currently queued will be cleared and reused once the connection is re-established.

The user will not receive any notification that a restart has happened πŸ™ˆ Each plugin that's interested in list events will receive a list callback with the restart boolean set to GLOBUS_TRUE.

Parameters

  • handle β€” the handle that's associated with the list
  • url β€” the destination URL of the transfer. This may be different than the original list's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL.
  • attr β€” the attributes to use for the new transfer. This may be a modified version of the original list's attribute set.
  • when β€” absolute time for when to restart the list. The current control and data connections will be stopped immediately. If this completes before when, then the restart will be delayed until that time. Otherwise, it will be immediately restarted.

Restart an existing symlink. 🧚

This function will cause the currently executing symlink operation to be restarted. When a restart happens, the operation gets silently aborted, and then restarted with potentially a new URL and attributes. Any data buffers that are currently queued will be cleared and reused once the connection is re-established.

The user will not receive any notification that a restart has happened πŸ™ˆ Each plugin that's interested in chgrp events will receive a chgrp callback with the restart boolean set to GLOBUS_TRUE.

Parameters

  • handle β€” the handle that's associated with the chgrp
  • url β€” the destination URL of the transfer. This may be different than the original symlink's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL.
  • link_url β€” the URL to symbolically link the file to
  • attr β€” the attributes to use for the new transfer. This may be a modified version of the original symlink's attribute set.
  • when β€” absolute time for when to restart the symlink. The current control and data connections will be stopped immediately. If this completes before when, then the restart will be delayed until that time. Otherwise, it will be immediately restarted.

globus_result_t globus_ftp_client_plugin_restart_third_party_transfer (globus_ftp_client_handle_t * handle, const char * source_url, const globus_ftp_client_operationattr_t * source_attr, const char * dest_url, const globus_ftp_client_operationattr_t * dest_attr, globus_ftp_client_restart_marker_t * restart_marker, const globus_abstime_t * when)

Restart an existing third-party transfer. πŸ”₯

This function will cause the currently executing transfer operation to be restarted. When a restart happens, the operation gets silently aborted, and then restarted with potentially a new URLs and attributes.

The user will not receive any notification that a restart has happened πŸ™ˆ Each plugin that's interested in third-party transfer events will receive a transfer callback with the restart boolean set to GLOBUS_TRUE.

✨ Parameters ✨

  • handle β€” the handle which is associated with the transfer. 🫢
  • source_url β€” the source URL of the transfer. This may be different than the original URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL.
  • source_attr β€” the attributes to use for the new transfer. This may be a modified version of the original transfer's attribute set. This may be useful when the plugin wishes to send restart markers to the FTP server to prevent re-sending the data which has already been sent.
  • dest_url β€” the destination URL of the transfer. This may be different than the original destination URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL.
  • dest_attr β€” the attributes to use for the new transfer. This may be a modified version of the original transfer's attribute set. This may be useful when the plugin wishes to send restart markers to the FTP server to prevent re-sending the data which has already been sent.
  • restart_marker β€” Plugin-provided restart marker for resuming at a non-default restart point. This may be used to implement a persistent restart across process invocations. The default behavior if this is NULL is to use any restart information which has been received by the ftp client library while processing this operation when restarted.
  • when β€” Absolute time for when to restart the transfer. The current control and data connections will be stopped immediately. If this completes before when, then the restart will be delayed until that time. Otherwise, it will be immediately restarted.

globus_result_t globus_ftp_client_plugin_restart_utime

globus_result_t globus_ftp_client_plugin_restart_utime
    (globus_ftp_client_handle_t * handle, const char * url, const struct tm
    * utime_time, const globus_ftp_client_operationattr_t * attr, const
    globus_abstime_t * when)

Restart an existing utime. ✨

This function will cause the currently executing utime operation to be restarted. When a restart happens, the operation will be silently aborted, and then restarted with potentially a new URL and attributes. Any data buffers which are currently queued will be cleared and reused once the connection is re-established.

The user will not receive any notification that a restart has happened. Each plugin which is interested in utime events will receive a utime callback with the restart boolean set to GLOBUS_TRUE.

Parameters πŸ’–

  • handle β€” the handle which is associated with the chgrp. (yes bestie, it says chgrp, we're just the messengers 😭)
  • url β€” the destination URL of the transfer. This may be different than the original utime's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL.
  • utime_time β€” the time value to change the file to.
  • attr β€” the attributes to use for the new transfer. This may be a modified version of the original utime's attribute set.
  • when β€” Absolute time for when to restart the utime. The current control and data connections will be stopped immediately. If this completes before when, then the restart will be delayed until that time. Otherwise, it will be immediately restarted.

globus_result_t globus_ftp_client_plugin_restart_verbose_list

globus_result_t globus_ftp_client_plugin_restart_verbose_list
    (globus_ftp_client_handle_t * handle, const char * url, const
    globus_ftp_client_operationattr_t * attr, const globus_abstime_t * when)

Restart an existing verbose list. 🌸

This function will cause the currently executing transfer operation to be restarted. When a restart happens, the operation will be silently aborted, and then restarted with potentially a new URL and attributes. Any data buffers which are currently queued will be cleared and reused once the connection is re-established.

The user will not receive any notification that a restart has happened. Each plugin which is interested in list events will receive a list callback with the restart boolean set to GLOBUS_TRUE.

Parameters πŸŽ€

  • handle β€” the handle which is associated with the list.
  • url β€” the destination URL of the transfer. This may be different than the original list's URL, if the plugin decides to redirect to another FTP server due to performance or reliability problems with the original URL.
  • attr β€” the attributes to use for the new transfer. This may be a modified version of the original list's attribute set.
  • when β€” Absolute time for when to restart the list. The current control and data connections will be stopped immediately. If this completes before when, then the restart will be delayed until that time. Otherwise, it will be immediately restarted.

✨ Author ✨

Generated automatically by Doxygen for globus_ftp_client from the source code. πŸ€–πŸ’…

That's the whole page, bestie. This iconic manual is from globus_ftp_client, Version 9.9, and it's globus_ftp...ent_plugins(3) β€” no cap, periodt. πŸ’–βœ¨
πŸ“¦ where this page comes from