Grid Community Toolkit  6.2.1550507116
globus_gridftp_server_control.h
1 /*
2  * Copyright 1999-2006 University of Chicago
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #if !defined GLOBUS_GRIDFTP_SERVER_CONTROL_H
18 #define GLOBUS_GRIDFTP_SERVER_CONTROL_H
19 
20 #include "globus_xio.h"
21 #include "globus_common.h"
22 #include "globus_gss_assist.h"
23 #include "globus_xio_system.h"
24 
25 #ifndef TARGET_ARCH_WIN32
26 #include <grp.h>
27 
28 #else
29 typedef int gid_t;
30 
31 struct passwd
32 {
33  char *pw_name;
34  char *pw_passwd;
35  int pw_uid;
36  int pw_gid;
37  char *pw_comment;
38  char *pw_gecos;
39  char *pw_dir;
40  char *pw_shell;
41 };
42 
43 struct group
44 {
45  char *gr_name;
46  char *gr_passwd;
47  gid_t gr_gid;
48  char **gr_mem;
49 };
50 
51 #endif /* WIN32 */
52 
53 typedef struct globus_i_gsc_server_handle_s * globus_gridftp_server_control_t;
54 typedef struct globus_i_gsc_attr_s * globus_gridftp_server_control_attr_t;
55 typedef struct globus_i_gsc_op_s * globus_gridftp_server_control_op_t;
56 typedef struct globus_i_gsc_op_s * globus_gsc_959_op_t;
57 typedef time_t globus_time_t;
58 
59 /***********************************************************************
60  * error types
61  * -----------
62  **********************************************************************/
63 typedef enum globus_gsc_error_type_e
64 {
65  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_PANIC,
66  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_SYSTEM_RESOURCE,
67  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_AUTHENTICATION,
68  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_SYNTAX
69 } globus_gridftp_server_control_error_type_t;
70 
71 typedef enum globus_gsc_response_e
72 {
73  /* user command errors */
74  GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_SUCCESS,
75  GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_ACTION_FAILED,
76  GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_PATH_INVALID,
77  GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_INVALID_FILE_TYPE,
78  GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_ACCESS_DENIED,
79  GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_DATA_CONN_TERMINATED,
80  GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_DATA_CONN_FAILED,
81  GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_DATA_CONN_AUTH,
82  GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_PANIC,
83  GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_PARTIAL_SUCCESS,
84  GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_MIN_FTP_ERROR = 400,
85  GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_MAX_FTP_ERROR = 599
86 } globus_gridftp_server_control_response_t;
87 
88 // For compatibility with old mispelled name - deprecated
89 #define GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_ACCESS_DENINED \
90  GLOBUS_GRIDFTP_SERVER_CONTROL_RESPONSE_ACCESS_DENIED
91 
92 #ifdef __GNUC__
93 #define GlobusGridFTPServerName(func) static const char * _gridftp_server_name __attribute__((__unused__)) = #func
94 #else
95 #define GlobusGridFTPServerName(func) static const char * _gridftp_server_name = #func
96 #endif
97 
98 #define _FSCSL(s) globus_common_i18n_get_string( \
99  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
100  s)
101 
102 #define _FSMSL(s) globus_common_i18n_get_string_by_key( \
103  NULL, \
104  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE->module_name, \
105  s)
106 
107 
108 #define GlobusGridFTPServerErrorParameter(param_name) \
109  globus_error_put( \
110  globus_error_construct_error( \
111  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
112  GLOBUS_NULL, \
113  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_PARAMETER, \
114  __FILE__, \
115  _gridftp_server_name, \
116  __LINE__, \
117  "Bad parameter, %s", \
118  (param_name)))
119 
120 #define GlobusGridFTPServerControlErrorSyntax() \
121  globus_error_put( \
122  globus_error_construct_error( \
123  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
124  GLOBUS_NULL, \
125  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_SYNTAX, \
126  __FILE__, \
127  _gridftp_server_name, \
128  __LINE__, \
129  "Syntax error"))
130 
131 #define GlobusGridFTPServerControlErrorPanic() \
132  globus_error_put( \
133  globus_error_construct_error( \
134  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
135  GLOBUS_NULL, \
136  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_PANIC, \
137  __FILE__, \
138  _gridftp_server_name, \
139  __LINE__, \
140  "Panic error"))
141 
142 #define GlobusGridFTPServerControlErrorSystem() \
143  globus_error_put( \
144  globus_error_construct_error( \
145  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
146  GLOBUS_NULL, \
147  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_SYSTEM_RESOURCE, \
148  __FILE__, \
149  _gridftp_server_name, \
150  __LINE__, \
151  "System resource error"))
152 
153 // For compatibility with old mispelled macro - deprecated
154 #define GlobusGridFTPServerControlErrorSytem() \
155  GlobusGridFTPServerControlErrorSystem()
156 
157 #define GlobusGridFTPServerControlErrorAuthentication() \
158  globus_error_put( \
159  globus_error_construct_error( \
160  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
161  GLOBUS_NULL, \
162  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_AUTHENTICATION, \
163  __FILE__, \
164  _gridftp_server_name, \
165  __LINE__, \
166  "Authentication error"))
167 
168 
169 /*
170  * globus_gridftp_server_control_security_type_t
171  * ---------------------------------------------
172  * The allowed security modes. Can be a mask of more than 1 selection.
173  */
174 typedef enum globus_gsc_security_type_e
175 {
176  GLOBUS_GRIDFTP_SERVER_LIBRARY_NONE = 0x01,
177  GLOBUS_GRIDFTP_SERVER_LIBRARY_GSSAPI = 0x02,
178  GLOBUS_GRIDFTP_SERVER_LIBRARY_TLS = 0x04
179 } globus_gridftp_server_control_security_type_t;
180 
181 typedef enum globus_gsc_layout_e
182 {
183  GLOBUS_GSC_LAYOUT_TYPE_NONE = 0,
184  GLOBUS_GSC_LAYOUT_TYPE_PARTITIONED,
185  GLOBUS_GSC_LAYOUT_TYPE_BLOCKED
186 } globus_gsc_layout_t;
187 
188 typedef enum globus_gridftp_server_control_stat_error_e
189 {
190  GLOBUS_GRIDFTP_SERVER_CONTROL_STAT_SUCCESS = 0,
191  GLOBUS_GRIDFTP_SERVER_CONTROL_STAT_OPENFAILED,
192  GLOBUS_GRIDFTP_SERVER_CONTROL_STAT_INVALIDLINK,
193 } globus_gridftp_server_control_stat_error_t;
194 
195 typedef enum globus_gfs_traversal_options_e {
196  GLOBUS_GFS_TRAVERSAL_CONTINUE = 1,
197  GLOBUS_GFS_TRAVERSAL_FOLLOW_SYMLINKS = 2
198 } globus_gfs_traversal_options_t;
199 
200 
210 {
211  int mode;
212  int nlink;
213  char * name;
214  char * symlink_target;
215  uid_t uid;
216  gid_t gid;
217  globus_off_t size;
218  globus_time_t atime;
219  globus_time_t ctime;
220  globus_time_t mtime;
221  int dev;
222  int ino;
223  int link_mode;
224  globus_gridftp_server_control_stat_error_t error;
226 
234 typedef enum globus_gridftp_server_control_network_protocol_e
235 {
236  GLOBUS_GRIDFTP_SERVER_CONTROL_PROTOCOL_IPV4 = 1,
237  GLOBUS_GRIDFTP_SERVER_CONTROL_PROTOCOL_IPV6
238 } globus_gridftp_server_control_network_protocol_t;
239 
250 typedef enum globus_i_gsc_data_dir_e
251 {
252  GLOBUS_GRIDFTP_SERVER_CONTROL_DATA_DIR_RECV = 0x01,
253  GLOBUS_GRIDFTP_SERVER_CONTROL_DATA_DIR_SEND = 0x02,
254  GLOBUS_GRIDFTP_SERVER_CONTROL_DATA_DIR_BI = 0x03
255 } globus_gridftp_server_control_data_dir_t;
256 
264 typedef enum globus_gridftp_server_control_event_type_e
265 {
266  GLOBUS_GRIDFTP_SERVER_CONTROL_EVENT_PERF = 0x01,
267  GLOBUS_GRIDFTP_SERVER_CONTROL_EVENT_RESTART = 0x02,
268  GLOBUS_GRIDFTP_SERVER_CONTROL_EVENT_ABORT = 0x04,
269  GLOBUS_GRIDFTP_SERVER_CONTROL_EVENT_TRANSFER_COMPLETE = 0x08
270 } globus_gridftp_server_control_event_type_t;
271 
281 typedef void
282 (*globus_gridftp_server_control_auth_cb_t)(
283  globus_gridftp_server_control_op_t op,
284  globus_gridftp_server_control_security_type_t secure_type,
285  gss_ctx_id_t context,
286  const char * subject,
287  const char * user_name,
288  const char * pw,
289  void * user_arg);
290 
298 globus_gridftp_server_control_finished_auth(
299  globus_gridftp_server_control_op_t op,
300  const char * username,
301  globus_gridftp_server_control_response_t response_code,
302  const char * msg);
303 
312 typedef enum globus_gridftp_server_control_resource_mask_e
313 {
314  GLOBUS_GRIDFTP_SERVER_CONTROL_RESOURCE_DIRECTORY_LIST = 1,
315  GLOBUS_GRIDFTP_SERVER_CONTROL_RESOURCE_FILE_ONLY = 2,
316  GLOBUS_GRIDFTP_SERVER_CONTROL_RESOURCE_USER_DEFINED = 3
317 } globus_gridftp_server_control_resource_mask_t;
318 
324 typedef void
325 (*globus_gridftp_server_control_cb_t)(
326  globus_gridftp_server_control_t server,
327  globus_result_t res,
328  void * user_arg);
329 
340 typedef void
341 (*globus_gridftp_server_control_resource_cb_t)(
342  globus_gridftp_server_control_op_t op,
343  const char * path,
344  globus_gridftp_server_control_resource_mask_t mask,
345  void * user_arg);
346 
347 /*
348  * this function is called to tell the user that a data transfer
349  * has been requested by the client.
350  */
351 typedef void
352 (*globus_gridftp_server_control_transfer_cb_t)(
353  globus_gridftp_server_control_op_t op,
354  void * data_handle,
355  const char * local_target,
356  const char * mod_name,
357  const char * mod_parms,
358  globus_range_list_t range_list,
359  void * user_arg);
360 
361 typedef void
362 (*globus_gridftp_server_control_list_cb_t)(
363  globus_gridftp_server_control_op_t op,
364  void * data_handle,
365  const char * path,
366  const char * fact_str,
367  int depth,
368  int traversal_options,
369  void * user_arg);
370 
372 globus_gridftp_server_control_list_buffer_alloc(
373  const char * fact_str,
374  uid_t uid,
375  const char * base_path,
376  globus_gridftp_server_control_stat_t * stat_info_array,
377  int stat_count,
378  globus_byte_t ** out_buf,
379  globus_size_t * out_size);
380 
381 void
382 globus_gridftp_server_control_list_buffer_free(
383  globus_byte_t * buffer);
384 
393 enum
394 {
395  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_SECURITY = 0x0001,
396  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_TRANSFER = 0x0004,
397  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_TRANSFER_STATE = 0x0008,
398  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_FILE_COMMANDS = 0x0010,
399  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_ERROR = 0x0020,
400  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_SITE = 0x0040,
401  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_LIST = 0x0080,
402  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_OTHER = 0x0100,
403  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_REPLY = 0x0400,
404  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_ALL = 0xFFFF
405 };
406 
407 typedef void
408 (*globus_gridftp_server_control_log_cb_t)(
409  globus_gridftp_server_control_t server_handle,
410  const char * full_command,
411  int cls,
412  void * user_arg);
413 
426 typedef void
427 (*globus_gridftp_server_control_passive_connect_cb_t)(
428  globus_gridftp_server_control_op_t op,
429  globus_gridftp_server_control_network_protocol_t net_prt,
430  int max,
431  const char * pathname,
432  void * user_arg);
433 
446 typedef void
447 (*globus_gridftp_server_control_active_connect_cb_t)(
448  globus_gridftp_server_control_op_t op,
449  globus_gridftp_server_control_network_protocol_t net_prt,
450  const char ** cs,
451  int cs_count,
452  void * user_arg);
453 
462 typedef void
463 (*globus_gridftp_server_control_data_destroy_cb_t)(
464  void * user_data_handle,
465  void * user_arg);
466 
467 typedef void
468 (*globus_gridftp_server_control_event_cb_t)(
469  globus_gridftp_server_control_op_t op,
470  int event_type,
471  void * user_arg);
472 
474 globus_gridftp_server_control_events_enable(
475  globus_gridftp_server_control_op_t op,
476  int event_mask,
477  globus_gridftp_server_control_event_cb_t event_cb,
478  void * user_arg);
479 
480 /*
481 globus_result_t
482 globus_gridftp_server_control_events_disable(
483  globus_gridftp_server_control_op_t op);
484 */
485 
494 globus_gridftp_server_control_finished_resource(
495  globus_gridftp_server_control_op_t op,
496  globus_gridftp_server_control_stat_t * stat_info_array,
497  int stat_count,
498  int uid,
499  int gid_count,
500  int * gid_array,
501  globus_gridftp_server_control_response_t response_code,
502  const char * msg);
503 
504 /**************************************************************************
505  * attr functions.
506  *
507  * self explaintory for now
508  *************************************************************************/
510 globus_gridftp_server_control_attr_init(
511  globus_gridftp_server_control_attr_t * in_attr);
512 
514 globus_gridftp_server_control_attr_destroy(
515  globus_gridftp_server_control_attr_t in_attr);
516 
518 globus_gridftp_server_control_attr_copy(
519  globus_gridftp_server_control_attr_t * dst,
520  globus_gridftp_server_control_attr_t src);
521 
523 globus_gridftp_server_control_attr_set_resource(
524  globus_gridftp_server_control_attr_t in_attr,
525  globus_gridftp_server_control_resource_cb_t resource_cb,
526  void * user_arg);
527 
529 globus_gridftp_server_control_attr_set_auth(
530  globus_gridftp_server_control_attr_t in_attr,
531  globus_gridftp_server_control_auth_cb_t auth_cb,
532  void * user_arg);
533 
535 globus_gridftp_server_control_attr_set_list(
536  globus_gridftp_server_control_attr_t in_attr,
537  globus_gridftp_server_control_list_cb_t list_cb,
538  void * user_arg);
539 
541 globus_gridftp_server_control_attr_set_banner(
542  globus_gridftp_server_control_attr_t in_attr,
543  char * banner);
544 
546 globus_gridftp_server_control_attr_set_message(
547  globus_gridftp_server_control_attr_t in_attr,
548  char * message);
549 
551 globus_gridftp_server_control_attr_set_security(
552  globus_gridftp_server_control_attr_t in_attr,
553  globus_gridftp_server_control_security_type_t sec);
554 
556 globus_gridftp_server_control_attr_set_idle_time(
557  globus_gridftp_server_control_attr_t in_attr,
558  int idle_timeout,
559  int preauth_timeout);
560 
562 globus_gridftp_server_control_attr_set_epsv_ip(
563  globus_gridftp_server_control_attr_t in_attr,
564  globus_bool_t epsv_ip);
565 
566 /*
567  * if module name is NULL then it is the default handler
568  */
570 globus_gridftp_server_control_attr_add_recv(
571  globus_gridftp_server_control_attr_t in_attr,
572  const char * module_name,
573  globus_gridftp_server_control_transfer_cb_t recv_func,
574  void * user_arg);
575 
577 globus_gridftp_server_control_attr_add_send(
578  globus_gridftp_server_control_attr_t in_attr,
579  const char * module_name,
580  globus_gridftp_server_control_transfer_cb_t send_func,
581  void * user_arg);
582 
584 globus_gridftp_server_control_attr_data_functions(
585  globus_gridftp_server_control_attr_t server_attr,
586  globus_gridftp_server_control_active_connect_cb_t active_cb,
587  void * active_arg,
588  globus_gridftp_server_control_passive_connect_cb_t passive_cb,
589  void * passive_arg,
590  globus_gridftp_server_control_data_destroy_cb_t destroy_cb,
591  void * destroy_arg);
592 
594 globus_gridftp_server_control_attr_set_log(
595  globus_gridftp_server_control_attr_t server_attr,
596  globus_gridftp_server_control_log_cb_t log_func,
597  int log_mask,
598  void * user_arg);
599 
608 globus_gridftp_server_control_init(
609  globus_gridftp_server_control_t * server);
610 
618 globus_gridftp_server_control_destroy(
619  globus_gridftp_server_control_t server);
620 
633 globus_gridftp_server_control_start(
634  globus_gridftp_server_control_t server,
635  globus_gridftp_server_control_attr_t attr,
636  globus_xio_system_socket_t system_handle,
637  globus_gridftp_server_control_cb_t done_cb,
638  void * user_arg);
639 
649 globus_gridftp_server_control_stop(
650  globus_gridftp_server_control_t server);
651 
652 /*
653  * setters and getters
654  */
656 globus_gridftp_server_control_get_allocated(
657  globus_gridftp_server_control_op_t op,
658  globus_off_t * out_allo);
659 
661 globus_gridftp_server_control_get_layout(
662  globus_gridftp_server_control_op_t op,
663  globus_gsc_layout_t * layout_type,
664  globus_size_t * block_size);
665 
667 globus_gridftp_server_control_get_buffer_size(
668  globus_gridftp_server_control_op_t op,
669  globus_size_t * out_recv_bs,
670  globus_size_t * out_send_bs);
671 
673 globus_gridftp_server_control_get_parallelism(
674  globus_gridftp_server_control_op_t op,
675  int * out_parallelism);
676 
678 globus_gridftp_server_control_get_mode(
679  globus_gridftp_server_control_op_t op,
680  char * out_mode);
681 
683 globus_gridftp_server_control_get_type(
684  globus_gridftp_server_control_op_t op,
685  char * out_type);
686 
688 globus_gridftp_server_control_get_cwd(
689  globus_gridftp_server_control_t server,
690  char ** cwd_string);
691 
693 globus_gridftp_server_control_set_cwd(
694  globus_gridftp_server_control_t server,
695  const char * cwd_string);
696 
698 globus_gridftp_server_control_get_data_auth(
699  globus_gridftp_server_control_op_t op,
700  char ** subject,
701  char * dcau,
702  char * prot,
703  gss_cred_id_t * del_cred);
704 
706 globus_gridftp_server_control_authenticated(
707  globus_gridftp_server_control_t server);
708 
709 char *
710 globus_gridftp_server_control_get_cmd_string(
711  globus_gridftp_server_control_op_t op);
712 
713 /***************************************************************************
714  * data object
715  *
716  * The server uses the following interface functions for communication
717  * with the user data connection needs. The user is responisible for
718  * bringing up the data connection. This library will manage when a new
719  * data connection must be created, but it relies on the user to actually
720  * make the connection.
721  **************************************************************************/
722 
735 globus_gridftp_server_control_finished_active_connect(
736  globus_gridftp_server_control_op_t op,
737  void * user_data_handle,
738  globus_gridftp_server_control_data_dir_t data_dir,
739  globus_gridftp_server_control_response_t response_code,
740  const char * msg);
741 
754 globus_gridftp_server_control_finished_passive_connect(
755  globus_gridftp_server_control_op_t op,
756  void * user_data_handle,
757  globus_gridftp_server_control_data_dir_t data_dir,
758  const char ** cs,
759  int cs_count,
760  globus_gridftp_server_control_response_t response_code,
761  const char * msg);
762 
773 globus_gridftp_server_control_disconnected(
774  globus_gridftp_server_control_t server,
775  void * user_data_handle);
776 
789 globus_gridftp_server_control_begin_transfer(
790  globus_gridftp_server_control_op_t op);
791 
800 globus_gridftp_server_control_finished_transfer(
801  globus_gridftp_server_control_op_t op,
802  globus_gridftp_server_control_response_t response_code,
803  const char * msg);
804 
806 globus_gridftp_server_control_set_paths(
807  globus_gridftp_server_control_op_t op,
808  const char * absolute_path,
809  const char * resolved_path);
810 
812 globus_gridftp_server_control_add_feature(
813  globus_gridftp_server_control_t server,
814  const char * feature);
815 
816 
817 /* use with care, not *external* external */
818 typedef enum globus_gsc_959_command_desc_e
819 {
820  GLOBUS_GSC_COMMAND_POST_AUTH = 0x01,
821  GLOBUS_GSC_COMMAND_PRE_AUTH = 0x02
822 } globus_gsc_959_command_desc_t;
823 
824 char *
825 globus_gsc_string_to_959(
826  int code,
827  const char * in_str,
828  const char * preline);
829 
830 typedef void
831 (*globus_gsc_959_command_cb_t)(
832  globus_gsc_959_op_t op,
833  const char * full_command,
834  char ** cmd_array,
835  int argc,
836  void * user_arg);
837 
839 globus_gsc_959_command_add(
840  globus_gridftp_server_control_t server,
841  const char * command_name,
842  globus_gsc_959_command_cb_t command_cb,
843  globus_gsc_959_command_desc_t desc,
844  int min_argc,
845  int max_argc,
846  const char * help,
847  void * user_arg);
848 
850 globus_gsc_959_command_remove(
851  globus_gridftp_server_control_t server,
852  const char * command_name);
853 
854 void
855 globus_gsc_959_finished_command(
856  globus_gsc_959_op_t op,
857  char * reply_msg);
858 
860 globus_gridftp_server_control_event_send_perf(
861  globus_gridftp_server_control_op_t op,
862  int stripe_ndx,
863  globus_off_t nbytes);
864 
866 globus_gridftp_server_control_event_send_restart(
867  globus_gridftp_server_control_op_t op,
868  globus_range_list_t restart);
869 
870 
871 void
872 globus_gridftp_server_control_421_end(
873  globus_gridftp_server_control_t server,
874  char * reply_msg);
875 
876 extern globus_module_descriptor_t globus_i_gsc_module;
877 
878 #define GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE (&globus_i_gsc_module)
879 
880 #endif
int globus_bool_t
Boolean type.
Definition: globus_types.h:93
GSS Assist Header.
Definition: globus_gridftp_server_control.h:209
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
unsigned char globus_byte_t
Unsigned byte datatypeThis is used for byte-addressable arrays of arbitrary data which is not subject...
Definition: globus_types.h:85
Headers common to all of Globus.
uint32_t globus_result_t
Definition: globus_types.h:99
Module Descriptor.
Definition: globus_module.h:71