00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL
00018
00022 #endif
00023
00024 #ifndef GLOBUS_I_FTP_CLIENT_H
00025 #define GLOBUS_I_FTP_CLIENT_H
00026
00027 #include "globus_common.h"
00028 #include "globus_ftp_client.h"
00029 #include "globus_ftp_client_plugin.h"
00030 #include "globus_error_string.h"
00031 #include "globus_xio.h"
00032
00033 #define GLOBUS_L_FTP_CLIENT_SSH_EXEC_SCRIPT "gridftp-ssh"
00034
00035 #define GLOBUS_L_FTP_CLIENT_CLIENTINFO_APPNAME "libglobus_ftp_client"
00036
00037 #ifdef __cplusplus
00038 extern "C" {
00039 #endif
00040
00041 #ifdef DEBUG_LOCKS
00042 #define globus_i_ftp_client_handle_lock(handle) \
00043 printf("locking handle %p at %s:%d\n", (handle), __FILE__, __LINE__), \
00044 globus_mutex_lock(&(handle)->mutex)
00045 #define globus_i_ftp_client_handle_unlock(handle) \
00046 printf("unlocking handle %p at %s:%d\n", (handle), __FILE__, __LINE__), \
00047 globus_mutex_unlock(&(handle)->mutex)
00048 #define globus_i_ftp_client_data_target_lock(data_target) \
00049 printf("locking data_target %p at %s:%d\n", (data_target), __FILE__, __LINE__), \
00050 globus_mutex_lock(&(data_target)->mutex)
00051 #define globus_i_ftp_client_data_target_unlock(data_target) \
00052 printf("unlocking data_target %p at %s:%d\n", (data_target), __FILE__, __LINE__), \
00053 globus_mutex_unlock(&(data_target)->mutex)
00054 #else
00055 #define globus_i_ftp_client_handle_lock(handle) \
00056 globus_mutex_lock(&handle->mutex)
00057 #define globus_i_ftp_client_handle_unlock(handle) \
00058 globus_mutex_unlock(&handle->mutex)
00059 #define globus_i_ftp_client_data_target_lock(data_target) \
00060 globus_mutex_lock(&(data_target)->mutex)
00061 #define globus_i_ftp_client_data_target_unlock(data_target) \
00062 globus_mutex_unlock(&(data_target)->mutex)
00063 #endif
00064
00070 #define GLOBUS_FTP_CLIENT_MAGIC_STRING "FTPClient-1.0"
00071
00072 #ifdef BUILD_DEBUG
00073 #define GLOBUS_I_FTP_CLIENT_BAD_MAGIC(h) \
00074 (!(h && (*h) && \
00075 !strcmp(((*h))->magic, \
00076 GLOBUS_FTP_CLIENT_MAGIC_STRING)))
00077 #else
00078 #define GLOBUS_I_FTP_CLIENT_BAD_MAGIC(h) 0
00079 #endif
00080
00081 extern int globus_i_ftp_client_debug_level;
00082
00083 #ifdef BUILD_DEBUG
00084 #define globus_i_ftp_client_debug(Level) \
00085 (globus_i_ftp_client_debug_level >= (Level))
00086
00087 #define globus_i_ftp_client_debug_printf(level, message) \
00088 do { \
00089 if (globus_i_ftp_client_debug(level)) \
00090 { \
00091 globus_libc_fprintf message; \
00092 } \
00093 } while (0)
00094
00095 #define globus_i_ftp_client_debug_states(level, handle) \
00096 do { \
00097 if(handle != NULL) \
00098 { \
00099 globus_i_ftp_client_debug_printf(level, (stderr, \
00100 " handle state = %s\n" \
00101 " source state = %s\n" \
00102 " dest state = %s\n", \
00103 globus_i_ftp_handle_state_to_string(handle->state), \
00104 handle->source \
00105 ? globus_i_ftp_target_state_to_string(handle->source->state) \
00106 : "NULL", \
00107 handle->dest \
00108 ? globus_i_ftp_target_state_to_string(handle->dest->state) \
00109 : "NULL")); \
00110 } \
00111 else \
00112 { \
00113 globus_i_ftp_client_debug_printf(level, (stderr, "handle is null\n")); \
00114 } \
00115 } while(0)
00116
00117 #else
00118 #define globus_i_ftp_client_debug_printf(level, message)
00119 #define globus_i_ftp_client_debug_states(level, handle)
00120 #endif
00121
00122
00123 #define GLOBUS_I_FTP_CLIENT_NOOP_IDLE 15
00124
00125
00126
00127
00131 typedef struct globus_i_ftp_client_operationattr_t
00132 {
00133 globus_ftp_control_parallelism_t parallelism;
00134 globus_bool_t force_striped;
00135 globus_ftp_control_layout_t layout;
00136 globus_ftp_control_tcpbuffer_t buffer;
00137 globus_bool_t using_default_auth;
00138 globus_ftp_control_auth_info_t auth_info;
00139 globus_ftp_control_type_t type;
00140 globus_ftp_control_mode_t mode;
00141 globus_bool_t list_uses_data_mode;
00142 globus_bool_t append;
00143 globus_ftp_control_dcau_t dcau;
00144 globus_ftp_control_protection_t data_prot;
00145 globus_bool_t resume_third_party;
00146 globus_bool_t read_all;
00147 globus_ftp_client_data_callback_t read_all_intermediate_callback;
00148 void * read_all_intermediate_callback_arg;
00149 globus_bool_t allow_ipv6;
00150 globus_off_t allocated_size;
00151 globus_bool_t cwd_first;
00152 char * authz_assert;
00153 globus_bool_t cache_authz_assert;
00154 globus_bool_t delayed_pasv;
00155 char * net_stack_str;
00156 char * disk_stack_str;
00157 char * module_alg_str;
00158 char * clientinfo_argstr;
00159 int dcsc_type;
00160 void * dcsc_cred;
00161 gss_cred_id_t dcsc_p_cred;
00162 char * dcsc_blob;
00163 }
00164 globus_i_ftp_client_operationattr_t;
00165
00175 typedef struct
00176 {
00180 globus_off_t offset;
00181
00185 globus_off_t end_offset;
00186 }
00187 globus_i_ftp_client_range_t;
00188
00193 typedef struct globus_i_ftp_client_handleattr_t
00194 {
00202 globus_bool_t cache_all;
00203
00208 globus_bool_t rfc1738_url;
00209
00214 globus_bool_t gridftp2;
00215
00223 globus_list_t * url_cache;
00231 globus_list_t * plugins;
00232
00233 globus_size_t outstanding_commands;
00234 globus_ftp_client_pipeline_callback_t pipeline_callback;
00235 void * pipeline_arg;
00236 globus_bool_t pipeline_done;
00237
00238
00239
00240
00241 globus_bool_t nl_ftp;
00242 globus_bool_t nl_io;
00243 globus_netlogger_handle_t * nl_handle;
00244
00245
00246 char * clientinfo_app_name;
00247 char * clientinfo_app_ver;
00248 char * clientinfo_other;
00249 }
00250 globus_i_ftp_client_handleattr_t;
00251
00252
00256 typedef enum
00257 {
00258 GLOBUS_FTP_CLIENT_HANDLE_START,
00259 GLOBUS_FTP_CLIENT_HANDLE_SOURCE_CONNECT,
00260 GLOBUS_FTP_CLIENT_HANDLE_SOURCE_SETUP_CONNECTION,
00261 GLOBUS_FTP_CLIENT_HANDLE_SOURCE_LIST,
00262 GLOBUS_FTP_CLIENT_HANDLE_SOURCE_RETR_OR_ERET,
00263 GLOBUS_FTP_CLIENT_HANDLE_DEST_CONNECT,
00264 GLOBUS_FTP_CLIENT_HANDLE_DEST_SETUP_CONNECTION,
00265 GLOBUS_FTP_CLIENT_HANDLE_DEST_STOR_OR_ESTO,
00266 GLOBUS_FTP_CLIENT_HANDLE_ABORT,
00267 GLOBUS_FTP_CLIENT_HANDLE_RESTART,
00268 GLOBUS_FTP_CLIENT_HANDLE_FAILURE,
00269
00270
00271
00272
00273 GLOBUS_FTP_CLIENT_HANDLE_THIRD_PARTY_TRANSFER,
00274 GLOBUS_FTP_CLIENT_HANDLE_THIRD_PARTY_TRANSFER_ONE_COMPLETE,
00275 GLOBUS_FTP_CLIENT_HANDLE_FINALIZE
00276 }
00277 globus_ftp_client_handle_state_t;
00278
00282 typedef enum
00283 {
00284 GLOBUS_FTP_CLIENT_IDLE,
00285 GLOBUS_FTP_CLIENT_CHMOD,
00286 GLOBUS_FTP_CLIENT_CHGRP,
00287 GLOBUS_FTP_CLIENT_UTIME,
00288 GLOBUS_FTP_CLIENT_SYMLINK,
00289 GLOBUS_FTP_CLIENT_DELETE,
00290 GLOBUS_FTP_CLIENT_MKDIR,
00291 GLOBUS_FTP_CLIENT_RMDIR,
00292 GLOBUS_FTP_CLIENT_MOVE,
00293 GLOBUS_FTP_CLIENT_LIST,
00294 GLOBUS_FTP_CLIENT_NLST,
00295 GLOBUS_FTP_CLIENT_MLSD,
00296 GLOBUS_FTP_CLIENT_MLSR,
00297 GLOBUS_FTP_CLIENT_MLST,
00298 GLOBUS_FTP_CLIENT_STAT,
00299 GLOBUS_FTP_CLIENT_GET,
00300 GLOBUS_FTP_CLIENT_PUT,
00301 GLOBUS_FTP_CLIENT_TRANSFER,
00302 GLOBUS_FTP_CLIENT_MDTM,
00303 GLOBUS_FTP_CLIENT_SIZE,
00304 GLOBUS_FTP_CLIENT_CKSM,
00305 GLOBUS_FTP_CLIENT_FEAT,
00306 GLOBUS_FTP_CLIENT_CWD
00307 }
00308 globus_i_ftp_client_operation_t;
00309
00310 typedef enum
00311 {
00312 GLOBUS_FTP_CLIENT_TARGET_START,
00313 GLOBUS_FTP_CLIENT_TARGET_CONNECT,
00314 GLOBUS_FTP_CLIENT_TARGET_AUTHENTICATE,
00315 GLOBUS_FTP_CLIENT_TARGET_SETUP_SITE_FAULT,
00316 GLOBUS_FTP_CLIENT_TARGET_SITE_FAULT,
00317 GLOBUS_FTP_CLIENT_TARGET_SETUP_SITE_HELP,
00318 GLOBUS_FTP_CLIENT_TARGET_SITE_HELP,
00319 GLOBUS_FTP_CLIENT_TARGET_FEAT,
00320 GLOBUS_FTP_CLIENT_TARGET_SETUP_CONNECTION,
00321 GLOBUS_FTP_CLIENT_TARGET_SETUP_CLIENTINFO,
00322 GLOBUS_FTP_CLIENT_TARGET_CLIENTINFO,
00323 GLOBUS_FTP_CLIENT_TARGET_SETUP_TYPE,
00324 GLOBUS_FTP_CLIENT_TARGET_TYPE,
00325 GLOBUS_FTP_CLIENT_TARGET_SETUP_MODE,
00326 GLOBUS_FTP_CLIENT_TARGET_MODE,
00327 GLOBUS_FTP_CLIENT_TARGET_SETUP_SIZE,
00328 GLOBUS_FTP_CLIENT_TARGET_SIZE,
00329 GLOBUS_FTP_CLIENT_TARGET_SETUP_CKSM,
00330 GLOBUS_FTP_CLIENT_TARGET_CKSM,
00331 GLOBUS_FTP_CLIENT_TARGET_SETUP_DCSC,
00332 GLOBUS_FTP_CLIENT_TARGET_DCSC,
00333 GLOBUS_FTP_CLIENT_TARGET_SETUP_DCAU,
00334 GLOBUS_FTP_CLIENT_TARGET_DCAU,
00335 GLOBUS_FTP_CLIENT_TARGET_SETUP_PBSZ,
00336 GLOBUS_FTP_CLIENT_TARGET_PBSZ,
00337 GLOBUS_FTP_CLIENT_TARGET_SETUP_PROT,
00338 GLOBUS_FTP_CLIENT_TARGET_PROT,
00339 GLOBUS_FTP_CLIENT_TARGET_SETUP_BUFSIZE,
00340 GLOBUS_FTP_CLIENT_TARGET_BUFSIZE,
00341 GLOBUS_FTP_CLIENT_TARGET_SETUP_REMOTE_RETR_OPTS,
00342 GLOBUS_FTP_CLIENT_TARGET_REMOTE_RETR_OPTS,
00343 GLOBUS_FTP_CLIENT_TARGET_SETUP_LOCAL_RETR_OPTS,
00344 GLOBUS_FTP_CLIENT_TARGET_LOCAL_RETR_OPTS,
00345 GLOBUS_FTP_CLIENT_TARGET_OPTS_PASV_DELAYED,
00346 GLOBUS_FTP_CLIENT_TARGET_SETUP_PASV,
00347 GLOBUS_FTP_CLIENT_TARGET_PASV,
00348 GLOBUS_FTP_CLIENT_TARGET_SETUP_PORT,
00349 GLOBUS_FTP_CLIENT_TARGET_PORT,
00350 GLOBUS_FTP_CLIENT_TARGET_SETUP_AUTHZ_ASSERT,
00351 GLOBUS_FTP_CLIENT_TARGET_AUTHZ_ASSERT,
00352 GLOBUS_FTP_CLIENT_TARGET_SETUP_SETNETSTACK,
00353 GLOBUS_FTP_CLIENT_TARGET_SETNETSTACK,
00354 GLOBUS_FTP_CLIENT_TARGET_SETUP_SETDISKSTACK,
00355 GLOBUS_FTP_CLIENT_TARGET_SETDISKSTACK,
00356 GLOBUS_FTP_CLIENT_TARGET_SETUP_ALLO,
00357 GLOBUS_FTP_CLIENT_TARGET_ALLO,
00358 GLOBUS_FTP_CLIENT_TARGET_SETUP_REST_STREAM,
00359 GLOBUS_FTP_CLIENT_TARGET_SETUP_REST_EB,
00360 GLOBUS_FTP_CLIENT_TARGET_REST,
00361 GLOBUS_FTP_CLIENT_TARGET_SETUP_OPERATION,
00362 GLOBUS_FTP_CLIENT_TARGET_SETUP_LIST,
00363 GLOBUS_FTP_CLIENT_TARGET_SETUP_LIST_CWD,
00364 GLOBUS_FTP_CLIENT_TARGET_SETUP_GET,
00365 GLOBUS_FTP_CLIENT_TARGET_SETUP_PUT,
00366 GLOBUS_FTP_CLIENT_TARGET_SETUP_TRANSFER_SOURCE,
00367 GLOBUS_FTP_CLIENT_TARGET_SETUP_TRANSFER_DEST,
00368 GLOBUS_FTP_CLIENT_TARGET_SETUP_CHMOD,
00369 GLOBUS_FTP_CLIENT_TARGET_SETUP_CHGRP,
00370 GLOBUS_FTP_CLIENT_TARGET_SETUP_UTIME,
00371 GLOBUS_FTP_CLIENT_TARGET_SETUP_SYMLINK,
00372 GLOBUS_FTP_CLIENT_TARGET_SETUP_DELETE,
00373 GLOBUS_FTP_CLIENT_TARGET_SETUP_MKDIR,
00374 GLOBUS_FTP_CLIENT_TARGET_SETUP_RMDIR,
00375 GLOBUS_FTP_CLIENT_TARGET_SETUP_RNFR,
00376 GLOBUS_FTP_CLIENT_TARGET_SETUP_RNTO,
00377 GLOBUS_FTP_CLIENT_TARGET_SETUP_MDTM,
00378 GLOBUS_FTP_CLIENT_TARGET_SETUP_MLST,
00379 GLOBUS_FTP_CLIENT_TARGET_SETUP_STAT,
00380 GLOBUS_FTP_CLIENT_TARGET_SETUP_GETPUT_GET,
00381 GLOBUS_FTP_CLIENT_TARGET_SETUP_GETPUT_PUT,
00382 GLOBUS_FTP_CLIENT_TARGET_MLST,
00383 GLOBUS_FTP_CLIENT_TARGET_STAT,
00384 GLOBUS_FTP_CLIENT_TARGET_LIST,
00385 GLOBUS_FTP_CLIENT_TARGET_RETR,
00386 GLOBUS_FTP_CLIENT_TARGET_STOR,
00387 GLOBUS_FTP_CLIENT_TARGET_MDTM,
00388 GLOBUS_FTP_CLIENT_TARGET_GETPUT_PASV_GET,
00389 GLOBUS_FTP_CLIENT_TARGET_GETPUT_PASV_PUT,
00390 GLOBUS_FTP_CLIENT_TARGET_GETPUT_PASV_TRANSFER,
00391 GLOBUS_FTP_CLIENT_TARGET_READY_FOR_DATA,
00392 GLOBUS_FTP_CLIENT_TARGET_NEED_LAST_BLOCK,
00393 GLOBUS_FTP_CLIENT_TARGET_NEED_EMPTY_QUEUE,
00394 GLOBUS_FTP_CLIENT_TARGET_NEED_EMPTY_AND_COMPLETE,
00395 GLOBUS_FTP_CLIENT_TARGET_NEED_COMPLETE,
00396 GLOBUS_FTP_CLIENT_TARGET_COMPLETED_OPERATION,
00397 GLOBUS_FTP_CLIENT_TARGET_NOOP,
00398 GLOBUS_FTP_CLIENT_TARGET_FAULT,
00399 GLOBUS_FTP_CLIENT_TARGET_CLOSED,
00400 GLOBUS_FTP_CLIENT_TARGET_SETUP_CWD
00401 }
00402 globus_ftp_client_target_state_t;
00403
00404
00405 typedef struct globus_i_ftp_client_url_ent_s
00406 {
00407 globus_i_ftp_client_operation_t op;
00408 char * source_url;
00409 globus_url_t src_url;
00410 char * dest_url;
00411 globus_url_t dst_url;
00412
00413 } globus_i_ftp_client_url_ent_t;
00414
00415
00428
00429
00430
00431
00432
00433
00434
00435
00436 typedef struct globus_i_ftp_client_features_s
00437 {
00438 globus_ftp_client_tristate_t list[GLOBUS_FTP_CLIENT_FEATURE_MAX];
00439 } globus_i_ftp_client_features_t;
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457 globus_i_ftp_client_features_t *
00458 globus_i_ftp_client_features_init();
00459
00460 globus_result_t
00461 globus_i_ftp_client_features_destroy(
00462 globus_i_ftp_client_features_t * features);
00463
00464 globus_ftp_client_tristate_t
00465 globus_i_ftp_client_feature_get(
00466 globus_i_ftp_client_features_t * features,
00467 globus_ftp_client_probed_feature_t feature);
00468
00469 void
00470 globus_i_ftp_client_feature_set(
00471 globus_i_ftp_client_features_t * features,
00472 globus_ftp_client_probed_feature_t feature,
00473 globus_ftp_client_tristate_t value);
00474
00475 char *
00476 globus_i_ftp_client_find_ssh_client_program();
00477
00491 typedef struct
00492 {
00497 struct globus_i_ftp_client_target_s * source;
00502 struct globus_i_ftp_client_target_s * dest;
00506 globus_i_ftp_client_operation_t operation;
00507 }
00508 globus_i_ftp_client_data_target_t;
00509
00522 typedef struct globus_i_ftp_client_handle_t
00523 {
00525 char magic[24];
00526
00528 globus_ftp_client_handle_t * handle;
00529
00534 struct globus_i_ftp_client_target_s * source;
00535
00537 char * source_url;
00538
00543 struct globus_i_ftp_client_target_s * dest;
00545 char * dest_url;
00546 globus_i_ftp_client_handleattr_t attr;
00547
00549 globus_i_ftp_client_operation_t op;
00550
00552 globus_ftp_client_complete_callback_t callback;
00554 void * callback_arg;
00555
00557 globus_ftp_client_handle_state_t state;
00558
00563 globus_priority_q_t stalled_blocks;
00564
00569 globus_hashtable_t active_blocks;
00570
00574 int num_active_blocks;
00575
00579 globus_ftp_control_host_port_t * pasv_address;
00580
00584 int num_pasv_addresses;
00585
00587 globus_object_t * err;
00588
00592 struct globus_i_ftp_client_restart_s * restart_info;
00593
00597 int notify_in_progress;
00598 globus_bool_t notify_abort;
00599 globus_bool_t notify_restart;
00600
00602 globus_off_t source_size;
00603
00605 globus_ftp_client_restart_marker_t restart_marker;
00606
00608 globus_off_t partial_offset;
00609
00611 globus_off_t partial_end_offset;
00612
00617 globus_off_t base_offset;
00621 globus_off_t read_all_biggest_offset;
00622
00624 globus_abstime_t * modification_time_pointer;
00625
00627 globus_off_t * size_pointer;
00628
00630 globus_i_ftp_client_features_t * features_pointer;
00631
00633 globus_byte_t ** mlst_buffer_pointer;
00634 globus_size_t * mlst_buffer_length_pointer;
00635
00637 int chmod_file_mode;
00638
00640 char * chgrp_group;
00641
00643 struct tm utime_time;
00644
00646 globus_mutex_t mutex;
00647
00649 char * checksum;
00650
00652 globus_off_t checksum_offset;
00653 globus_off_t checksum_length;
00654 char * checksum_alg;
00655
00657 globus_fifo_t src_op_queue;
00658 globus_fifo_t dst_op_queue;
00659 globus_fifo_t src_response_pending_queue;
00660 globus_fifo_t dst_response_pending_queue;
00661
00662 int no_callback_count;
00663
00664 globus_bool_t source_pasv;
00665 globus_bool_t tried_both_pasv;
00670 void * user_pointer;
00671 }
00672 globus_i_ftp_client_handle_t;
00673
00682 typedef struct globus_i_ftp_client_target_s
00683 {
00685 globus_ftp_client_target_state_t state;
00686
00688 globus_ftp_control_handle_t * control_handle;
00690 char * url_string;
00692 globus_url_t url;
00694 globus_ftp_control_auth_info_t auth_info;
00695
00697 globus_i_ftp_client_features_t * features;
00699 globus_ftp_control_dcau_t dcau;
00700 globus_ftp_control_protection_t data_prot;
00701 unsigned long pbsz;
00702 globus_ftp_control_type_t type;
00703 globus_ftp_control_tcpbuffer_t tcp_buffer;
00704 globus_ftp_control_mode_t mode;
00705 globus_ftp_control_structure_t structure;
00706 globus_ftp_control_layout_t layout;
00707 globus_ftp_control_parallelism_t parallelism;
00708 char * authz_assert;
00709 char * net_stack_str;
00710 char * disk_stack_str;
00711 globus_bool_t delayed_pasv;
00712
00714 globus_i_ftp_client_operationattr_t * attr;
00715
00717 globus_i_ftp_client_handle_t * owner;
00718
00720 globus_i_ftp_client_data_target_t cached_data_conn;
00721
00723 globus_ftp_client_plugin_command_mask_t mask;
00724
00725
00726 globus_abstime_t last_access;
00727
00728 globus_bool_t src_command_sent;
00729 globus_bool_t dst_command_sent;
00730
00731 globus_list_t * net_stack_list;
00732
00733 char * clientinfo_argstr;
00734
00735 int dcsc_type;
00736 char * dcsc_blob;
00737 gss_cred_id_t dcsc_p_cred;
00738 } globus_i_ftp_client_target_t;
00739
00758 typedef struct
00759 {
00761 globus_url_t url;
00766 globus_i_ftp_client_target_t * target;
00767 }
00768 globus_i_ftp_client_cache_entry_t;
00769
00773 typedef struct globus_i_ftp_client_restart_s
00774 {
00775 char * source_url;
00776 globus_i_ftp_client_operationattr_t * source_attr;
00777 char * dest_url;
00778 globus_i_ftp_client_operationattr_t * dest_attr;
00779 globus_ftp_client_restart_marker_t marker;
00780 globus_abstime_t when;
00781 globus_callback_handle_t callback_handle;
00782 }
00783 globus_i_ftp_client_restart_t;
00784
00798 typedef struct globus_i_ftp_client_plugin_t
00799 {
00810 char * plugin_name;
00811
00816 globus_ftp_client_plugin_t * plugin;
00817
00821 globus_ftp_client_plugin_copy_t copy_func;
00825 globus_ftp_client_plugin_destroy_t destroy_func;
00826
00827 globus_ftp_client_plugin_chmod_t chmod_func;
00828 globus_ftp_client_plugin_chgrp_t chgrp_func;
00829 globus_ftp_client_plugin_utime_t utime_func;
00830 globus_ftp_client_plugin_symlink_t symlink_func;
00831 globus_ftp_client_plugin_delete_t delete_func;
00832 globus_ftp_client_plugin_mkdir_t mkdir_func;
00833 globus_ftp_client_plugin_rmdir_t rmdir_func;
00834 globus_ftp_client_plugin_move_t move_func;
00835 globus_ftp_client_plugin_feat_t feat_func;
00836 globus_ftp_client_plugin_verbose_list_t verbose_list_func;
00837 globus_ftp_client_plugin_machine_list_t machine_list_func;
00838 globus_ftp_client_plugin_recursive_list_t recursive_list_func;
00839 globus_ftp_client_plugin_list_t list_func;
00840 globus_ftp_client_plugin_mlst_t mlst_func;
00841 globus_ftp_client_plugin_stat_t stat_func;
00842 globus_ftp_client_plugin_get_t get_func;
00843 globus_ftp_client_plugin_put_t put_func;
00844 globus_ftp_client_plugin_third_party_transfer_t
00845 third_party_transfer_func;
00846
00847 globus_ftp_client_plugin_modification_time_t
00848 modification_time_func;
00849 globus_ftp_client_plugin_size_t size_func;
00850 globus_ftp_client_plugin_cksm_t cksm_func;
00851 globus_ftp_client_plugin_abort_t abort_func;
00852 globus_ftp_client_plugin_connect_t connect_func;
00853 globus_ftp_client_plugin_authenticate_t authenticate_func;
00854 globus_ftp_client_plugin_read_t read_func;
00855 globus_ftp_client_plugin_write_t write_func;
00856 globus_ftp_client_plugin_data_t data_func;
00857
00858 globus_ftp_client_plugin_command_t command_func;
00859 globus_ftp_client_plugin_response_t response_func;
00860 globus_ftp_client_plugin_fault_t fault_func;
00861 globus_ftp_client_plugin_complete_t complete_func;
00862
00870 globus_ftp_client_plugin_command_mask_t command_mask;
00871
00873 void * plugin_specific;
00874 } globus_i_ftp_client_plugin_t;
00875
00876
00877 #ifndef DOXYGEN
00878
00879 globus_result_t
00880 globus_i_ftp_client_handleattr_copy(
00881 globus_i_ftp_client_handleattr_t * dest,
00882 globus_i_ftp_client_handleattr_t * src);
00883
00884 void
00885 globus_i_ftp_client_handleattr_destroy(
00886 globus_i_ftp_client_handleattr_t * i_attr);
00887
00888 int
00889 globus_i_ftp_client_plugin_list_search(
00890 void * datum,
00891 void * arg);
00892
00893 void
00894 globus_i_ftp_client_handle_is_active(globus_ftp_client_handle_t *handle);
00895
00896 void
00897 globus_i_ftp_client_handle_is_not_active(globus_ftp_client_handle_t *handle);
00898
00899 void
00900 globus_i_ftp_client_control_is_active(globus_ftp_control_handle_t * handle);
00901
00902 void
00903 globus_i_ftp_client_control_is_not_active(globus_ftp_control_handle_t * handle);
00904
00905 const char *
00906 globus_i_ftp_op_to_string(
00907 globus_i_ftp_client_operation_t op);
00908
00909 const char *
00910 globus_i_ftp_target_state_to_string(
00911 globus_ftp_client_target_state_t target_state);
00912
00913 const char *
00914 globus_i_ftp_handle_state_to_string(
00915 globus_ftp_client_handle_state_t handle_state);
00916
00917 int
00918 globus_i_ftp_client_count_digits(
00919 globus_off_t num);
00920
00921 extern globus_ftp_control_auth_info_t globus_i_ftp_client_default_auth_info;
00922 extern globus_reltime_t globus_i_ftp_client_noop_idle;
00923
00924 extern globus_xio_stack_t ftp_client_i_popen_stack;
00925 extern globus_xio_driver_t ftp_client_i_popen_driver;
00926 extern globus_bool_t ftp_client_i_popen_ready;
00927
00928
00929
00930 globus_object_t *
00931 globus_i_ftp_client_target_find(
00932 globus_i_ftp_client_handle_t * handle,
00933 const char * url,
00934 globus_i_ftp_client_operationattr_t * attr,
00935 globus_i_ftp_client_target_t ** target);
00936
00937 void
00938 globus_i_ftp_client_target_release(
00939 globus_i_ftp_client_handle_t * handle,
00940 globus_i_ftp_client_target_t * target);
00941
00942 void
00943 globus_i_ftp_client_restart_info_delete(
00944 globus_i_ftp_client_restart_t * restart_info);
00945
00946 globus_bool_t
00947 globus_i_ftp_client_can_reuse_data_conn(
00948 globus_i_ftp_client_handle_t * client_handle);
00949
00950 globus_result_t
00951 globus_i_ftp_client_cache_add(
00952 globus_list_t ** cache,
00953 const char * url,
00954 globus_bool_t rfc1738_url);
00955
00956 globus_result_t
00957 globus_i_ftp_client_cache_remove(
00958 globus_list_t ** cache,
00959 const char * url,
00960 globus_bool_t rfc1738_url);
00961
00962 globus_result_t
00963 globus_i_ftp_client_cache_destroy(
00964 globus_list_t ** cache);
00965
00966
00967 int
00968 globus_i_ftp_client_data_cmp(
00969 void * priority_1,
00970 void * priority_2);
00971
00972 globus_object_t *
00973 globus_i_ftp_client_data_dispatch_queue(
00974 globus_i_ftp_client_handle_t * handle);
00975
00976 void
00977 globus_i_ftp_client_data_flush(
00978 globus_i_ftp_client_handle_t * handle);
00979
00980
00981 void
00982 globus_i_ftp_client_transfer_complete(
00983 globus_i_ftp_client_handle_t * client_handle);
00984
00985 globus_object_t *
00986 globus_i_ftp_client_restart(
00987 globus_i_ftp_client_handle_t * handle,
00988 globus_i_ftp_client_restart_t * restart_info);
00989
00990
00991
00992 void
00993 globus_i_ftp_client_plugin_notify_list(
00994 globus_i_ftp_client_handle_t * handle,
00995 const char * url,
00996 globus_i_ftp_client_operationattr_t * attr);
00997
00998 void
00999 globus_i_ftp_client_plugin_notify_verbose_list(
01000 globus_i_ftp_client_handle_t * handle,
01001 const char * url,
01002 globus_i_ftp_client_operationattr_t * attr);
01003
01004 void
01005 globus_i_ftp_client_plugin_notify_machine_list(
01006 globus_i_ftp_client_handle_t * handle,
01007 const char * url,
01008 globus_i_ftp_client_operationattr_t * attr);
01009
01010 void
01011 globus_i_ftp_client_plugin_notify_recursive_list(
01012 globus_i_ftp_client_handle_t * handle,
01013 const char * url,
01014 globus_i_ftp_client_operationattr_t * attr);
01015
01016 void
01017 globus_i_ftp_client_plugin_notify_mlst(
01018 globus_i_ftp_client_handle_t * handle,
01019 const char * url,
01020 globus_i_ftp_client_operationattr_t * attr);
01021
01022 void
01023 globus_i_ftp_client_plugin_notify_stat(
01024 globus_i_ftp_client_handle_t * handle,
01025 const char * url,
01026 globus_i_ftp_client_operationattr_t * attr);
01027
01028 void
01029 globus_i_ftp_client_plugin_notify_chmod(
01030 globus_i_ftp_client_handle_t * handle,
01031 const char * url,
01032 int mode,
01033 globus_i_ftp_client_operationattr_t * attr);
01034
01035 void
01036 globus_i_ftp_client_plugin_notify_chgrp(
01037 globus_i_ftp_client_handle_t * handle,
01038 const char * url,
01039 const char * group,
01040 globus_i_ftp_client_operationattr_t * attr);
01041
01042 void
01043 globus_i_ftp_client_plugin_notify_utime(
01044 globus_i_ftp_client_handle_t * handle,
01045 const char * url,
01046 const struct tm * utime_time,
01047 globus_i_ftp_client_operationattr_t * attr);
01048
01049 void
01050 globus_i_ftp_client_plugin_notify_symlink(
01051 globus_i_ftp_client_handle_t * handle,
01052 const char * url,
01053 const char * link_url,
01054 globus_i_ftp_client_operationattr_t * attr);
01055
01056 void
01057 globus_i_ftp_client_plugin_notify_cksm(
01058 globus_i_ftp_client_handle_t * handle,
01059 const char * url,
01060 globus_off_t offset,
01061 globus_off_t length,
01062 const char * algorithm,
01063 globus_i_ftp_client_operationattr_t * attr);
01064
01065 void
01066 globus_i_ftp_client_plugin_notify_delete(
01067 globus_i_ftp_client_handle_t * handle,
01068 const char * url,
01069 globus_i_ftp_client_operationattr_t * attr);
01070
01071 void
01072 globus_i_ftp_client_plugin_notify_feat(
01073 globus_i_ftp_client_handle_t * handle,
01074 const char * url,
01075 globus_i_ftp_client_operationattr_t * attr);
01076
01077 void
01078 globus_i_ftp_client_plugin_notify_mkdir(
01079 globus_i_ftp_client_handle_t * handle,
01080 const char * url,
01081 globus_i_ftp_client_operationattr_t * attr);
01082
01083 void
01084 globus_i_ftp_client_plugin_notify_rmdir(
01085 globus_i_ftp_client_handle_t * handle,
01086 const char * url,
01087 globus_i_ftp_client_operationattr_t * attr);
01088
01089 void
01090 globus_i_ftp_client_plugin_notify_move(
01091 globus_i_ftp_client_handle_t * handle,
01092 const char * source_url,
01093 const char * dest_url,
01094 globus_i_ftp_client_operationattr_t * attr);
01095
01096 void
01097 globus_i_ftp_client_plugin_notify_get(
01098 globus_i_ftp_client_handle_t * handle,
01099 const char * url,
01100 globus_i_ftp_client_operationattr_t * attr,
01101 const globus_ftp_client_restart_marker_t * restart);
01102
01103 void
01104 globus_i_ftp_client_plugin_notify_put(
01105 globus_i_ftp_client_handle_t * handle,
01106 const char * url,
01107 globus_i_ftp_client_operationattr_t * attr,
01108 const globus_ftp_client_restart_marker_t * restart);
01109
01110 void
01111 globus_i_ftp_client_plugin_notify_transfer(
01112 globus_i_ftp_client_handle_t * handle,
01113 const char * source_url,
01114 globus_i_ftp_client_operationattr_t * source_attr,
01115 const char * dest_url,
01116 globus_i_ftp_client_operationattr_t * dest_attr,
01117 const globus_ftp_client_restart_marker_t * restart);
01118
01119 void
01120 globus_i_ftp_client_plugin_notify_modification_time(
01121 globus_i_ftp_client_handle_t * handle,
01122 const char * url,
01123 globus_i_ftp_client_operationattr_t * attr);
01124
01125 void
01126 globus_i_ftp_client_plugin_notify_size(
01127 globus_i_ftp_client_handle_t * handle,
01128 const char * url,
01129 globus_i_ftp_client_operationattr_t * attr);
01130
01131 void
01132 globus_i_ftp_client_plugin_notify_restart(
01133 globus_i_ftp_client_handle_t * handle);
01134
01135 void
01136 globus_i_ftp_client_plugin_notify_connect(
01137 globus_i_ftp_client_handle_t * handle,
01138 const char * url);
01139
01140 void
01141 globus_i_ftp_client_plugin_notify_authenticate(
01142 globus_i_ftp_client_handle_t * handle,
01143 const char * url,
01144 const globus_ftp_control_auth_info_t * auth_info);
01145
01146 void
01147 globus_i_ftp_client_plugin_notify_abort(
01148 globus_i_ftp_client_handle_t * handle);
01149
01150 void
01151 globus_i_ftp_client_plugin_notify_read(
01152 globus_i_ftp_client_handle_t * handle,
01153 const globus_byte_t * buffer,
01154 globus_size_t buffer_length);
01155
01156 void
01157 globus_i_ftp_client_plugin_notify_write(
01158 globus_i_ftp_client_handle_t * handle,
01159 const globus_byte_t * buffer,
01160 globus_size_t buffer_length,
01161 globus_off_t offset,
01162 globus_bool_t eof);
01163
01164 void
01165 globus_i_ftp_client_plugin_notify_data(
01166 globus_i_ftp_client_handle_t * handle,
01167 globus_object_t * error,
01168 const globus_byte_t * buffer,
01169 globus_size_t buffer_length,
01170 globus_off_t offset,
01171 globus_bool_t eof);
01172
01173 void
01174 globus_i_ftp_client_plugin_notify_command(
01175 globus_i_ftp_client_handle_t * handle,
01176 const char * url,
01177 globus_ftp_client_plugin_command_mask_t command_mask,
01178 const char * command_spec,
01179 ...);
01180
01181 void
01182 globus_i_ftp_client_plugin_notify_response(
01183 globus_i_ftp_client_handle_t * handle,
01184 const char * url,
01185 globus_ftp_client_plugin_command_mask_t command_mask,
01186 globus_object_t * error,
01187 const globus_ftp_control_response_t * ftp_response);
01188
01189 void
01190 globus_i_ftp_client_plugin_notify_fault(
01191 globus_i_ftp_client_handle_t * handle,
01192 const char * url,
01193 globus_object_t * error);
01194
01195 void
01196 globus_i_ftp_client_plugin_notify_complete(
01197 globus_i_ftp_client_handle_t * handle);
01198
01199
01200 globus_object_t *
01201 globus_i_ftp_client_restart_register_oneshot(
01202 globus_i_ftp_client_handle_t * handle);
01203
01204
01205
01206 globus_object_t *
01207 globus_l_ftp_client_url_parse(
01208 const char * url_string,
01209 globus_url_t * url,
01210 globus_bool_t rfc1738_url);
01211
01212 void
01213 globus_i_ftp_client_force_close_callback(
01214 void * user_arg,
01215 globus_ftp_control_handle_t * handle,
01216 globus_object_t * error,
01217 globus_ftp_control_response_t * response);
01218
01219 globus_object_t *
01220 globus_i_ftp_client_target_activate(
01221 globus_i_ftp_client_handle_t * handle,
01222 globus_i_ftp_client_target_t * target,
01223 globus_bool_t * registered);
01224
01225
01226 void
01227 globus_i_ftp_client_response_callback(
01228 void * user_arg,
01229 globus_ftp_control_handle_t * handle,
01230 globus_object_t * error,
01231 globus_ftp_control_response_t * response);
01232
01233
01234 void
01235 globus_l_ftp_client_complete_kickout(
01236 void * user_arg);
01237
01238 globus_object_t *
01239 globus_i_ftp_client_wrap_ftp_error(
01240 globus_module_descriptor_t * base_source,
01241 int code,
01242 const char * message,
01243 int error_type,
01244 const char * source_file,
01245 const char * source_func,
01246 int source_line,
01247 const char * format,
01248 ...);
01249
01250
01251 #define GLOBUS_I_FTP_CLIENT_ERROR_NULL_PARAMETER(param) \
01252 globus_error_construct_error(\
01253 GLOBUS_FTP_CLIENT_MODULE,\
01254 GLOBUS_NULL,\
01255 GLOBUS_FTP_CLIENT_ERROR_PARAMETER, \
01256 __FILE__, \
01257 _globus_func_name, \
01258 __LINE__, \
01259 "a NULL value for %s was used", param)
01260 #define GLOBUS_I_FTP_CLIENT_ERROR_INVALID_PARAMETER(param) \
01261 globus_error_construct_error(\
01262 GLOBUS_FTP_CLIENT_MODULE,\
01263 GLOBUS_NULL,\
01264 GLOBUS_FTP_CLIENT_ERROR_PARAMETER, \
01265 __FILE__, \
01266 _globus_func_name, \
01267 __LINE__, \
01268 "an invalid value for %s was used", param)
01269 #define GLOBUS_I_FTP_CLIENT_ERROR_OUT_OF_MEMORY() \
01270 globus_error_construct_error(\
01271 GLOBUS_FTP_CLIENT_MODULE,\
01272 GLOBUS_NULL,\
01273 GLOBUS_FTP_CLIENT_ERROR_MEMORY, \
01274 __FILE__, \
01275 _globus_func_name, \
01276 __LINE__, \
01277 "a memory allocation failed")
01278 #define GLOBUS_I_FTP_CLIENT_ERROR_OPERATION_ABORTED() \
01279 globus_error_construct_error(\
01280 GLOBUS_FTP_CLIENT_MODULE,\
01281 GLOBUS_NULL,\
01282 GLOBUS_FTP_CLIENT_ERROR_ABORTED, \
01283 __FILE__, \
01284 _globus_func_name, \
01285 __LINE__, \
01286 "the operation was aborted")
01287 #define GLOBUS_I_FTP_CLIENT_ERROR_INTERNAL_ERROR(err) \
01288 globus_error_construct_error(\
01289 GLOBUS_FTP_CLIENT_MODULE,\
01290 err,\
01291 GLOBUS_FTP_CLIENT_ERROR_INTERNAL, \
01292 __FILE__, \
01293 _globus_func_name, \
01294 __LINE__, \
01295 "an internal error occurred in globus_ftp_client")
01296 #define GLOBUS_I_FTP_CLIENT_ERROR_OBJECT_IN_USE(obj) \
01297 globus_error_construct_error(\
01298 GLOBUS_FTP_CLIENT_MODULE,\
01299 GLOBUS_NULL,\
01300 GLOBUS_FTP_CLIENT_ERROR_IN_USE, \
01301 __FILE__, \
01302 _globus_func_name, \
01303 __LINE__, \
01304 "%s was already in use", obj)
01305 #define GLOBUS_I_FTP_CLIENT_ERROR_OBJECT_NOT_IN_USE(obj) \
01306 globus_error_construct_error(\
01307 GLOBUS_FTP_CLIENT_MODULE,\
01308 GLOBUS_NULL,\
01309 GLOBUS_FTP_CLIENT_ERROR_NOT_IN_USE, \
01310 __FILE__, \
01311 _globus_func_name, \
01312 __LINE__, \
01313 "%s was not in use", obj)
01314 #define GLOBUS_I_FTP_CLIENT_ERROR_ALREADY_DONE() \
01315 globus_error_construct_error(\
01316 GLOBUS_FTP_CLIENT_MODULE,\
01317 GLOBUS_NULL,\
01318 GLOBUS_FTP_CLIENT_ERROR_COMPLETED, \
01319 __FILE__, \
01320 _globus_func_name, \
01321 __LINE__, \
01322 "already done")
01323 #define GLOBUS_I_FTP_CLIENT_ERROR_INVALID_OPERATION(op) \
01324 globus_error_construct_error(\
01325 GLOBUS_FTP_CLIENT_MODULE,\
01326 GLOBUS_NULL,\
01327 GLOBUS_FTP_CLIENT_ERROR_INVALID_OPERATION, \
01328 __FILE__, \
01329 _globus_func_name, \
01330 __LINE__, \
01331 "%s not allowed here",\
01332 globus_i_ftp_op_to_string(op))
01333 #define GLOBUS_I_FTP_CLIENT_ERROR_EOF() \
01334 globus_error_construct_error(\
01335 GLOBUS_FTP_CLIENT_MODULE,\
01336 GLOBUS_NULL,\
01337 GLOBUS_FTP_CLIENT_ERROR_UNEXPECTED_EOF, \
01338 __FILE__, \
01339 _globus_func_name, \
01340 __LINE__, \
01341 "EOF has been reached")
01342 #define GLOBUS_I_FTP_CLIENT_ERROR_NO_SUCH_FILE(file) \
01343 globus_error_construct_error(\
01344 GLOBUS_FTP_CLIENT_MODULE,\
01345 GLOBUS_NULL,\
01346 GLOBUS_FTP_CLIENT_ERROR_NO_SUCH_FILE, \
01347 __FILE__, \
01348 _globus_func_name, \
01349 __LINE__, \
01350 "%s does not exist", file)
01351 #define GLOBUS_I_FTP_CLIENT_ERROR_PROTOCOL_ERROR() \
01352 globus_error_construct_error(\
01353 GLOBUS_FTP_CLIENT_MODULE,\
01354 GLOBUS_NULL,\
01355 GLOBUS_FTP_CLIENT_ERROR_PROTOCOL, \
01356 __FILE__, \
01357 _globus_func_name, \
01358 __LINE__, \
01359 "a protocol error occurred")
01360 #define GLOBUS_I_FTP_CLIENT_ERROR_RESPONSE(response) \
01361 globus_i_ftp_client_wrap_ftp_error( \
01362 GLOBUS_FTP_CLIENT_MODULE, \
01363 (response)->code, \
01364 (char *) (response)->response_buffer, \
01365 GLOBUS_FTP_CLIENT_ERROR_RESPONSE, \
01366 __FILE__, \
01367 _globus_func_name, \
01368 __LINE__, \
01369 "the server responded with an error")
01370 #define GLOBUS_I_FTP_CLIENT_ERROR_UNSUPPORTED_FEATURE(feature) \
01371 globus_error_construct_error(\
01372 GLOBUS_FTP_CLIENT_MODULE,\
01373 GLOBUS_NULL,\
01374 GLOBUS_FTP_CLIENT_ERROR_FEATURE, \
01375 __FILE__, \
01376 _globus_func_name, \
01377 __LINE__, \
01378 "the server doesn't support the %s feature",\
01379 feature)
01380 #define GLOBUS_I_FTP_CLIENT_NO_RESTART_MARKER() \
01381 globus_error_construct_error( \
01382 GLOBUS_FTP_CLIENT_MODULE, \
01383 GLOBUS_NULL, \
01384 GLOBUS_FTP_CLIENT_ERROR_NO_RESTART_MARKER, \
01385 __FILE__, \
01386 _globus_func_name, \
01387 __LINE__, \
01388 "Could not find restart info\n")
01389
01390 #endif
01391
01392 #ifdef __cplusplus
01393 }
01394 #endif
01395
01396 #endif