globus_connect_gridftp_server  17.0~rc3
globus_gridftp_server_control.h
1 
2 #if !defined GLOBUS_GRIDFTP_SERVER_CONTROL_H
3 #define GLOBUS_GRIDFTP_SERVER_CONTROL_H
4 
5 #include "globus_xio.h"
6 #include "globus_common.h"
7 #include "globus_gss_assist.h"
8 #include "globus_xio_system.h"
9 
10 #ifndef TARGET_ARCH_WIN32
11 #include <grp.h>
12 
13 #else
14 typedef int gid_t;
15 
16 struct passwd
17 {
18  char *pw_name;
19  char *pw_passwd;
20  int pw_uid;
21  int pw_gid;
22  char *pw_comment;
23  char *pw_gecos;
24  char *pw_dir;
25  char *pw_shell;
26 };
27 
28 struct group
29 {
30  char *gr_name;
31  char *gr_passwd;
32  gid_t gr_gid;
33  char **gr_mem;
34 };
35 
36 #endif /* WIN32 */
37 
38 typedef struct globus_i_gsc_server_handle_s * globus_gridftp_server_control_t;
39 typedef struct globus_i_gsc_attr_s * globus_gridftp_server_control_attr_t;
40 typedef struct globus_i_gsc_op_s * globus_gridftp_server_control_op_t;
41 typedef struct globus_i_gsc_op_s * globus_gsc_959_op_t;
42 typedef time_t globus_time_t;
43 
44 /***********************************************************************
45  * error types
46  * -----------
47  **********************************************************************/
48 typedef enum globus_gsc_error_type_e
49 {
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;
56 
57 typedef enum globus_gsc_response_e
58 {
59  /* user command errors */
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;
73 
74 #ifdef __GNUC__
75 #define GlobusGridFTPServerName(func) static const char * _gridftp_server_name __attribute__((__unused__)) = #func
76 #else
77 #define GlobusGridFTPServerName(func) static const char * _gridftp_server_name = #func
78 #endif
79 
80 #define _FSCSL(s) globus_common_i18n_get_string( \
81  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
82  s)
83 
84 #define _FSMSL(s) globus_common_i18n_get_string_by_key( \
85  NULL, \
86  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE->module_name, \
87  s)
88 
89 
90 #define GlobusGridFTPServerErrorParameter(param_name) \
91  globus_error_put( \
92  globus_error_construct_error( \
93  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
94  GLOBUS_NULL, \
95  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_PARAMETER, \
96  __FILE__, \
97  _gridftp_server_name, \
98  __LINE__, \
99  "Bad parameter, %s", \
100  (param_name)))
101 
102 #define GlobusGridFTPServerControlErrorSyntax() \
103  globus_error_put( \
104  globus_error_construct_error( \
105  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
106  GLOBUS_NULL, \
107  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_SYNTAX, \
108  __FILE__, \
109  _gridftp_server_name, \
110  __LINE__, \
111  "Syntax error"))
112 
113 #define GlobusGridFTPServerControlErrorPanic() \
114  globus_error_put( \
115  globus_error_construct_error( \
116  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
117  GLOBUS_NULL, \
118  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_PANIC, \
119  __FILE__, \
120  _gridftp_server_name, \
121  __LINE__, \
122  "Panic error"))
123 
124 #define GlobusGridFTPServerControlErrorSystem() \
125  globus_error_put( \
126  globus_error_construct_error( \
127  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
128  GLOBUS_NULL, \
129  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_SYSTEM_RESOURCE, \
130  __FILE__, \
131  _gridftp_server_name, \
132  __LINE__, \
133  "System resource error"))
134 
135 // For compatibility with old mispelled macro - deprecated
136 #define GlobusGridFTPServerControlErrorSytem() \
137  GlobusGridFTPServerControlErrorSystem()
138 
139 #define GlobusGridFTPServerControlErrorAuthentication() \
140  globus_error_put( \
141  globus_error_construct_error( \
142  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
143  GLOBUS_NULL, \
144  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_AUTHENTICATION, \
145  __FILE__, \
146  _gridftp_server_name, \
147  __LINE__, \
148  "Authentication error"))
149 
150 #define GlobusGridFTPServerControlErrorRead(_base) \
151  globus_error_put( \
152  globus_error_construct_error( \
153  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
154  GLOBUS_NULL, \
155  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_READ_ERROR, \
156  __FILE__, \
157  _gridftp_server_name, \
158  __LINE__, \
159  "Error reading the control channel."))
160 
161 
162 #define GLOBUS_GRIDFTP_SERVER_LIBRARY_DYNAMIC_FILE_MASK 010000000
163 /*
164  * globus_gridftp_server_control_security_type_t
165  * ---------------------------------------------
166  * The allowed security modes. Can be a mask of more than 1 selection.
167  */
168 typedef enum globus_gsc_security_type_e
169 {
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;
174 
175 typedef enum globus_gsc_layout_e
176 {
177  GLOBUS_GSC_LAYOUT_TYPE_NONE = 0,
178  GLOBUS_GSC_LAYOUT_TYPE_PARTITIONED,
179  GLOBUS_GSC_LAYOUT_TYPE_BLOCKED
180 } globus_gsc_layout_t;
181 
182 typedef enum globus_gridftp_server_control_stat_error_e
183 {
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;
188 
189 typedef 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;
193 
194 
204 {
205  int mode;
206  int nlink;
207  char * name;
208  char * symlink_target;
209  uid_t uid;
210  gid_t gid;
211  globus_off_t size;
212  globus_time_t atime;
213  globus_time_t ctime;
214  globus_time_t mtime;
215  int dev;
216  int ino;
217  int link_mode;
218  globus_gridftp_server_control_stat_error_t error;
220 
228 typedef enum globus_gridftp_server_control_network_protocol_e
229 {
230  GLOBUS_GRIDFTP_SERVER_CONTROL_PROTOCOL_IPV4 = 1,
231  GLOBUS_GRIDFTP_SERVER_CONTROL_PROTOCOL_IPV6
232 } globus_gridftp_server_control_network_protocol_t;
233 
244 typedef enum globus_i_gsc_data_dir_e
245 {
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;
250 
258 typedef enum globus_gridftp_server_control_event_type_e
259 {
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;
265 
275 typedef void
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,
282  const char * pw,
283  void * user_arg);
284 
291 globus_result_t
292 globus_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,
296  const char * msg);
297 
306 typedef enum globus_gridftp_server_control_resource_mask_e
307 {
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;
312 
318 typedef void
319 (*globus_gridftp_server_control_cb_t)(
320  globus_gridftp_server_control_t server,
321  globus_result_t res,
322  void * user_arg);
323 
334 typedef void
335 (*globus_gridftp_server_control_resource_cb_t)(
336  globus_gridftp_server_control_op_t op,
337  const char * path,
338  globus_gridftp_server_control_resource_mask_t mask,
339  void * user_arg);
340 
341 /*
342  * this function is called to tell the user that a data transfer
343  * has been requested by the client.
344  */
345 typedef void
346 (*globus_gridftp_server_control_transfer_cb_t)(
347  globus_gridftp_server_control_op_t op,
348  void * data_handle,
349  const char * local_target,
350  const char * mod_name,
351  const char * mod_parms,
352  globus_range_list_t range_list,
353  void * user_arg);
354 
355 typedef void
356 (*globus_gridftp_server_control_list_cb_t)(
357  globus_gridftp_server_control_op_t op,
358  void * data_handle,
359  const char * path,
360  const char * fact_str,
361  int depth,
362  int traversal_options,
363  void * user_arg);
364 
365 globus_result_t
366 globus_gridftp_server_control_list_buffer_alloc(
367  const char * fact_str,
368  uid_t uid,
369  const char * base_path,
370  globus_gridftp_server_control_stat_t * stat_info_array,
371  int stat_count,
372  globus_byte_t ** out_buf,
373  globus_size_t * out_size);
374 
375 void
376 globus_gridftp_server_control_list_buffer_free(
377  globus_byte_t * buffer);
378 
387 enum
388 {
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
399 };
400 
401 typedef void
402 (*globus_gridftp_server_control_log_cb_t)(
403  globus_gridftp_server_control_t server_handle,
404  const char * full_command,
405  int cls,
406  void * user_arg);
407 
420 typedef void
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,
424  int max,
425  const char * pathname,
426  void * user_arg);
427 
440 typedef void
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,
444  const char ** cs,
445  int cs_count,
446  void * user_arg);
447 
456 typedef void
457 (*globus_gridftp_server_control_data_destroy_cb_t)(
458  void * user_data_handle,
459  void * user_arg);
460 
461 typedef void
462 (*globus_gridftp_server_control_event_cb_t)(
463  globus_gridftp_server_control_op_t op,
464  int event_type,
465  void * user_arg);
466 
467 globus_result_t
468 globus_gridftp_server_control_events_enable(
469  globus_gridftp_server_control_op_t op,
470  int event_mask,
471  globus_gridftp_server_control_event_cb_t event_cb,
472  void * user_arg);
473 
474 /*
475 globus_result_t
476 globus_gridftp_server_control_events_disable(
477  globus_gridftp_server_control_op_t op);
478 */
479 
487 globus_result_t
488 globus_gridftp_server_control_finished_resource(
489  globus_gridftp_server_control_op_t op,
490  globus_gridftp_server_control_stat_t * stat_info_array,
491  int stat_count,
492  int uid,
493  int gid_count,
494  int * gid_array,
495  globus_gridftp_server_control_response_t response_code,
496  const char * msg);
497 
498 /**************************************************************************
499  * attr functions.
500  *
501  * self explaintory for now
502  *************************************************************************/
503 globus_result_t
504 globus_gridftp_server_control_attr_init(
505  globus_gridftp_server_control_attr_t * in_attr);
506 
507 globus_result_t
508 globus_gridftp_server_control_attr_destroy(
509  globus_gridftp_server_control_attr_t in_attr);
510 
511 globus_result_t
512 globus_gridftp_server_control_attr_copy(
513  globus_gridftp_server_control_attr_t * dst,
514  globus_gridftp_server_control_attr_t src);
515 
516 globus_result_t
517 globus_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,
520  void * user_arg);
521 
522 globus_result_t
523 globus_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,
526  void * user_arg);
527 
528 globus_result_t
529 globus_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,
532  void * user_arg);
533 
534 globus_result_t
535 globus_gridftp_server_control_attr_set_banner(
536  globus_gridftp_server_control_attr_t in_attr,
537  char * banner);
538 
539 globus_result_t
540 globus_gridftp_server_control_attr_set_message(
541  globus_gridftp_server_control_attr_t in_attr,
542  char * message);
543 
544 globus_result_t
545 globus_gridftp_server_control_attr_set_security(
546  globus_gridftp_server_control_attr_t in_attr,
547  globus_gridftp_server_control_security_type_t sec);
548 
549 globus_result_t
550 globus_gridftp_server_control_attr_set_idle_time(
551  globus_gridftp_server_control_attr_t in_attr,
552  int idle_timeout,
553  int preauth_timeout);
554 
555 /*
556  * if module name is NULL then it is the default handler
557  */
558 globus_result_t
559 globus_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,
563  void * user_arg);
564 
565 globus_result_t
566 globus_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,
570  void * user_arg);
571 
572 globus_result_t
573 globus_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,
576  void * active_arg,
577  globus_gridftp_server_control_passive_connect_cb_t passive_cb,
578  void * passive_arg,
579  globus_gridftp_server_control_data_destroy_cb_t destroy_cb,
580  void * destroy_arg);
581 
582 globus_result_t
583 globus_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,
586  int log_mask,
587  void * user_arg);
588 
596 globus_result_t
597 globus_gridftp_server_control_init(
598  globus_gridftp_server_control_t * server);
599 
606 globus_result_t
607 globus_gridftp_server_control_destroy(
608  globus_gridftp_server_control_t server);
609 
621 globus_result_t
622 globus_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,
627  void * user_arg);
628 
637 globus_result_t
638 globus_gridftp_server_control_stop(
639  globus_gridftp_server_control_t server);
640 
641 /*
642  * setters and getters
643  */
644 globus_result_t
645 globus_gridftp_server_control_get_allocated(
646  globus_gridftp_server_control_op_t op,
647  globus_off_t * out_allo);
648 
649 globus_result_t
650 globus_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);
654 
655 globus_result_t
656 globus_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);
660 
661 globus_result_t
662 globus_gridftp_server_control_get_parallelism(
663  globus_gridftp_server_control_op_t op,
664  int * out_parallelism);
665 
666 globus_result_t
667 globus_gridftp_server_control_get_mode(
668  globus_gridftp_server_control_op_t op,
669  char * out_mode);
670 
671 globus_result_t
672 globus_gridftp_server_control_get_type(
673  globus_gridftp_server_control_op_t op,
674  char * out_type);
675 
676 globus_result_t
677 globus_gridftp_server_control_get_cwd(
678  globus_gridftp_server_control_t server,
679  char ** cwd_string);
680 
681 globus_result_t
682 globus_gridftp_server_control_set_cwd(
683  globus_gridftp_server_control_t server,
684  const char * cwd_string);
685 
686 globus_result_t
687 globus_gridftp_server_control_get_data_auth(
688  globus_gridftp_server_control_op_t op,
689  char ** subject,
690  char * dcau,
691  char * prot,
692  gss_cred_id_t * del_cred);
693 
694 globus_bool_t
695 globus_gridftp_server_control_authenticated(
696  globus_gridftp_server_control_t server);
697 
698 /***************************************************************************
699  * data object
700  *
701  * The server uses the following interface functions for communication
702  * with the user data connection needs. The user is responisible for
703  * bringing up the data connection. This library will manage when a new
704  * data connection must be created, but it relies on the user to actually
705  * make the connection.
706  **************************************************************************/
707 
719 globus_result_t
720 globus_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,
725  const char * msg);
726 
738 globus_result_t
739 globus_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,
743  const char ** cs,
744  int cs_count,
745  globus_gridftp_server_control_response_t response_code,
746  const char * msg);
747 
757 globus_result_t
758 globus_gridftp_server_control_disconnected(
759  globus_gridftp_server_control_t server,
760  void * user_data_handle);
761 
773 globus_result_t
774 globus_gridftp_server_control_begin_transfer(
775  globus_gridftp_server_control_op_t op);
776 
784 globus_result_t
785 globus_gridftp_server_control_finished_transfer(
786  globus_gridftp_server_control_op_t op,
787  globus_gridftp_server_control_response_t response_code,
788  const char * msg);
789 
790 globus_result_t
791 globus_gridftp_server_control_set_paths(
792  globus_gridftp_server_control_op_t op,
793  const char * absolute_path,
794  const char * resolved_path);
795 
796 globus_result_t
797 globus_gridftp_server_control_add_feature(
798  globus_gridftp_server_control_t server,
799  const char * feature);
800 
801 
802 /* use with care, not *external* external */
803 typedef enum globus_gsc_959_command_desc_e
804 {
805  GLOBUS_GSC_COMMAND_POST_AUTH = 0x01,
806  GLOBUS_GSC_COMMAND_PRE_AUTH = 0x02
807 } globus_gsc_959_command_desc_t;
808 
809 char *
810 globus_gsc_string_to_959(
811  int code,
812  const char * in_str,
813  const char * preline);
814 
815 typedef void
816 (*globus_gsc_959_command_cb_t)(
817  globus_gsc_959_op_t op,
818  const char * full_command,
819  char ** cmd_array,
820  int argc,
821  void * user_arg);
822 
823 globus_result_t
824 globus_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,
829  int min_argc,
830  int max_argc,
831  const char * help,
832  void * user_arg);
833 
834 globus_result_t
835 globus_gsc_959_command_remove(
836  globus_gridftp_server_control_t server,
837  const char * command_name);
838 
839 void
840 globus_gsc_959_finished_command(
841  globus_gsc_959_op_t op,
842  char * reply_msg);
843 
844 globus_result_t
845 globus_gridftp_server_control_event_send_perf(
846  globus_gridftp_server_control_op_t op,
847  int stripe_ndx,
848  globus_off_t nbytes);
849 
850 globus_result_t
851 globus_gridftp_server_control_event_send_restart(
852  globus_gridftp_server_control_op_t op,
853  globus_range_list_t restart);
854 
855 
856 void
857 globus_gridftp_server_control_421_end(
858  globus_gridftp_server_control_t server,
859  char * reply_msg);
860 
861 extern globus_module_descriptor_t globus_i_gsc_module;
862 
863 #define GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE (&globus_i_gsc_module)
864 
865 #endif
Definition: globus_gridftp_server_control.h:204