Globus Toolkit  6.0.1502136246
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_DENINED,
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 #ifdef __GNUC__
89 #define GlobusGridFTPServerName(func) static const char * _gridftp_server_name __attribute__((__unused__)) = #func
90 #else
91 #define GlobusGridFTPServerName(func) static const char * _gridftp_server_name = #func
92 #endif
93 
94 #define _FSCSL(s) globus_common_i18n_get_string( \
95  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
96  s)
97 
98 #define _FSMSL(s) globus_common_i18n_get_string_by_key( \
99  NULL, \
100  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE->module_name, \
101  s)
102 
103 
104 #define GlobusGridFTPServerErrorParameter(param_name) \
105  globus_error_put( \
106  globus_error_construct_error( \
107  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
108  GLOBUS_NULL, \
109  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_PARAMETER, \
110  __FILE__, \
111  _gridftp_server_name, \
112  __LINE__, \
113  "Bad parameter, %s", \
114  (param_name)))
115 
116 #define GlobusGridFTPServerControlErrorSyntax() \
117  globus_error_put( \
118  globus_error_construct_error( \
119  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
120  GLOBUS_NULL, \
121  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_SYNTAX, \
122  __FILE__, \
123  _gridftp_server_name, \
124  __LINE__, \
125  "Syntax error"))
126 
127 #define GlobusGridFTPServerControlErrorPanic() \
128  globus_error_put( \
129  globus_error_construct_error( \
130  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
131  GLOBUS_NULL, \
132  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_PANIC, \
133  __FILE__, \
134  _gridftp_server_name, \
135  __LINE__, \
136  "Panic error"))
137 
138 #define GlobusGridFTPServerControlErrorSystem() \
139  globus_error_put( \
140  globus_error_construct_error( \
141  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
142  GLOBUS_NULL, \
143  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_SYSTEM_RESOURCE, \
144  __FILE__, \
145  _gridftp_server_name, \
146  __LINE__, \
147  "System resource error"))
148 
149 // For compatibility with old mispelled macro - deprecated
150 #define GlobusGridFTPServerControlErrorSytem() \
151  GlobusGridFTPServerControlErrorSystem()
152 
153 #define GlobusGridFTPServerControlErrorAuthentication() \
154  globus_error_put( \
155  globus_error_construct_error( \
156  GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE, \
157  GLOBUS_NULL, \
158  GLOBUS_GRIDFTP_SERVER_CONTROL_ERROR_AUTHENTICATION, \
159  __FILE__, \
160  _gridftp_server_name, \
161  __LINE__, \
162  "Authentication error"))
163 
164 
165 /*
166  * globus_gridftp_server_control_security_type_t
167  * ---------------------------------------------
168  * The allowed security modes. Can be a mask of more than 1 selection.
169  */
170 typedef enum globus_gsc_security_type_e
171 {
172  GLOBUS_GRIDFTP_SERVER_LIBRARY_NONE = 0x01,
173  GLOBUS_GRIDFTP_SERVER_LIBRARY_GSSAPI = 0x02
174 } globus_gridftp_server_control_security_type_t;
175 
176 typedef enum globus_gsc_layout_e
177 {
178  GLOBUS_GSC_LAYOUT_TYPE_NONE = 0,
179  GLOBUS_GSC_LAYOUT_TYPE_PARTITIONED,
180  GLOBUS_GSC_LAYOUT_TYPE_BLOCKED
181 } globus_gsc_layout_t;
182 
183 typedef enum globus_gridftp_server_control_stat_error_e
184 {
185  GLOBUS_GRIDFTP_SERVER_CONTROL_STAT_SUCCESS = 0,
186  GLOBUS_GRIDFTP_SERVER_CONTROL_STAT_OPENFAILED,
187  GLOBUS_GRIDFTP_SERVER_CONTROL_STAT_INVALIDLINK,
188 } globus_gridftp_server_control_stat_error_t;
189 
190 typedef enum globus_gfs_traversal_options_e {
191  GLOBUS_GFS_TRAVERSAL_CONTINUE = 1,
192  GLOBUS_GFS_TRAVERSAL_FOLLOW_SYMLINKS = 2
193 } globus_gfs_traversal_options_t;
194 
195 
205 {
206  int mode;
207  int nlink;
208  char * name;
209  char * symlink_target;
210  uid_t uid;
211  gid_t gid;
212  globus_off_t size;
213  globus_time_t atime;
214  globus_time_t ctime;
215  globus_time_t mtime;
216  int dev;
217  int ino;
218  int link_mode;
219  globus_gridftp_server_control_stat_error_t error;
221 
229 typedef enum globus_gridftp_server_control_network_protocol_e
230 {
231  GLOBUS_GRIDFTP_SERVER_CONTROL_PROTOCOL_IPV4 = 1,
232  GLOBUS_GRIDFTP_SERVER_CONTROL_PROTOCOL_IPV6
233 } globus_gridftp_server_control_network_protocol_t;
234 
245 typedef enum globus_i_gsc_data_dir_e
246 {
247  GLOBUS_GRIDFTP_SERVER_CONTROL_DATA_DIR_RECV = 0x01,
248  GLOBUS_GRIDFTP_SERVER_CONTROL_DATA_DIR_SEND = 0x02,
249  GLOBUS_GRIDFTP_SERVER_CONTROL_DATA_DIR_BI = 0x03
250 } globus_gridftp_server_control_data_dir_t;
251 
259 typedef enum globus_gridftp_server_control_event_type_e
260 {
261  GLOBUS_GRIDFTP_SERVER_CONTROL_EVENT_PERF = 0x01,
262  GLOBUS_GRIDFTP_SERVER_CONTROL_EVENT_RESTART = 0x02,
263  GLOBUS_GRIDFTP_SERVER_CONTROL_EVENT_ABORT = 0x04,
264  GLOBUS_GRIDFTP_SERVER_CONTROL_EVENT_TRANSFER_COMPLETE = 0x08
265 } globus_gridftp_server_control_event_type_t;
266 
276 typedef void
277 (*globus_gridftp_server_control_auth_cb_t)(
278  globus_gridftp_server_control_op_t op,
279  globus_gridftp_server_control_security_type_t secure_type,
280  gss_ctx_id_t context,
281  const char * subject,
282  const char * user_name,
283  const char * pw,
284  void * user_arg);
285 
293 globus_gridftp_server_control_finished_auth(
294  globus_gridftp_server_control_op_t op,
295  const char * username,
296  globus_gridftp_server_control_response_t response_code,
297  const char * msg);
298 
307 typedef enum globus_gridftp_server_control_resource_mask_e
308 {
309  GLOBUS_GRIDFTP_SERVER_CONTROL_RESOURCE_DIRECTORY_LIST = 1,
310  GLOBUS_GRIDFTP_SERVER_CONTROL_RESOURCE_FILE_ONLY = 2,
311  GLOBUS_GRIDFTP_SERVER_CONTROL_RESOURCE_USER_DEFINED = 3
312 } globus_gridftp_server_control_resource_mask_t;
313 
319 typedef void
320 (*globus_gridftp_server_control_cb_t)(
321  globus_gridftp_server_control_t server,
322  globus_result_t res,
323  void * user_arg);
324 
335 typedef void
336 (*globus_gridftp_server_control_resource_cb_t)(
337  globus_gridftp_server_control_op_t op,
338  const char * path,
339  globus_gridftp_server_control_resource_mask_t mask,
340  void * user_arg);
341 
342 /*
343  * this function is called to tell the user that a data transfer
344  * has been requested by the client.
345  */
346 typedef void
347 (*globus_gridftp_server_control_transfer_cb_t)(
348  globus_gridftp_server_control_op_t op,
349  void * data_handle,
350  const char * local_target,
351  const char * mod_name,
352  const char * mod_parms,
353  globus_range_list_t range_list,
354  void * user_arg);
355 
356 typedef void
357 (*globus_gridftp_server_control_list_cb_t)(
358  globus_gridftp_server_control_op_t op,
359  void * data_handle,
360  const char * path,
361  const char * fact_str,
362  int depth,
363  int traversal_options,
364  void * user_arg);
365 
367 globus_gridftp_server_control_list_buffer_alloc(
368  const char * fact_str,
369  uid_t uid,
370  const char * base_path,
371  globus_gridftp_server_control_stat_t * stat_info_array,
372  int stat_count,
373  globus_byte_t ** out_buf,
374  globus_size_t * out_size);
375 
376 void
377 globus_gridftp_server_control_list_buffer_free(
378  globus_byte_t * buffer);
379 
388 enum
389 {
390  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_SECURITY = 0x0001,
391  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_TRANSFER = 0x0004,
392  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_TRANSFER_STATE = 0x0008,
393  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_FILE_COMMANDS = 0x0010,
394  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_ERROR = 0x0020,
395  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_SITE = 0x0040,
396  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_LIST = 0x0080,
397  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_OTHER = 0x0100,
398  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_REPLY = 0x0400,
399  GLOBUS_GRIDFTP_SERVER_CONTROL_LOG_ALL = 0xFFFF
400 };
401 
402 typedef void
403 (*globus_gridftp_server_control_log_cb_t)(
404  globus_gridftp_server_control_t server_handle,
405  const char * full_command,
406  int cls,
407  void * user_arg);
408 
421 typedef void
422 (*globus_gridftp_server_control_passive_connect_cb_t)(
423  globus_gridftp_server_control_op_t op,
424  globus_gridftp_server_control_network_protocol_t net_prt,
425  int max,
426  const char * pathname,
427  void * user_arg);
428 
441 typedef void
442 (*globus_gridftp_server_control_active_connect_cb_t)(
443  globus_gridftp_server_control_op_t op,
444  globus_gridftp_server_control_network_protocol_t net_prt,
445  const char ** cs,
446  int cs_count,
447  void * user_arg);
448 
457 typedef void
458 (*globus_gridftp_server_control_data_destroy_cb_t)(
459  void * user_data_handle,
460  void * user_arg);
461 
462 typedef void
463 (*globus_gridftp_server_control_event_cb_t)(
464  globus_gridftp_server_control_op_t op,
465  int event_type,
466  void * user_arg);
467 
469 globus_gridftp_server_control_events_enable(
470  globus_gridftp_server_control_op_t op,
471  int event_mask,
472  globus_gridftp_server_control_event_cb_t event_cb,
473  void * user_arg);
474 
475 /*
476 globus_result_t
477 globus_gridftp_server_control_events_disable(
478  globus_gridftp_server_control_op_t op);
479 */
480 
489 globus_gridftp_server_control_finished_resource(
490  globus_gridftp_server_control_op_t op,
491  globus_gridftp_server_control_stat_t * stat_info_array,
492  int stat_count,
493  int uid,
494  int gid_count,
495  int * gid_array,
496  globus_gridftp_server_control_response_t response_code,
497  const char * msg);
498 
499 /**************************************************************************
500  * attr functions.
501  *
502  * self explaintory for now
503  *************************************************************************/
505 globus_gridftp_server_control_attr_init(
506  globus_gridftp_server_control_attr_t * in_attr);
507 
509 globus_gridftp_server_control_attr_destroy(
510  globus_gridftp_server_control_attr_t in_attr);
511 
513 globus_gridftp_server_control_attr_copy(
514  globus_gridftp_server_control_attr_t * dst,
515  globus_gridftp_server_control_attr_t src);
516 
518 globus_gridftp_server_control_attr_set_resource(
519  globus_gridftp_server_control_attr_t in_attr,
520  globus_gridftp_server_control_resource_cb_t resource_cb,
521  void * user_arg);
522 
524 globus_gridftp_server_control_attr_set_auth(
525  globus_gridftp_server_control_attr_t in_attr,
526  globus_gridftp_server_control_auth_cb_t auth_cb,
527  void * user_arg);
528 
530 globus_gridftp_server_control_attr_set_list(
531  globus_gridftp_server_control_attr_t in_attr,
532  globus_gridftp_server_control_list_cb_t list_cb,
533  void * user_arg);
534 
536 globus_gridftp_server_control_attr_set_banner(
537  globus_gridftp_server_control_attr_t in_attr,
538  char * banner);
539 
541 globus_gridftp_server_control_attr_set_message(
542  globus_gridftp_server_control_attr_t in_attr,
543  char * message);
544 
546 globus_gridftp_server_control_attr_set_security(
547  globus_gridftp_server_control_attr_t in_attr,
548  globus_gridftp_server_control_security_type_t sec);
549 
551 globus_gridftp_server_control_attr_set_idle_time(
552  globus_gridftp_server_control_attr_t in_attr,
553  int idle_timeout,
554  int preauth_timeout);
555 
556 /*
557  * if module name is NULL then it is the default handler
558  */
560 globus_gridftp_server_control_attr_add_recv(
561  globus_gridftp_server_control_attr_t in_attr,
562  const char * module_name,
563  globus_gridftp_server_control_transfer_cb_t recv_func,
564  void * user_arg);
565 
567 globus_gridftp_server_control_attr_add_send(
568  globus_gridftp_server_control_attr_t in_attr,
569  const char * module_name,
570  globus_gridftp_server_control_transfer_cb_t send_func,
571  void * user_arg);
572 
574 globus_gridftp_server_control_attr_data_functions(
575  globus_gridftp_server_control_attr_t server_attr,
576  globus_gridftp_server_control_active_connect_cb_t active_cb,
577  void * active_arg,
578  globus_gridftp_server_control_passive_connect_cb_t passive_cb,
579  void * passive_arg,
580  globus_gridftp_server_control_data_destroy_cb_t destroy_cb,
581  void * destroy_arg);
582 
584 globus_gridftp_server_control_attr_set_log(
585  globus_gridftp_server_control_attr_t server_attr,
586  globus_gridftp_server_control_log_cb_t log_func,
587  int log_mask,
588  void * user_arg);
589 
598 globus_gridftp_server_control_init(
599  globus_gridftp_server_control_t * server);
600 
608 globus_gridftp_server_control_destroy(
609  globus_gridftp_server_control_t server);
610 
623 globus_gridftp_server_control_start(
624  globus_gridftp_server_control_t server,
625  globus_gridftp_server_control_attr_t attr,
626  globus_xio_system_socket_t system_handle,
627  globus_gridftp_server_control_cb_t done_cb,
628  void * user_arg);
629 
639 globus_gridftp_server_control_stop(
640  globus_gridftp_server_control_t server);
641 
642 /*
643  * setters and getters
644  */
646 globus_gridftp_server_control_get_allocated(
647  globus_gridftp_server_control_op_t op,
648  globus_off_t * out_allo);
649 
651 globus_gridftp_server_control_get_layout(
652  globus_gridftp_server_control_op_t op,
653  globus_gsc_layout_t * layout_type,
654  globus_size_t * block_size);
655 
657 globus_gridftp_server_control_get_buffer_size(
658  globus_gridftp_server_control_op_t op,
659  globus_size_t * out_recv_bs,
660  globus_size_t * out_send_bs);
661 
663 globus_gridftp_server_control_get_parallelism(
664  globus_gridftp_server_control_op_t op,
665  int * out_parallelism);
666 
668 globus_gridftp_server_control_get_mode(
669  globus_gridftp_server_control_op_t op,
670  char * out_mode);
671 
673 globus_gridftp_server_control_get_type(
674  globus_gridftp_server_control_op_t op,
675  char * out_type);
676 
678 globus_gridftp_server_control_get_cwd(
679  globus_gridftp_server_control_t server,
680  char ** cwd_string);
681 
683 globus_gridftp_server_control_set_cwd(
684  globus_gridftp_server_control_t server,
685  const char * cwd_string);
686 
688 globus_gridftp_server_control_get_data_auth(
689  globus_gridftp_server_control_op_t op,
690  char ** subject,
691  char * dcau,
692  char * prot,
693  gss_cred_id_t * del_cred);
694 
696 globus_gridftp_server_control_authenticated(
697  globus_gridftp_server_control_t server);
698 
699 /***************************************************************************
700  * data object
701  *
702  * The server uses the following interface functions for communication
703  * with the user data connection needs. The user is responisible for
704  * bringing up the data connection. This library will manage when a new
705  * data connection must be created, but it relies on the user to actually
706  * make the connection.
707  **************************************************************************/
708 
721 globus_gridftp_server_control_finished_active_connect(
722  globus_gridftp_server_control_op_t op,
723  void * user_data_handle,
724  globus_gridftp_server_control_data_dir_t data_dir,
725  globus_gridftp_server_control_response_t response_code,
726  const char * msg);
727 
740 globus_gridftp_server_control_finished_passive_connect(
741  globus_gridftp_server_control_op_t op,
742  void * user_data_handle,
743  globus_gridftp_server_control_data_dir_t data_dir,
744  const char ** cs,
745  int cs_count,
746  globus_gridftp_server_control_response_t response_code,
747  const char * msg);
748 
759 globus_gridftp_server_control_disconnected(
760  globus_gridftp_server_control_t server,
761  void * user_data_handle);
762 
775 globus_gridftp_server_control_begin_transfer(
776  globus_gridftp_server_control_op_t op);
777 
786 globus_gridftp_server_control_finished_transfer(
787  globus_gridftp_server_control_op_t op,
788  globus_gridftp_server_control_response_t response_code,
789  const char * msg);
790 
792 globus_gridftp_server_control_add_feature(
793  globus_gridftp_server_control_t server,
794  const char * feature);
795 
796 
797 /* use with care, not *external* external */
798 typedef enum globus_gsc_959_command_desc_e
799 {
800  GLOBUS_GSC_COMMAND_POST_AUTH = 0x01,
801  GLOBUS_GSC_COMMAND_PRE_AUTH = 0x02
802 } globus_gsc_959_command_desc_t;
803 
804 char *
805 globus_gsc_string_to_959(
806  int code,
807  const char * in_str,
808  const char * preline);
809 
810 typedef void
811 (*globus_gsc_959_command_cb_t)(
812  globus_gsc_959_op_t op,
813  const char * full_command,
814  char ** cmd_array,
815  int argc,
816  void * user_arg);
817 
819 globus_gsc_959_command_add(
820  globus_gridftp_server_control_t server,
821  const char * command_name,
822  globus_gsc_959_command_cb_t command_cb,
823  globus_gsc_959_command_desc_t desc,
824  int min_argc,
825  int max_argc,
826  const char * help,
827  void * user_arg);
828 
830 globus_gsc_959_command_remove(
831  globus_gridftp_server_control_t server,
832  const char * command_name);
833 
834 void
835 globus_gsc_959_finished_command(
836  globus_gsc_959_op_t op,
837  char * reply_msg);
838 
840 globus_gridftp_server_control_event_send_perf(
841  globus_gridftp_server_control_op_t op,
842  int stripe_ndx,
843  globus_off_t nbytes);
844 
846 globus_gridftp_server_control_event_send_restart(
847  globus_gridftp_server_control_op_t op,
848  globus_range_list_t restart);
849 
850 
851 void
852 globus_gridftp_server_control_421_end(
853  globus_gridftp_server_control_t server,
854  char * reply_msg);
855 
856 extern globus_module_descriptor_t globus_i_gsc_module;
857 
858 #define GLOBUS_GRIDFTP_SERVER_CONTROL_MODULE (&globus_i_gsc_module)
859 
860 #endif
int globus_bool_t
Boolean type.
Definition: globus_types.h:93
GSS Assist Header.
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
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:69