17 #if !defined(GLOBUS_I_GRIDFTP_SERVER_CONTROL_H) 18 #define GLOBUS_I_GRIDFTP_SERVER_CONTROL_H 1 20 #include "globus_gridftp_server_control.h" 21 #include "globus_xio.h" 22 #include "globus_xio_system.h" 24 #include "globus_xio_pipe_driver.h" 26 #include "globus_xio_gssapi_ftp.h" 28 #define GLOBUS_GRIDFTP_VERSION_CTL 1 30 GlobusDebugDeclare(GLOBUS_GRIDFTP_SERVER_CONTROL);
32 #define GlobusGSDebugPrintf(level, message) \ 33 GlobusDebugPrintf(GLOBUS_GRIDFTP_SERVER_CONTROL, level, message) 35 #define GlobusGridFTPServerDebugEnter() \ 36 GlobusGSDebugPrintf( \ 37 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_TRACE, \ 38 ("[%s] Entering\n", _gridftp_server_name)) 40 #define GlobusGridFTPServerDebugExit() \ 41 GlobusGSDebugPrintf( \ 42 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_TRACE, \ 43 ("[%s] Exiting\n", _gridftp_server_name)) 45 #define GlobusGridFTPServerDebugExitWithError() \ 46 GlobusGSDebugPrintf( \ 47 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_TRACE, \ 48 ("[%s] Exiting with error\n", _gridftp_server_name)) 50 #define GlobusGridFTPServerDebugInternalEnter() \ 51 GlobusGSDebugPrintf( \ 52 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_INTERNAL_TRACE, \ 53 ("[%s] I Entering\n", _gridftp_server_name)) 55 #define GlobusGridFTPServerDebugInternalExit() \ 56 GlobusGSDebugPrintf( \ 57 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_INTERNAL_TRACE, \ 58 ("[%s] I Exiting\n", _gridftp_server_name)) 60 #define GlobusGridFTPServerDebugInternalExitWithError() \ 61 GlobusGSDebugPrintf( \ 62 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_INTERNAL_TRACE, \ 63 ("[%s] I Exiting with error\n", _gridftp_server_name)) 65 #define GlobusGridFTPServerDebugVerboseEnter() \ 66 GlobusGSDebugPrintf( \ 67 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_VERBOSE, \ 68 ("[%s] V Entering\n", _gridftp_server_name)) 70 #define GlobusGridFTPServerDebugVerboseExit() \ 71 GlobusGSDebugPrintf( \ 72 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_VERBOSE, \ 73 ("[%s] V Exiting\n", _gridftp_server_name)) 75 #define GlobusGridFTPServerDebugVerboseExitWithError() \ 76 GlobusGSDebugPrintf( \ 77 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_VERBOSE, \ 78 ("[%s] V Exiting with error\n", _gridftp_server_name)) 80 #define GlobusGridFTPServerDebugCommand(cmd) \ 81 GlobusGSDebugPrintf( \ 82 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_COMMANDS, \ 83 ("### [%s] Received command: %s\n", _gridftp_server_name, cmd)) 85 struct globus_i_gs_attr_s;
87 typedef enum globus_i_gsc_debug_levels_e
89 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_ERROR = 1,
90 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_WARNING = 2,
91 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_TRACE = 4,
92 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_INTERNAL_TRACE = 8,
93 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_COMMANDS = 16,
94 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_VERBOSE = 32,
95 GLOBUS_GRIDFTP_SERVER_CONTROL_DEBUG_STATE = 64
96 } globus_i_gsc_debug_levels_t;
98 typedef enum globus_i_gsc_error_type_e
100 GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_PARAMETER,
101 GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_STATE,
102 GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_MEMORY,
103 GLOBUS_GRIDFTP_SERVER_CONTROL_NO_AUTH,
104 GLOBUS_GRIDFTP_SERVER_CONTROL_POST_AUTH,
105 GLOBUS_GRIDFTP_SERVER_CONTROL_NO_COMMAND,
106 GLOBUS_GRIDFTP_SERVER_CONTROL_MALFORMED_COMMAND
107 } globus_i_gsc_error_type_t;
109 typedef enum globus_i_gsc_mlsx_fact_e
111 GLOBUS_GSC_MLSX_FACT_TYPE =
'T',
112 GLOBUS_GSC_MLSX_FACT_MODIFY =
'M',
113 GLOBUS_GSC_MLSX_FACT_CHARSET =
'C',
114 GLOBUS_GSC_MLSX_FACT_SIZE =
'S',
115 GLOBUS_GSC_MLSX_FACT_PERM =
'P',
116 GLOBUS_GSC_MLSX_FACT_UNIXMODE =
'U',
117 GLOBUS_GSC_MLSX_FACT_UNIXOWNER =
'O',
118 GLOBUS_GSC_MLSX_FACT_UNIXGROUP =
'G',
119 GLOBUS_GSC_MLSX_FACT_UNIQUE =
'Q',
120 GLOBUS_GSC_MLSX_FACT_UNIXSLINK =
'L',
121 GLOBUS_GSX_MLSX_FACT_UNIXUID =
'I',
122 GLOBUS_GSX_MLSX_FACT_UNIXGID =
'D',
123 GLOBUS_GSC_MLSX_FACT_XCOUNT =
'N' 124 } globus_i_gsc_mlsx_fact_t;
128 GLOBUS_L_GSC_DATA_OBJ_READY = 1,
129 GLOBUS_L_GSC_DATA_OBJ_DESTROY_WAIT,
130 GLOBUS_L_GSC_DATA_OBJ_DESTROYING,
131 GLOBUS_L_GSC_DATA_OBJ_INUSE
132 } globus_l_gsc_data_obj_state_t;
135 (*globus_i_gsc_auth_cb_t)(
136 struct globus_i_gsc_op_s * op,
137 globus_gridftp_server_control_response_t response_type,
142 (*globus_i_gsc_resource_cb_t)(
143 struct globus_i_gsc_op_s * op,
144 globus_gridftp_server_control_response_t response_type,
153 (*globus_i_gsc_passive_cb_t)(
154 struct globus_i_gsc_op_s * op,
155 globus_gridftp_server_control_response_t response_type,
162 (*globus_i_gsc_port_cb_t)(
163 struct globus_i_gsc_op_s * op,
164 globus_gridftp_server_control_response_t response_type,
169 (*globus_i_gsc_transfer_cb_t)(
170 struct globus_i_gsc_op_s * op,
171 globus_gridftp_server_control_response_t response_type,
175 typedef struct globus_i_gsc_data_s
177 globus_l_gsc_data_obj_state_t state;
178 struct globus_i_gsc_server_handle_s * server_handle;
181 globus_gridftp_server_control_data_dir_t dir;
183 } globus_i_gsc_data_t;
185 typedef enum globus_i_gsc_op_type_e
187 GLOBUS_L_GSC_OP_TYPE_AUTH,
188 GLOBUS_L_GSC_OP_TYPE_RESOURCE,
189 GLOBUS_L_GSC_OP_TYPE_CREATE_PASV,
190 GLOBUS_L_GSC_OP_TYPE_CREATE_PORT,
191 GLOBUS_L_GSC_OP_TYPE_SEND,
192 GLOBUS_L_GSC_OP_TYPE_RECV,
193 GLOBUS_L_GSC_OP_TYPE_DESTROY,
194 GLOBUS_L_GSC_OP_TYPE_LIST,
195 GLOBUS_L_GSC_OP_TYPE_NLST,
196 GLOBUS_L_GSC_OP_TYPE_MLSD,
197 GLOBUS_L_GSC_OP_TYPE_MLSR
198 } globus_i_gsc_op_type_t;
200 typedef struct globus_i_gsc_event_data_s
202 globus_l_gsc_data_obj_state_t state;
211 globus_gridftp_server_control_event_cb_t user_cb;
214 globus_off_t * stripe_total;
215 } globus_i_gsc_event_data_t;
217 typedef struct globus_i_gsc_handle_opts_s
219 char mlsx_fact_str[16];
228 int retr_perf_frequency;
229 int restart_frequency;
230 globus_gsc_layout_t layout;
232 int mlsr_traversal_options;
233 } globus_i_gsc_handle_opts_t;
235 typedef struct globus_i_gsc_module_func_s
238 globus_gridftp_server_control_transfer_cb_t func;
240 } globus_i_gsc_module_func_t;
242 typedef struct globus_i_gsc_user_funcs_s
244 globus_hashtable_t send_cb_table;
245 globus_hashtable_t recv_cb_table;
246 globus_gridftp_server_control_transfer_cb_t default_send_cb;
247 void * default_send_arg;
248 globus_gridftp_server_control_transfer_cb_t default_recv_cb;
249 void * default_recv_arg;
250 globus_gridftp_server_control_auth_cb_t auth_cb;
252 globus_gridftp_server_control_passive_connect_cb_t passive_cb;
254 globus_gridftp_server_control_active_connect_cb_t active_cb;
256 globus_gridftp_server_control_data_destroy_cb_t data_destroy_cb;
257 void * data_destroy_arg;
258 globus_gridftp_server_control_list_cb_t list_cb;
260 globus_gridftp_server_control_resource_cb_t resource_cb;
262 globus_gridftp_server_control_cb_t done_cb;
264 globus_gridftp_server_control_log_cb_t log_func;
267 } globus_i_gsc_user_funcs_t;
269 typedef struct globus_i_gsc_op_s
271 globus_i_gsc_op_type_t type;
274 struct globus_i_gsc_server_handle_s * server_handle;
276 globus_gridftp_server_control_response_t response_type;
286 globus_i_gsc_auth_cb_t auth_cb;
287 globus_i_gsc_resource_cb_t stat_cb;
288 globus_i_gsc_transfer_cb_t list_cb;
299 char * glob_match_str;
300 globus_gridftp_server_control_resource_mask_t mask;
306 globus_i_gsc_passive_cb_t passive_cb;
307 globus_i_gsc_port_cb_t port_cb;
308 globus_i_gsc_transfer_cb_t transfer_cb;
315 globus_gridftp_server_control_transfer_cb_t user_data_cb;
318 globus_range_list_t range_list;
319 globus_range_list_t perf_range_list;
320 globus_i_gsc_event_data_t event;
323 void * abort_user_arg;
326 globus_i_gsc_data_t * data_destroy_obj;
329 typedef struct globus_i_gsc_attr_s
335 char * post_auth_banner;
336 char * pre_auth_banner;
337 globus_gridftp_server_control_security_type_t security;
342 globus_i_gsc_user_funcs_t funcs;
343 } globus_i_gsc_attr_t;
346 extern globus_hashtable_t globus_i_gs_default_attr_command_hash;
355 typedef enum globus_l_gsc_state_e
357 GLOBUS_L_GSC_STATE_NONE,
358 GLOBUS_L_GSC_STATE_OPENING,
359 GLOBUS_L_GSC_STATE_OPEN,
360 GLOBUS_L_GSC_STATE_PROCESSING,
361 GLOBUS_L_GSC_STATE_ABORTING,
362 GLOBUS_L_GSC_STATE_ABORTING_STOPPING,
363 GLOBUS_L_GSC_STATE_STOPPING,
364 GLOBUS_L_GSC_STATE_STOPPED
365 } globus_l_gsc_state_t;
368 typedef struct globus_i_gsc_cmd_wrapper_s
370 globus_i_gsc_op_t * op;
379 globus_gridftp_server_control_network_protocol_t prt;
381 globus_i_gsc_op_type_t type;
388 struct globus_i_gsc_cmd_wrapper_s * transfer_info;
389 } globus_i_gsc_cmd_wrapper_t;
392 typedef struct globus_i_gsc_server_handle_s
412 char * post_auth_banner;
413 char * pre_auth_banner;
415 gss_ctx_id_t context;
417 gss_cred_id_t del_cred;
418 globus_gridftp_server_control_security_type_t security_type;
432 globus_off_t allocated_bytes;
438 globus_i_gsc_handle_opts_t opts;
443 globus_range_list_t range_list;
445 globus_i_gsc_user_funcs_t funcs;
447 globus_i_gsc_data_t * data_object;
457 globus_xio_handle_t xio_handle;
458 globus_l_gsc_state_t state;
462 globus_hashtable_t cmd_table;
463 globus_hashtable_t site_cmd_table;
464 globus_hashtable_t data_object_table;
465 struct globus_i_gsc_op_s * outstanding_op;
472 globus_i_gsc_cmd_wrapper_t * pasv_info;
476 } globus_i_gsc_server_handle_t;
480 globus_i_gsc_reverse_restart(
481 globus_range_list_t in_range,
482 globus_range_list_t out_range);
485 globus_i_gsc_op_destroy(
486 globus_i_gsc_op_t * op);
489 globus_i_gsc_event_start(
490 globus_i_gsc_op_t * op,
492 globus_gridftp_server_control_event_cb_t event_cb,
496 globus_i_gsc_event_end(
497 globus_i_gsc_op_t * op);
500 globus_i_gsc_get_help(
501 globus_i_gsc_server_handle_t * server_handle,
502 const char * command_name);
505 globus_i_gsc_intermediate_reply(
506 globus_i_gsc_op_t * op,
510 globus_i_gsc_authenticate(
511 globus_i_gsc_op_t * op,
514 globus_i_gsc_auth_cb_t cb,
519 globus_i_gsc_op_t * op,
521 globus_gridftp_server_control_resource_mask_t mask,
522 globus_i_gsc_op_type_t type,
523 globus_i_gsc_transfer_cb_t list_cb,
527 globus_i_gsc_resource_query(
528 globus_i_gsc_op_t * op,
530 globus_gridftp_server_control_resource_mask_t mask,
531 globus_i_gsc_resource_cb_t cb,
535 globus_i_gsc_passive(
536 globus_i_gsc_op_t * op,
539 const char * pathname,
540 globus_i_gsc_passive_cb_t cb,
545 globus_i_gsc_op_t * op,
546 const char ** contact_strings,
549 globus_i_gsc_port_cb_t cb,
554 globus_i_gsc_op_t * op,
556 const char * mod_name,
557 const char * mod_parms,
558 globus_i_gsc_transfer_cb_t data_cb,
563 globus_i_gsc_op_t * op,
565 const char * mod_name,
566 const char * mod_parms,
567 globus_i_gsc_transfer_cb_t data_cb,
571 globus_i_gsc_add_commands(
572 globus_i_gsc_server_handle_t * server_handle);
575 globus_i_gsc_command_panic(
576 globus_i_gsc_op_t * op);
579 globus_i_gsc_concat_path(
580 globus_i_gsc_server_handle_t * i_server,
581 const char * in_path);
584 globus_i_gsc_list_single_line(
588 globus_i_gsc_list_line(
591 const char * glob_match_str);
594 globus_i_gsc_nlst_line(
599 globus_i_gsc_mlsx_line_single(
600 const char * mlsx_fact_str,
603 const char * base_path,
607 globus_i_gsc_mlsx_line(
610 const char * mlsx_fact_string,
612 const char * base_path,
616 globus_i_guc_command_data_destroy(
617 globus_i_gsc_server_handle_t * server_handle);
621 globus_i_gsc_server_handle_t * server_handle,
622 const char * command,
626 globus_i_guc_data_object_destroy(
627 globus_i_gsc_server_handle_t * server_handle,
628 globus_i_gsc_data_t * data_object);
631 globus_i_gsc_cmd_intermediate_reply(
632 globus_i_gsc_op_t * op,
636 globus_i_gsc_event_start_perf_restart(
637 globus_i_gsc_op_t * op);
640 globus_gsc_959_terminate(
641 globus_i_gsc_op_t * op,
int globus_bool_t
Boolean type.
Definition: globus_types.h:93
int globus_callback_handle_t
Periodic callback handle.
Definition: globus_callback.h:102
struct globus_fifo_s * globus_fifo_t
Definition: globus_fifo.h:48
List data type.
Definition: globus_list.h:43
Header file for XIO TCP Driver.
Mutex.
Definition: globus_thread.h:107
Definition: globus_gridftp_server_control.h:204
size_t globus_size_t
Standard size of memory objectThe globus_size_t is the size of a memory object. It is identical to si...
Definition: globus_types.h:48
uint32_t globus_result_t
Definition: globus_types.h:99