2#if !defined GLOBUS_GRIDFTP_SERVER_CONTROL_H
3#define GLOBUS_GRIDFTP_SERVER_CONTROL_H
6#include "globus_common.h"
7#include "globus_gss_assist.h"
8#include "globus_xio_system.h"
10#ifndef TARGET_ARCH_WIN32
38typedef struct globus_i_gsc_server_handle_s * globus_gridftp_server_control_t;
39typedef struct globus_i_gsc_attr_s * globus_gridftp_server_control_attr_t;
40typedef struct globus_i_gsc_op_s * globus_gridftp_server_control_op_t;
41typedef struct globus_i_gsc_op_s * globus_gsc_959_op_t;
42typedef time_t globus_time_t;
48typedef enum globus_gsc_error_type_e
50 GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_PANIC,
51 GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_SYSTEM_RESOURCE,
52 GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_AUTHENTICATION,
53 GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_READ_ERROR,
54 GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_SYNTAX
55} globus_gridftp_server_control_error_type_t;
57typedef enum globus_gsc_response_e
60 GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_SUCCESS,
61 GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_ACTION_FAILED,
62 GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_PATH_INVALID,
63 GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_INVALID_FILE_TYPE,
64 GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_ACCESS_DENINED,
65 GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_DATA_CONN_TERMINATED,
66 GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_DATA_CONN_FAILED,
67 GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_DATA_CONN_AUTH,
68 GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_PANIC,
69 GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_PARTIAL_SUCCESS,
70 GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_MIN_FTP_ERROR = 400,
71 GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_MAX_FTP_ERROR = 599
72} globus_gridftp_server_control_response_t;
75#define GlobusGridFTPServerName(func) static const char * _gridftp_server_name __attribute__((__unused__)) = #func
77#define GlobusGridFTPServerName(func) static const char * _gridftp_server_name = #func
80#define _FSCSL(s) globus_common_i18n_get_string( \
81 GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
84#define _FSMSL(s) globus_common_i18n_get_string_by_key( \
86 GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE->module_name, \
90#define GlobusGridFTPServerErrorParameter(param_name) \
92 globus_error_construct_error( \
93 GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
95 GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_PARAMETER, \
97 _gridftp_server_name, \
99 "Bad parameter, %s", \
102#define GlobusGridFTPServerControlErrorSyntax() \
104 globus_error_construct_error( \
105 GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
107 GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_SYNTAX, \
109 _gridftp_server_name, \
113#define GlobusGridFTPServerControlErrorPanic() \
115 globus_error_construct_error( \
116 GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
118 GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_PANIC, \
120 _gridftp_server_name, \
124#define GlobusGridFTPServerControlErrorSystem() \
126 globus_error_construct_error( \
127 GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
129 GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_SYSTEM_RESOURCE, \
131 _gridftp_server_name, \
133 "System resource error"))
136#define GlobusGridFTPServerControlErrorSytem() \
137 GlobusGridFTPServerControlErrorSystem()
139#define GlobusGridFTPServerControlErrorAuthentication() \
141 globus_error_construct_error( \
142 GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
144 GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_AUTHENTICATION, \
146 _gridftp_server_name, \
148 "Authentication error"))
150#define GlobusGridFTPServerControlErrorRead(_base) \
152 globus_error_construct_error( \
153 GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
155 GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_READ_ERROR, \
157 _gridftp_server_name, \
159 "Error reading the control channel."))
162#define GLOBUS_GRIDFTP_SERVER_LIBRARY_DYNAMIC_FILE_MASK 010000000
168typedef enum globus_gsc_security_type_e
170 GLOBUS_GRIDFTP_SERVER_LIBRARY_NONE = 0x01,
171 GLOBUS_GRIDFTP_SERVER_LIBRARY_GSSAPI = 0x02,
172 GLOBUS_GRIDFTP_SERVER_LIBRARY_TLS = 0x04
173} globus_gridftp_server_control_security_type_t;
175typedef enum globus_gsc_layout_e
177 GLOBUS_GSC_LAYOUT_TYPE_NONE = 0,
178 GLOBUS_GSC_LAYOUT_TYPE_PARTITIONED,
179 GLOBUS_GSC_LAYOUT_TYPE_BLOCKED
180} globus_gsc_layout_t;
182typedef enum globus_gridftp_server_control_stat_error_e
184 GLOBUS_GRIDFTP_SERVER_CONTROL_STAT_SUCCESS = 0,
185 GLOBUS_GRIDFTP_SERVER_CONTROL_STAT_OPENFAILED,
186 GLOBUS_GRIDFTP_SERVER_CONTROL_STAT_INVALIDLINK,
187} globus_gridftp_server_control_stat_error_t;
189typedef enum globus_gfs_traversal_options_e {
190 GLOBUS_GFS_TRAVERSAL_CONTINUE = 1,
191 GLOBUS_GFS_TRAVERSAL_FOLLOW_SYMLINKS = 2
192} globus_gfs_traversal_options_t;
208 char * symlink_target;
218 globus_gridftp_server_control_stat_error_t error;
228typedef enum globus_gridftp_server_control_network_protocol_e
230 GLOBUS_GRIDFTP_SERVER_CONTROL_PROTOCOL_IPV4 = 1,
231 GLOBUS_GRIDFTP_SERVER_CONTROL_PROTOCOL_IPV6
232} globus_gridftp_server_control_network_protocol_t;
244typedef enum globus_i_gsc_data_dir_e
246 GLOBUS_GRIDFTP_SERVER_CONTROL_DATA_DIR_RECV = 0x01,
247 GLOBUS_GRIDFTP_SERVER_CONTROL_DATA_DIR_SEND = 0x02,
248 GLOBUS_GRIDFTP_SERVER_CONTROL_DATA_DIR_BI = 0x03
249} globus_gridftp_server_control_data_dir_t;
258typedef enum globus_gridftp_server_control_event_type_e
260 GLOBUS_GRIDFTP_SERVER_CONTROL_EVENT_PERF = 0x01,
261 GLOBUS_GRIDFTP_SERVER_CONTROL_EVENT_RESTART = 0x02,
262 GLOBUS_GRIDFTP_SERVER_CONTROL_EVENT_ABORT = 0x04,
263 GLOBUS_GRIDFTP_SERVER_CONTROL_EVENT_TRANSFER_COMPLETE = 0x08
264} globus_gridftp_server_control_event_type_t;
276(*globus_gridftp_server_control_auth_cb_t)(
277 globus_gridftp_server_control_op_t op,
278 globus_gridftp_server_control_security_type_t secure_type,
279 gss_ctx_id_t context,
280 const char * subject,
281 const char * user_name,
292globus_gridftp_server_control_finished_auth(
293 globus_gridftp_server_control_op_t op,
294 const char * username,
295 globus_gridftp_server_control_response_t response_code,
306typedef enum globus_gridftp_server_control_resource_mask_e
308 GLOBUS_GRIDFTP_SERVER_CONTROL_RESOURCE_DIRECTORY_LIST = 1,
309 GLOBUS_GRIDFTP_SERVER_CONTROL_RESOURCE_FILE_ONLY = 2,
310 GLOBUS_GRIDFTP_SERVER_CONTROL_RESOURCE_USER_DEFINED = 3
311} globus_gridftp_server_control_resource_mask_t;
319(*globus_gridftp_server_control_cb_t)(
320 globus_gridftp_server_control_t server,
335(*globus_gridftp_server_control_resource_cb_t)(
336 globus_gridftp_server_control_op_t op,
338 globus_gridftp_server_control_resource_mask_t mask,
346(*globus_gridftp_server_control_transfer_cb_t)(
347 globus_gridftp_server_control_op_t op,
349 const char * local_target,
350 const char * mod_name,
351 const char * mod_parms,
352 globus_range_list_t range_list,
356(*globus_gridftp_server_control_list_cb_t)(
357 globus_gridftp_server_control_op_t op,
360 const char * fact_str,
362 int traversal_options,
366globus_gridftp_server_control_list_buffer_alloc(
367 const char * fact_str,
369 const char * base_path,
372 globus_byte_t ** out_buf,
373 globus_size_t * out_size);
376globus_gridftp_server_control_list_buffer_free(
377 globus_byte_t * buffer);
389 GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_SECURITY = 0x0001,
390 GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_TRANSFER = 0x0004,
391 GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_TRANSFER_STATE = 0x0008,
392 GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_FILE_COMMANDS = 0x0010,
393 GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_ERROR = 0x0020,
394 GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_SITE = 0x0040,
395 GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_LIST = 0x0080,
396 GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_OTHER = 0x0100,
397 GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_REPLY = 0x0400,
398 GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_ALL = 0xFFFF
402(*globus_gridftp_server_control_log_cb_t)(
403 globus_gridftp_server_control_t server_handle,
404 const char * full_command,
421(*globus_gridftp_server_control_passive_connect_cb_t)(
422 globus_gridftp_server_control_op_t op,
423 globus_gridftp_server_control_network_protocol_t net_prt,
425 const char * pathname,
441(*globus_gridftp_server_control_active_connect_cb_t)(
442 globus_gridftp_server_control_op_t op,
443 globus_gridftp_server_control_network_protocol_t net_prt,
457(*globus_gridftp_server_control_data_destroy_cb_t)(
458 void * user_data_handle,
462(*globus_gridftp_server_control_event_cb_t)(
463 globus_gridftp_server_control_op_t op,
468globus_gridftp_server_control_events_enable(
469 globus_gridftp_server_control_op_t op,
471 globus_gridftp_server_control_event_cb_t event_cb,
488globus_gridftp_server_control_finished_resource(
489 globus_gridftp_server_control_op_t op,
495 globus_gridftp_server_control_response_t response_code,
504globus_gridftp_server_control_attr_init(
505 globus_gridftp_server_control_attr_t * in_attr);
508globus_gridftp_server_control_attr_destroy(
509 globus_gridftp_server_control_attr_t in_attr);
512globus_gridftp_server_control_attr_copy(
513 globus_gridftp_server_control_attr_t * dst,
514 globus_gridftp_server_control_attr_t src);
517globus_gridftp_server_control_attr_set_resource(
518 globus_gridftp_server_control_attr_t in_attr,
519 globus_gridftp_server_control_resource_cb_t resource_cb,
523globus_gridftp_server_control_attr_set_auth(
524 globus_gridftp_server_control_attr_t in_attr,
525 globus_gridftp_server_control_auth_cb_t auth_cb,
529globus_gridftp_server_control_attr_set_list(
530 globus_gridftp_server_control_attr_t in_attr,
531 globus_gridftp_server_control_list_cb_t list_cb,
535globus_gridftp_server_control_attr_set_banner(
536 globus_gridftp_server_control_attr_t in_attr,
540globus_gridftp_server_control_attr_set_message(
541 globus_gridftp_server_control_attr_t in_attr,
545globus_gridftp_server_control_attr_set_security(
546 globus_gridftp_server_control_attr_t in_attr,
547 globus_gridftp_server_control_security_type_t sec);
550globus_gridftp_server_control_attr_set_idle_time(
551 globus_gridftp_server_control_attr_t in_attr,
553 int preauth_timeout);
559globus_gridftp_server_control_attr_add_recv(
560 globus_gridftp_server_control_attr_t in_attr,
561 const char * module_name,
562 globus_gridftp_server_control_transfer_cb_t recv_func,
566globus_gridftp_server_control_attr_add_send(
567 globus_gridftp_server_control_attr_t in_attr,
568 const char * module_name,
569 globus_gridftp_server_control_transfer_cb_t send_func,
573globus_gridftp_server_control_attr_data_functions(
574 globus_gridftp_server_control_attr_t server_attr,
575 globus_gridftp_server_control_active_connect_cb_t active_cb,
577 globus_gridftp_server_control_passive_connect_cb_t passive_cb,
579 globus_gridftp_server_control_data_destroy_cb_t destroy_cb,
583globus_gridftp_server_control_attr_set_log(
584 globus_gridftp_server_control_attr_t server_attr,
585 globus_gridftp_server_control_log_cb_t log_func,
597globus_gridftp_server_control_init(
598 globus_gridftp_server_control_t * server);
607globus_gridftp_server_control_destroy(
608 globus_gridftp_server_control_t server);
622globus_gridftp_server_control_start(
623 globus_gridftp_server_control_t server,
624 globus_gridftp_server_control_attr_t attr,
625 globus_xio_system_socket_t system_handle,
626 globus_gridftp_server_control_cb_t done_cb,
638globus_gridftp_server_control_stop(
639 globus_gridftp_server_control_t server);
645globus_gridftp_server_control_get_allocated(
646 globus_gridftp_server_control_op_t op,
647 globus_off_t * out_allo);
650globus_gridftp_server_control_get_layout(
651 globus_gridftp_server_control_op_t op,
652 globus_gsc_layout_t * layout_type,
653 globus_size_t * block_size);
656globus_gridftp_server_control_get_buffer_size(
657 globus_gridftp_server_control_op_t op,
658 globus_size_t * out_recv_bs,
659 globus_size_t * out_send_bs);
662globus_gridftp_server_control_get_parallelism(
663 globus_gridftp_server_control_op_t op,
664 int * out_parallelism);
667globus_gridftp_server_control_get_mode(
668 globus_gridftp_server_control_op_t op,
672globus_gridftp_server_control_get_type(
673 globus_gridftp_server_control_op_t op,
677globus_gridftp_server_control_get_cwd(
678 globus_gridftp_server_control_t server,
682globus_gridftp_server_control_set_cwd(
683 globus_gridftp_server_control_t server,
684 const char * cwd_string);
687globus_gridftp_server_control_get_data_auth(
688 globus_gridftp_server_control_op_t op,
692 gss_cred_id_t * del_cred);
695globus_gridftp_server_control_authenticated(
696 globus_gridftp_server_control_t server);
720globus_gridftp_server_control_finished_active_connect(
721 globus_gridftp_server_control_op_t op,
722 void * user_data_handle,
723 globus_gridftp_server_control_data_dir_t data_dir,
724 globus_gridftp_server_control_response_t response_code,
739globus_gridftp_server_control_finished_passive_connect(
740 globus_gridftp_server_control_op_t op,
741 void * user_data_handle,
742 globus_gridftp_server_control_data_dir_t data_dir,
745 globus_gridftp_server_control_response_t response_code,
758globus_gridftp_server_control_disconnected(
759 globus_gridftp_server_control_t server,
760 void * user_data_handle);
774globus_gridftp_server_control_begin_transfer(
775 globus_gridftp_server_control_op_t op);
785globus_gridftp_server_control_finished_transfer(
786 globus_gridftp_server_control_op_t op,
787 globus_gridftp_server_control_response_t response_code,
791globus_gridftp_server_control_set_paths(
792 globus_gridftp_server_control_op_t op,
793 const char * absolute_path,
794 const char * resolved_path);
797globus_gridftp_server_control_add_feature(
798 globus_gridftp_server_control_t server,
799 const char * feature);
803typedef enum globus_gsc_959_command_desc_e
805 GLOBUS_GSC_COMMAND_POST_AUTH = 0x01,
806 GLOBUS_GSC_COMMAND_PRE_AUTH = 0x02
807} globus_gsc_959_command_desc_t;
810globus_gsc_string_to_959(
813 const char * preline);
816(*globus_gsc_959_command_cb_t)(
817 globus_gsc_959_op_t op,
818 const char * full_command,
824globus_gsc_959_command_add(
825 globus_gridftp_server_control_t server,
826 const char * command_name,
827 globus_gsc_959_command_cb_t command_cb,
828 globus_gsc_959_command_desc_t desc,
835globus_gsc_959_command_remove(
836 globus_gridftp_server_control_t server,
837 const char * command_name);
840globus_gsc_959_finished_command(
841 globus_gsc_959_op_t op,
845globus_gridftp_server_control_event_send_perf(
846 globus_gridftp_server_control_op_t op,
848 globus_off_t nbytes);
851globus_gridftp_server_control_event_send_restart(
852 globus_gridftp_server_control_op_t op,
853 globus_range_list_t restart);
857globus_gridftp_server_control_421_end(
858 globus_gridftp_server_control_t server,
861extern globus_module_descriptor_t globus_i_gsc_module;
863#define GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE (&globus_i_gsc_module)
Definition: globus_gridftp_server_control.h:204