globus_i_ftp_client.h

00001 /*
00002  * Copyright 1999-2006 University of Chicago
00003  * 
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  * 
00008  * http://www.apache.org/licenses/LICENSE-2.0
00009  * 
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00017 #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL
00018 
00022 #endif /* GLOBUS_DONT_DOCUMENT_INTERNAL */
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 /* send NOOP if idle for more than 15 seconds */
00123 #define GLOBUS_I_FTP_CLIENT_NOOP_IDLE 15 
00124 /*
00125  * Attributes
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      *  NETLOGGER
00240      */
00241     globus_bool_t                               nl_ftp;
00242     globus_bool_t                               nl_io;
00243     globus_netlogger_handle_t *                 nl_handle;
00244     
00245     /* client info */
00246     char *                                      clientinfo_app_name;
00247     char *                                      clientinfo_app_ver;
00248     char *                                      clientinfo_other;
00249 }
00250 globus_i_ftp_client_handleattr_t;
00251 
00252 /* Handles */
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     /* This is called when one side of a third-party transfer has sent
00270      * it's positive or negative response to the transfer, but the
00271      * other hasn't yet done the same.
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 /* Do not access members of the feature 
00429    structures below. Instead, use interface functions:
00430    globus_i_ftp_client_feature_get()
00431    globus_i_ftp_client_feature_set()
00432    globus_i_ftp_client_features_init()
00433    globus_i_ftp_client_features_destroy()
00434    This will facilitate future changes in the structures.
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 /* Should it be needed to store feature parameters 
00443    beside feature names, these are the proposed structures:
00444 
00445 typedef struct globus_i_ftp_client_feature_s{
00446   globus_ftp_client_tristate_t                   supported;
00447   char **                                        attrs;
00448 } globus_i_ftp_client_feature_t;
00449 
00450 typedef struct globus_i_ftp_client_features_s
00451 {
00452   globus_ftp_client_feature_t list[GLOBUS_FTP_CLIENT_FEATURE_MAX];
00453 } globus_i_ftp_client_features_t;
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     /* used for determining need for NOOP */
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 /* globus_ftp_client_attr.c */
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 /* globus_ftp_client.c */
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 /* globus_ftp_client_handle.c */
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 /* globus_ftp_client_data.c  */
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 /* globus_ftp_client_transfer.c */
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 /* globus_ftp_client_plugin.c */
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 /* globus_ftp_client_restart.c */
01200 globus_object_t *
01201 globus_i_ftp_client_restart_register_oneshot(
01202     globus_i_ftp_client_handle_t *              handle);
01203 
01204 /* globus_ftp_client_transfer.c */
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 /* globus_ftp_client_state.c */
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 /* globus_ftp_client_data.c */
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 /* Errors */
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 /* GLOBUS_I_FTP_CLIENT_H */

Generated on 17 Mar 2017 for globus_ftp_client by  doxygen 1.4.7