29 #ifndef GLOBUS_GRIDFTP_SERVER_H
30 #define GLOBUS_GRIDFTP_SERVER_H
33 #include "globus_gridftp_server_control.h"
35 #ifdef TARGET_ARCH_WIN32
41 #ifndef TARGET_ARCH_WIN32
45 #define GLOBUS_MAPPING_STRING ":globus-mapping:"
48 #define GLOBUS_GRIDFTP_SERVER_MODULE (&globus_i_gfs_module)
50 extern globus_extension_registry_t globus_i_gfs_dsi_registry;
51 #define GLOBUS_GFS_DSI_REGISTRY &globus_i_gfs_dsi_registry
53 extern globus_extension_registry_t globus_i_gfs_acl_registry;
54 #define GLOBUS_GFS_ACL_REGISTRY &globus_i_gfs_acl_registry
60 typedef enum globus_gfs_error_type_e
62 GLOBUS_GFS_ERROR_MEMORY = 1,
63 GLOBUS_GFS_ERROR_PARAMETER,
64 GLOBUS_GFS_ERROR_SYSTEM_ERROR,
65 GLOBUS_GFS_ERROR_WRAPPED,
66 GLOBUS_GFS_ERROR_DATA,
67 GLOBUS_GFS_ERROR_GENERIC
68 } globus_gfs_error_type_t;
75 typedef enum globus_gfs_operation_type_e
77 GLOBUS_GFS_OP_FINAL_REPLY = 1,
78 GLOBUS_GFS_OP_EVENT_REPLY,
80 GLOBUS_GFS_OP_SESSION_START,
81 GLOBUS_GFS_OP_SESSION_STOP,
85 GLOBUS_GFS_OP_COMMAND,
86 GLOBUS_GFS_OP_PASSIVE,
88 GLOBUS_GFS_OP_DESTROY,
89 GLOBUS_GFS_OP_TRANSFER,
91 GLOBUS_GFS_OP_BUFFER_SEND,
92 GLOBUS_GFS_OP_HANDSHAKE,
93 GLOBUS_GFS_OP_SESSION_START_REPLY,
94 GLOBUS_GFS_OP_INTERMEDIATE_REPLY
95 } globus_gfs_operation_type_t;
97 #define GLOBUS_GFS_OP_STAT_PARTIAL GLOBUS_GFS_OP_INTERMEDIATE_REPLY
105 typedef enum globus_gfs_command_type_e
107 GLOBUS_GFS_CMD_MKD = 1,
110 GLOBUS_GFS_CMD_SITE_AUTHZ_ASSERT,
111 GLOBUS_GFS_CMD_SITE_RDEL,
115 GLOBUS_GFS_CMD_SITE_CHMOD,
116 GLOBUS_GFS_CMD_SITE_DSI,
117 GLOBUS_GFS_CMD_SITE_SETNETSTACK,
118 GLOBUS_GFS_CMD_SITE_SETDISKSTACK,
119 GLOBUS_GFS_CMD_SITE_CLIENTINFO,
121 GLOBUS_GFS_CMD_SITE_CHGRP,
122 GLOBUS_GFS_CMD_SITE_UTIME,
123 GLOBUS_GFS_CMD_SITE_SYMLINKFROM,
124 GLOBUS_GFS_CMD_SITE_SYMLINK,
125 GLOBUS_GFS_CMD_HTTP_PUT,
126 GLOBUS_GFS_CMD_HTTP_GET,
127 GLOBUS_GFS_CMD_HTTP_CONFIG,
129 GLOBUS_GFS_CMD_SITE_TASKID,
132 GLOBUS_GFS_CMD_SITE_RESTRICT = 3072,
133 GLOBUS_GFS_CMD_SITE_CHROOT,
134 GLOBUS_GFS_CMD_SITE_SHARING,
137 GLOBUS_GFS_CMD_STORATTR,
138 GLOBUS_GFS_CMD_WHOAMI,
140 GLOBUS_GFS_MIN_CUSTOM_CMD = 4096
141 } globus_gfs_command_type_t;
208 typedef enum globus_gfs_buffer_type_e
210 GLOBUS_GFS_BUFFER_EOF_INFO = 0x0001,
211 GLOBUS_GFS_BUFFER_SERVER_DEFINED = 0xFFFF
213 } globus_gfs_buffer_type_t;
220 typedef enum globus_gfs_layout_type_e
222 GLOBUS_GFS_LAYOUT_PARTITIONED = 1,
223 GLOBUS_GFS_LAYOUT_BLOCKED
224 } globus_gfs_layout_type_t;
259 typedef struct globus_i_gfs_op_info_s * globus_gfs_op_info_t;
267 typedef struct globus_gfs_data_finished_info_s
278 const char ** contact_strings;
279 } globus_gfs_data_finished_info_t;
286 typedef struct globus_gfs_cmd_finshed_info_s
289 globus_gfs_command_type_t command;
294 } globus_gfs_cmd_finshed_info_t;
301 typedef struct globus_gfs_stat_finished_info_s
313 } globus_gfs_stat_finished_info_t;
320 typedef struct globus_gfs_session_finished_info_s
328 } globus_gfs_session_finished_info_t;
335 typedef struct globus_gfs_transfer_finished_info_s
338 globus_off_t bytes_transferred;
340 } globus_gfs_transfer_finished_info_t;
347 typedef struct globus_gfs_finished_info_s
350 globus_gfs_operation_type_t type;
363 globus_gfs_session_finished_info_t session;
364 globus_gfs_data_finished_info_t data;
365 globus_gfs_cmd_finshed_info_t command;
366 globus_gfs_stat_finished_info_t stat;
367 globus_gfs_transfer_finished_info_t transfer;
371 globus_gfs_op_info_t op_info;
372 } globus_gfs_finished_info_t;
379 typedef struct globus_gfs_event_info_s
396 globus_off_t recvd_bytes;
398 globus_range_list_t recvd_ranges;
409 globus_gfs_op_info_t op_info;
410 } globus_gfs_event_info_t;
417 typedef struct globus_gfs_transfer_info_s
428 globus_off_t partial_offset;
430 globus_off_t partial_length;
432 globus_range_list_t range_list;
448 globus_off_t alloc_size;
451 char * expected_checksum;
453 char * expected_checksum_alg;
458 int traversal_options;
461 globus_gfs_op_info_t op_info;
462 } globus_gfs_transfer_info_t;
468 #define rnfr_pathname from_pathname
475 typedef struct globus_gfs_command_info_s
478 globus_gfs_command_type_t command;
483 globus_off_t cksm_offset;
485 globus_off_t cksm_length;
494 char * from_pathname;
506 globus_gfs_op_info_t op_info;
507 } globus_gfs_command_info_t;
514 typedef struct globus_gfs_data_info_s
547 const char ** contact_strings;
553 gss_cred_id_t del_cred;
556 globus_gfs_op_info_t op_info;
557 } globus_gfs_data_info_t;
564 typedef struct globus_gfs_stat_info_s
578 globus_gfs_op_info_t op_info;
579 } globus_gfs_stat_info_t;
581 typedef struct globus_gfs_session_info_s
583 gss_cred_id_t del_cred;
593 globus_gfs_op_info_t op_info;
594 } globus_gfs_session_info_t;
596 typedef enum globus_gfs_brain_reason_e
598 GLOBUS_GFS_BRAIN_REASON_ERROR = 1,
599 GLOBUS_GFS_BRAIN_REASON_COMPLETE
600 } globus_gfs_brain_reason_t;
602 typedef struct globus_i_gfs_brain_node_s
608 int current_connection;
610 } globus_i_gfs_brain_node_t;
625 typedef struct globus_l_gfs_data_operation_s * globus_gfs_operation_t;
643 globus_gfs_operation_t op,
644 globus_gfs_session_info_t * session_info);
651 (*globus_gfs_storage_destroy_t)(
660 (*globus_gfs_storage_transfer_t)(
661 globus_gfs_operation_t op,
662 globus_gfs_transfer_info_t * transfer_info,
672 (*globus_gfs_storage_command_t)(
673 globus_gfs_operation_t op,
674 globus_gfs_command_info_t * command_info,
683 (*globus_gfs_storage_stat_t)(
684 globus_gfs_operation_t op,
685 globus_gfs_stat_info_t * stat_info,
695 (*globus_gfs_storage_data_t)(
696 globus_gfs_operation_t op,
697 globus_gfs_data_info_t * data_info,
708 (*globus_gfs_storage_data_destroy_t)(
720 (*globus_gfs_storage_trev_t)(
721 globus_gfs_event_info_t * event_info,
731 (*globus_gfs_storage_set_cred_t)(
732 gss_cred_id_t del_cred,
742 (*globus_gfs_storage_buffer_send_t)(
759 (*globus_gfs_storage_realpath_t)(
760 const char * in_path,
761 char ** out_realpath,
765 #define GLOBUS_GFS_DSI_DESCRIPTOR_SENDER (1 << 0)
766 #define GLOBUS_GFS_DSI_DESCRIPTOR_BLOCKING (1 << 1)
767 #define GLOBUS_GFS_DSI_DESCRIPTOR_HAS_REALPATH (1 << 2)
768 #define GLOBUS_GFS_DSI_DESCRIPTOR_REQUIRES_ORDERED_DATA (1 << 3)
769 #define GLOBUS_GFS_DSI_DESCRIPTOR_SETS_ERROR_RESPONSES (1 << 4)
770 #define GLOBUS_GFS_DSI_DESCRIPTOR_SAFE_RDEL (1 << 5)
780 typedef struct globus_gfs_storage_iface_s
786 globus_gfs_storage_destroy_t destroy_func;
789 globus_gfs_storage_transfer_t list_func;
790 globus_gfs_storage_transfer_t send_func;
791 globus_gfs_storage_transfer_t recv_func;
792 globus_gfs_storage_trev_t trev_func;
795 globus_gfs_storage_data_t active_func;
796 globus_gfs_storage_data_t passive_func;
797 globus_gfs_storage_data_destroy_t data_destroy_func;
799 globus_gfs_storage_command_t command_func;
800 globus_gfs_storage_stat_t stat_func;
802 globus_gfs_storage_set_cred_t set_cred_func;
803 globus_gfs_storage_buffer_send_t buffer_send_func;
804 globus_gfs_storage_realpath_t realpath_func;
805 } globus_gfs_storage_iface_t;
821 globus_gfs_operation_t op,
823 globus_gfs_finished_info_t * finished_info);
833 globus_gridftp_server_operation_event(
834 globus_gfs_operation_t op,
836 globus_gfs_event_info_t * event_info);
844 globus_gridftp_server_begin_transfer(
845 globus_gfs_operation_t op,
855 globus_gridftp_server_finished_transfer(
856 globus_gfs_operation_t op,
866 globus_gridftp_server_finished_session_start(
867 globus_gfs_operation_t op,
881 globus_gridftp_server_finished_command(
882 globus_gfs_operation_t op,
884 char * command_response);
886 globus_gridftp_server_intermediate_command(
887 globus_gfs_operation_t op,
889 char * command_response);
897 globus_gridftp_server_finished_stat(
898 globus_gfs_operation_t op,
904 globus_gridftp_server_finished_stat_partial(
905 globus_gfs_operation_t op,
911 globus_gridftp_server_finished_stat_custom_list(
912 globus_gfs_operation_t op,
924 globus_gridftp_server_finished_active_data(
925 globus_gfs_operation_t op,
936 globus_gridftp_server_finished_passive_data(
937 globus_gfs_operation_t op,
941 const char ** contact_strings,
961 globus_gfs_operation_t op,
968 globus_gridftp_server_register_write(
969 globus_gfs_operation_t op,
987 (*globus_gridftp_server_read_cb_t)(
988 globus_gfs_operation_t op,
997 globus_gridftp_server_register_read(
998 globus_gfs_operation_t op,
1001 globus_gridftp_server_read_cb_t callback,
1040 globus_gridftp_server_add_command(
1041 globus_gfs_operation_t op,
1042 const char * command_name,
1046 const char * help_string,
1066 globus_gfs_operation_t op,
1067 const char * cksm_str);
1081 GLOBUS_GFS_OP_INFO_CMD_ARGS = 1
1091 globus_gridftp_server_query_op_info(
1092 globus_gfs_operation_t op,
1093 globus_gfs_op_info_t op_info,
1108 globus_gridftp_server_get_recv_attr_string(
1109 globus_gfs_operation_t op,
1110 const char * requested_attr,
1120 globus_gridftp_server_get_recv_modification_time(
1121 globus_gfs_operation_t op,
1135 globus_gridftp_server_update_bytes_written(
1136 globus_gfs_operation_t op,
1137 globus_off_t offset,
1138 globus_off_t length);
1151 globus_gridftp_server_update_bytes_recvd(
1152 globus_gfs_operation_t op,
1153 globus_off_t length);
1166 globus_gridftp_server_update_range_recvd(
1167 globus_gfs_operation_t op,
1168 globus_off_t offset,
1169 globus_off_t length);
1178 globus_gridftp_server_get_optimal_concurrency(
1179 globus_gfs_operation_t op,
1190 globus_gridftp_server_get_block_size(
1191 globus_gfs_operation_t op,
1201 globus_gridftp_server_get_stripe_block_size(
1202 globus_gfs_operation_t op,
1213 globus_gridftp_server_get_session_username(
1214 globus_gfs_operation_t op,
1226 globus_gridftp_server_get_delegated_cred(
1227 globus_gfs_operation_t op,
1228 gss_cred_id_t * del_cred);
1242 globus_gridftp_server_get_sec_context(
1243 globus_gfs_operation_t op,
1244 gss_ctx_id_t * context);
1263 globus_gridftp_server_set_ordered_data(
1264 globus_gfs_operation_t op,
1268 globus_gridftp_server_get_ordered_data(
1269 globus_gfs_operation_t op,
1279 globus_gridftp_server_get_config_string(
1280 globus_gfs_operation_t op,
1281 char ** config_string);
1291 globus_gridftp_server_get_config_data(
1292 globus_gfs_operation_t op,
1294 char ** config_data);
1297 globus_gfs_data_get_file_stack_list(
1298 globus_gfs_operation_t in_op,
1302 globus_gridftp_server_get_update_interval(
1303 globus_gfs_operation_t op,
1315 globus_gridftp_server_get_read_range(
1316 globus_gfs_operation_t op,
1317 globus_off_t * offset,
1318 globus_off_t * length);
1331 globus_gridftp_server_get_write_range(
1332 globus_gfs_operation_t op,
1333 globus_off_t * offset,
1334 globus_off_t * length);
1341 GLOBUS_GFS_LOG_ERR = 0x01,
1342 GLOBUS_GFS_LOG_WARN = 0x02,
1343 GLOBUS_GFS_LOG_TRANSFER = 0x04,
1344 GLOBUS_GFS_LOG_INFO = 0x08,
1345 GLOBUS_GFS_LOG_DUMP = 0x10,
1347 GLOBUS_GFS_LOG_ALL = 0xFF
1348 } globus_gfs_log_type_t;
1351 globus_gfs_log_message(
1352 globus_gfs_log_type_t type,
1353 const char * format,
1357 globus_gfs_log_result(
1358 globus_gfs_log_type_t type,
1365 GLOBUS_GFS_DEBUG_TRACE = 8,
1366 GLOBUS_GFS_DEBUG_INFO = 16,
1367 GLOBUS_GFS_DEBUG_STATE = 32
1371 #define GlobusGFSName(func) static const char * _gfs_name __attribute__((__unused__)) = #func
1373 #define GlobusGFSName(func) static const char * _gfs_name = #func
1376 GlobusDebugDeclare(GLOBUS_GRIDFTP_SERVER);
1378 #define GlobusGFSDebugPrintf(level, message) \
1379 GlobusDebugPrintf(GLOBUS_GRIDFTP_SERVER, level, message)
1381 #define GlobusGFSDebugInfo(_msg) \
1382 GlobusGFSDebugPrintf( \
1383 GLOBUS_GFS_DEBUG_INFO, \
1384 ("[%s] %s\n", __func__, _msg))
1386 #define GlobusGFSDebugEnter() \
1387 GlobusGFSDebugPrintf( \
1388 GLOBUS_GFS_DEBUG_TRACE, \
1389 ("[%s] Entering\n", __func__))
1391 #define GlobusGFSDebugExit() \
1392 GlobusGFSDebugPrintf( \
1393 GLOBUS_GFS_DEBUG_TRACE, \
1394 ("[%s] Exiting\n", __func__))
1396 #define GlobusGFSDebugState(_state) \
1397 GlobusGFSDebugPrintf( \
1398 GLOBUS_GFS_DEBUG_INFO, \
1399 ("[%s] State: %d\n", __func__, _state))
1401 #define GlobusGFSDebugExitWithError() \
1402 GlobusGFSDebugPrintf( \
1403 GLOBUS_GFS_DEBUG_TRACE, \
1404 ("[%s] Exiting with error\n", __func__))
1406 #define GlobusGFSErrorParameter(mem_name) \
1407 globus_error_put(GlobusGFSErrorObjParameter(mem_name))
1409 #define GlobusGFSErrorIPC() \
1410 globus_error_put(GlobusGFSErrorObjIPC())
1412 #define GlobusGFSErrorObjIPC() \
1413 globus_error_construct_error( \
1416 GLOBUS_GFS_ERROR_MEMORY, \
1420 "IPC Communication error.")
1422 #define GlobusGFSErrorObjParameter(param_name) \
1423 globus_error_construct_error( \
1426 GLOBUS_GFS_ERROR_PARAMETER, \
1430 "invalid parameter: %s", \
1433 #define GlobusGFSErrorSystemError(system_func, system_errno) \
1434 globus_error_put(GlobusGFSErrorObjSystemError(\
1435 (system_func), (system_errno)))
1436 #define GlobusGFSErrorObjSystemError(system_func, system_errno) \
1437 globus_i_gfs_error_system( \
1438 0, (system_errno), \
1439 "System error%s%s", \
1440 (system_func) != NULL ? " in " : "", \
1441 (system_func) != NULL ? (system_func) : "")
1443 #define GlobusGFSErrorWrapFailed(failed_func, result) \
1444 globus_error_put(GlobusGFSErrorObjWrapFailed(failed_func, result))
1446 #define GlobusGFSErrorObjWrapFailed(failed_func, result) \
1447 globus_error_construct_error( \
1449 globus_error_get((result)), \
1450 GLOBUS_GFS_ERROR_WRAPPED, \
1457 #define GlobusGFSErrorData(reason) \
1458 globus_error_put(GlobusGFSErrorObjData(reason))
1460 #define GlobusGFSErrorObjData(reason) \
1461 globus_error_construct_error( \
1464 GLOBUS_GFS_ERROR_DATA, \
1471 #define GlobusGFSErrorGeneric(reason) \
1472 globus_error_put(GlobusGFSErrorObjGeneric(reason))
1474 #define GlobusGFSErrorObjGeneric(reason) \
1475 globus_error_construct_error( \
1478 GLOBUS_GFS_ERROR_GENERIC, \
1488 globus_object_t * base_cause,
1490 const char *response_error_code,
1496 globus_object_t * error,
1498 globus_object_t * base_cause,
1500 const char * response_error_code,
1505 globus_object_t * error,
1507 globus_object_t * base_cause,
1509 const char * response_error_code,
1515 globus_object_t * error);
1519 globus_object_t * error);
1523 globus_object_t * error,
1524 const char * response_error_code);
1526 extern const globus_object_type_t
1529 #define GLOBUS_GFS_ERROR_FTP_RESPONSE_TYPE \
1530 (&GLOBUS_GFS_ERROR_FTP_RESPONSE_TYPE_DEFINITION)
1533 #define GlobusGFSErrorFtpResponse(cause, code, response_error_code, ...) \
1534 globus_error_put(GlobusGFSErrorObjFtpResponse( \
1535 cause, code, response_error_code, __VA_ARGS__))
1537 #define GlobusGFSErrorObjFtpResponse(cause, code, response_error_code, ...) \
1538 globus_gfs_ftp_response_error_construct( \
1542 response_error_code, \
1548 #define GlobusGFSErrorMemory(mem) \
1549 globus_error_put(GlobusGFSErrorObjMemory(mem))
1550 #define GlobusGFSErrorObjMemory(mem) \
1551 GlobusGFSErrorObjSystemError("malloc", errno)
1553 #define GlobusGFSErrorObj(cause, response_code, ...) \
1554 GlobusGFSErrorObjFtpResponse(cause, response_code, __VA_ARGS__)
1556 #define GlobusGFSErrorPathNotFound(p) \
1557 globus_error_put(GlobusGFSErrorObjPathNotFound(NULL, p))
1558 #define GlobusGFSErrorObjPathNotFound(cause, p) \
1559 GlobusGFSErrorObj((cause), 550, "PATH_NOT_FOUND", \
1561 ((p) != NULL) ? "GridFTP-Path: \"" : "", \
1562 ((p) != NULL) ? (p) : "", \
1563 ((p) != NULL) ? "\"" : "")
1565 #define GlobusGFSErrorIncorrectChecksum(computed, expected) \
1566 globus_error_put(GlobusGFSErrorObjIncorrectChecksum( \
1567 NULL, computed, expected))
1568 #define GlobusGFSErrorObjIncorrectChecksum(cause, computed, expected) \
1569 GlobusGFSErrorObj( \
1572 "INCORRECT_CHECKSUM", \
1573 "GridFTP-Computed-Checksum: %s\n" \
1574 "GridFTP-Expected-Checksum: %s", (computed), (expected))
1576 #define GlobusGFSErrorMultipartUploadNotFound() \
1577 globus_error_put(GlobusGFSErrorObjMultipartUploadNotFound(NULL))
1578 #define GlobusGFSErrorObjMultipartUploadNotFound(cause) \
1579 GlobusGFSErrorObj(cause, 553, "MULTI_PART_UPLOAD_NOT_FOUND", NULL)
1581 #define GlobusGFSErrorAppendNotSupported() \
1582 globus_error_put(GlobusGFSErrorObjAppendNotSupported(NULL))
1583 #define GlobusGFSErrorObjAppendNotSupported(cause) \
1584 GlobusGFSErrorObj((cause), 553, "APPEND_NOT_SUPPORTED", NULL)
1586 #define GlobusGFSErrorAmbiguousPath(ambiguity) \
1587 globus_error_put(GlobusGFSErrorObjAmbiguousPath(NULL, ambiguity))
1588 #define GlobusGFSErrorObjAmbiguousPath(cause, ambiguity) \
1589 GlobusGFSErrorObj( \
1593 "GridFTP-Path: %s", \
1596 #define GlobusGFSErrorTooBusy() \
1597 globus_error_put(GlobusGFSErrorObjTooBusy(NULL))
1598 #define GlobusGFSErrorObjTooBusy(cause) \
1599 GlobusGFSErrorObj((cause), 451, "TOO_BUSY", NULL)
1601 #define GlobusGFSErrorDataChannelAuthenticationFailure() \
1602 globus_error_put(GlobusGFSErrorObjDataChannelAuthenticationFailure( \
1604 #define GlobusGFSErrorObjDataChannelAuthenticationFailure(cause) \
1605 GlobusGFSErrorObj((cause), 425, \
1606 "DATA_CHANNEL_AUTHENTICATION_FAILURE", NULL)
1608 #define GlobusGFSErrorDataChannelCommunicationFailure() \
1609 globus_error_put(GlobusGFSErrorObjDataChannelCommunicationFailure( \
1611 #define GlobusGFSErrorObjDataChannelCommunicationFailure(cause) \
1612 GlobusGFSErrorObj((cause), 425, \
1613 "DATA_CHANNEL_COMMUNICATION_FAILURE", NULL)
1615 #define GlobusGFSErrorLoginDenied() \
1616 globus_error_put(GlobusGFSErrorObjLoginDenied(NULL))
1617 #define GlobusGFSErrorObjLoginDenied(cause) \
1618 GlobusGFSErrorObj((cause), 530, "LOGIN_DENIED", NULL)
1620 #define GlobusGFSErrorPermissionDenied() \
1621 globus_error_put(GlobusGFSErrorObjPermissionDenied(NULL))
1622 #define GlobusGFSErrorObjPermissionDenied(cause) \
1623 GlobusGFSErrorObj((cause), 550, "PERMISSION_DENIED", NULL)
1625 #define GlobusGFSErrorQuotaExceeded() \
1626 globus_error_put(GlobusGFSErrorObjQuotaExceeded(NULL))
1627 #define GlobusGFSErrorObjQuotaExceeded(cause) \
1628 GlobusGFSErrorObj((cause), 451, "QUOTA_EXCEEDED", NULL)
1630 #define GlobusGFSErrorNoSpaceLeft() \
1631 globus_error_put(GlobusGFSErrorObjNoSpaceLeft(NULL))
1632 #define GlobusGFSErrorObjNoSpaceLeft(cause) \
1633 GlobusGFSErrorObj((cause), 451, "NO_SPACE_LEFT", NULL)
1635 #define GlobusGFSErrorInvalidPathName(name) \
1636 globus_error_put(GlobusGFSErrorObjInvalidPathName(NULL, name))
1637 #define GlobusGFSErrorObjInvalidPathName(cause, name) \
1638 GlobusGFSErrorObj((cause), 553, "INVALID_PATH_NAME", \
1639 "GridFTP-Path: %s", name)
1641 #define GlobusGFSErrorPathExists(name) \
1642 globus_error_put(GlobusGFSErrorObjPathExists(NULL, name))
1643 #define GlobusGFSErrorObjPathExists(cause, name) \
1644 GlobusGFSErrorObj((cause), 553, "PATH_EXISTS", \
1645 "GridFTP-Path: %s", name)
1647 #define GlobusGFSErrorIsADirectory(name) \
1648 globus_error_put(GlobusGFSErrorObjIsADirectory(NULL, name))
1649 #define GlobusGFSErrorObjIsADirectory(cause, name) \
1650 GlobusGFSErrorObj((cause), 553, "IS_A_DIRECTORY", \
1651 "GridFTP-Path: %s", name)
1653 #define GlobusGFSErrorNotADirectory(name) \
1654 globus_error_put(GlobusGFSErrorObjNotADirectory(NULL, name))
1655 #define GlobusGFSErrorObjNotADirectory(cause, name) \
1656 GlobusGFSErrorObj((cause), 553, "NOT_A_DIRECTORY", \
1657 "GridFTP-Path: %s", name)
1659 #define GlobusGFSErrorCRLError() \
1660 globus_error_put(GlobusGFSErrorObjCRLError(NULL))
1661 #define GlobusGFSErrorObjCRLError(cause) \
1662 GlobusGFSErrorObj((cause), 530, "CRL_ERROR", NULL)
1664 #define GlobusGFSErrorInternalError(generic_string) \
1665 globus_error_put(GlobusGFSErrorObjInternalError( \
1666 NULL, (generic_string)))
1667 #define GlobusGFSErrorObjInternalError(cause, generic_string) \
1668 GlobusGFSErrorObj((cause), 500, "INTERNAL_ERROR", \
1670 ((generic_string) != NULL) ? "GridFTP-Error: " : "", \
1671 ((generic_string) != NULL) ? generic_string : "")
1673 #define GlobusGFSErrorNotImplemented() \
1674 globus_error_put(GlobusGFSErrorObjNotImplemented(NULL))
1675 #define GlobusGFSErrorObjNotImplemented(cause) \
1676 GlobusGFSErrorObj((cause), 500, "NOT_IMPLEMETED", NULL)
1678 #define GlobusGFSErrorNotImplementedFeature(feature) \
1679 globus_error_put(GlobusGFSErrorObjNotImplementedFeature(NULL, feature))
1680 #define GlobusGFSErrorObjNotImplementedFeature(cause, feature) \
1681 GlobusGFSErrorObj((cause), 500, \
1682 "NOT_IMPLEMETED", "GridFTP-Feature: %s", (feature))
1684 #define GlobusGFSErrorConfigurationError() \
1685 globus_error_put(GlobusGFSErrorObjConfigurationError(NULL))
1686 #define GlobusGFSErrorObjConfigurationError(cause) \
1687 GlobusGFSErrorObj((cause), 500, "CONFIGURATION_ERROR", NULL)
1694 typedef struct globus_i_gfs_ipc_handle_s * globus_gfs_ipc_handle_t;
1719 (*globus_gfs_ipc_callback_t)(
1720 globus_gfs_ipc_handle_t ipc_handle,
1722 globus_gfs_finished_info_t * reply,
1726 (*globus_gfs_ipc_event_callback_t)(
1727 globus_gfs_ipc_handle_t ipc_handle,
1729 globus_gfs_event_info_t * reply,
1733 (*globus_gfs_ipc_close_callback_t)(
1734 globus_gfs_ipc_handle_t ipc_handle,
1739 (*globus_gfs_ipc_open_callback_t)(
1740 globus_gfs_ipc_handle_t ipc_handle,
1742 globus_gfs_finished_info_t * reply,
1746 (*globus_gfs_ipc_error_callback_t)(
1747 globus_gfs_ipc_handle_t ipc_handle,
1752 globus_gfs_ipc_reply_finished(
1753 globus_gfs_ipc_handle_t ipc_handle,
1754 globus_gfs_finished_info_t * reply);
1757 globus_gfs_ipc_reply_event(
1758 globus_gfs_ipc_handle_t ipc_handle,
1759 globus_gfs_event_info_t * reply);
1762 globus_gfs_ipc_reply_session(
1763 globus_gfs_ipc_handle_t ipc_handle,
1764 globus_gfs_finished_info_t * reply);
1778 (*globus_i_gfs_ipc_data_callback_t)(
1779 globus_gfs_finished_info_t * reply,
1783 (*globus_i_gfs_ipc_data_event_callback_t)(
1784 globus_gfs_event_info_t * reply,
1788 (*globus_i_gfs_ipc_done_callback_t)(
1799 (*globus_gfs_ipc_iface_session_start_t)(
1800 globus_gfs_ipc_handle_t ipc_handle,
1801 const gss_ctx_id_t context,
1802 globus_gfs_session_info_t * session_info,
1803 globus_i_gfs_ipc_data_callback_t cb,
1807 globus_gfs_ipc_start_session(
1808 globus_gfs_ipc_handle_t ipc_handle,
1809 globus_gfs_session_info_t * session_info,
1810 globus_gfs_ipc_callback_t cb,
1815 (*globus_gfs_ipc_iface_session_stop_t)(
1816 globus_gfs_ipc_handle_t ipc_handle,
1817 void * session_handle);
1820 globus_gfs_ipc_iface_session_stop(
1821 globus_gfs_ipc_handle_t ipc_handle,
1822 void * session_handle);
1825 (*globus_gfs_ipc_iface_set_cred_t)(
1826 globus_gfs_ipc_handle_t ipc_handle,
1827 void * session_handle,
1828 gss_cred_id_t del_cred);
1831 globus_gfs_ipc_set_cred(
1832 globus_gfs_ipc_handle_t ipc_handle,
1833 gss_cred_id_t del_cred);
1836 (*globus_gfs_ipc_iface_buffer_send_t)(
1837 globus_gfs_ipc_handle_t ipc_handle,
1838 void * session_handle,
1844 globus_gfs_ipc_request_buffer_send(
1845 globus_gfs_ipc_handle_t ipc_handle,
1856 (*globus_gfs_ipc_iface_recv_t)(
1857 globus_gfs_ipc_handle_t ipc_handle,
1858 void * session_handle,
1860 globus_gfs_transfer_info_t * recv_info,
1861 globus_i_gfs_ipc_data_callback_t cb,
1862 globus_i_gfs_ipc_data_event_callback_t event_cb,
1866 globus_gfs_ipc_request_recv(
1867 globus_gfs_ipc_handle_t ipc_handle,
1868 globus_gfs_transfer_info_t * recv_info,
1869 globus_gfs_ipc_callback_t cb,
1870 globus_gfs_ipc_event_callback_t event_cb,
1879 (*globus_gfs_ipc_iface_send_t)(
1880 globus_gfs_ipc_handle_t ipc_handle,
1881 void * session_handle,
1883 globus_gfs_transfer_info_t * send_info,
1884 globus_i_gfs_ipc_data_callback_t cb,
1885 globus_i_gfs_ipc_data_event_callback_t event_cb,
1889 globus_gfs_ipc_request_send(
1890 globus_gfs_ipc_handle_t ipc_handle,
1891 globus_gfs_transfer_info_t * send_info,
1892 globus_gfs_ipc_callback_t cb,
1893 globus_gfs_ipc_event_callback_t event_cb,
1897 (*globus_gfs_ipc_iface_list_t)(
1898 globus_gfs_ipc_handle_t ipc_handle,
1899 void * session_handle,
1901 globus_gfs_transfer_info_t * list_info,
1902 globus_i_gfs_ipc_data_callback_t cb,
1903 globus_i_gfs_ipc_data_event_callback_t event_cb,
1907 globus_gfs_ipc_request_list(
1908 globus_gfs_ipc_handle_t ipc_handle,
1909 globus_gfs_transfer_info_t * data_info,
1910 globus_gfs_ipc_callback_t cb,
1911 globus_gfs_ipc_event_callback_t event_cb,
1920 (*globus_gfs_ipc_iface_command_t)(
1921 globus_gfs_ipc_handle_t ipc_handle,
1922 void * session_handle,
1924 globus_gfs_command_info_t * cmd_info,
1925 globus_i_gfs_ipc_data_callback_t cb,
1929 globus_gfs_ipc_request_command(
1930 globus_gfs_ipc_handle_t ipc_handle,
1931 globus_gfs_command_info_t * cmd_info,
1932 globus_gfs_ipc_callback_t cb,
1941 (*globus_gfs_ipc_iface_active_data_t)(
1942 globus_gfs_ipc_handle_t ipc_handle,
1943 void * session_handle,
1945 globus_gfs_data_info_t * data_info,
1946 globus_i_gfs_ipc_data_callback_t cb,
1950 globus_gfs_ipc_request_active_data(
1951 globus_gfs_ipc_handle_t ipc_handle,
1952 globus_gfs_data_info_t * data_info,
1953 globus_gfs_ipc_callback_t cb,
1962 (*globus_gfs_ipc_iface_passive_data_t)(
1963 globus_gfs_ipc_handle_t ipc_handle,
1964 void * session_handle,
1966 globus_gfs_data_info_t * data_info,
1967 globus_i_gfs_ipc_data_callback_t cb,
1971 globus_gfs_ipc_request_passive_data(
1972 globus_gfs_ipc_handle_t ipc_handle,
1973 globus_gfs_data_info_t * data_info,
1974 globus_gfs_ipc_callback_t cb,
1981 (*globus_gfs_ipc_iface_stat_t)(
1982 globus_gfs_ipc_handle_t ipc_handle,
1983 void * session_handle,
1985 globus_gfs_stat_info_t * stat_info,
1986 globus_i_gfs_ipc_data_callback_t cb,
1990 globus_gfs_ipc_request_stat(
1991 globus_gfs_ipc_handle_t ipc_handle,
1992 globus_gfs_stat_info_t * stat_info,
1993 globus_gfs_ipc_callback_t cb,
2000 (*globus_gfs_ipc_iface_transfer_event_t)(
2001 globus_gfs_ipc_handle_t ipc_handle,
2002 void * session_handle,
2003 globus_gfs_event_info_t * event_info);
2007 globus_gfs_ipc_request_transfer_event(
2008 globus_gfs_ipc_handle_t ipc_handle,
2009 globus_gfs_event_info_t * event_info);
2016 (*globus_gfs_ipc_iface_data_destroy_t)(
2017 globus_gfs_ipc_handle_t ipc_handle,
2018 void * session_handle,
2022 globus_gfs_ipc_request_data_destroy(
2023 globus_gfs_ipc_handle_t ipc_handle,
2026 typedef struct globus_i_gfs_ipc_iface_s
2028 globus_gfs_ipc_iface_session_start_t session_start_func;
2029 globus_gfs_ipc_iface_session_stop_t session_stop_func;
2030 globus_gfs_ipc_iface_recv_t recv_func;
2031 globus_gfs_ipc_iface_send_t send_func;
2032 globus_gfs_ipc_iface_command_t command_func;
2033 globus_gfs_ipc_iface_active_data_t active_func;
2034 globus_gfs_ipc_iface_passive_data_t passive_func;
2035 globus_gfs_ipc_iface_data_destroy_t data_destroy_func;
2036 globus_gfs_ipc_iface_stat_t stat_func;
2037 globus_gfs_ipc_iface_list_t list_func;
2038 globus_gfs_ipc_iface_transfer_event_t transfer_event_func;
2039 globus_gfs_ipc_iface_set_cred_t set_cred;
2040 globus_gfs_ipc_iface_buffer_send_t buffer_send;
2041 } globus_gfs_ipc_iface_t;
2052 globus_gfs_ipc_handle_create(
2053 globus_gfs_ipc_iface_t * iface,
2054 globus_xio_system_socket_t system_handle,
2055 globus_i_gfs_ipc_done_callback_t done_cb,
2062 globus_gfs_ipc_close(
2063 globus_gfs_ipc_handle_t ipc_handle,
2064 globus_gfs_ipc_close_callback_t cb,
2068 globus_gfs_ipc_reply_close(
2069 globus_gfs_ipc_handle_t ipc_handle);
2072 globus_gfs_ipc_session_stop(
2073 globus_gfs_ipc_handle_t ipc_handle);
2076 globus_gfs_ipc_handle_connect(
2077 globus_gfs_session_info_t * session_info,
2078 globus_gfs_ipc_open_callback_t cb,
2080 globus_gfs_ipc_error_callback_t error_cb,
2081 void * error_user_arg);
2084 globus_gfs_ipc_handle_connect_ex(
2085 globus_gfs_session_info_t * session_info,
2086 globus_gfs_ipc_open_callback_t cb,
2088 globus_gfs_ipc_error_callback_t error_cb,
2089 void * error_user_arg,
2092 const char *auth_mode,
2093 const char *subject,
2094 time_t connect_timeout,
2095 time_t idle_timeout,
2099 globus_gfs_ipc_handle_obtain(
2100 globus_gfs_session_info_t * session_info,
2101 globus_gfs_ipc_iface_t * iface,
2102 globus_gfs_ipc_open_callback_t cb,
2104 globus_gfs_ipc_error_callback_t error_cb,
2105 void * error_user_arg);
2110 #define BRAIN_SYMBOL_NAME (void*)"gridftp_brain"
2111 extern globus_extension_registry_t brain_i_registry;
2114 (*globus_i_gfs_brain_select_nodes_func_t)(
2115 globus_i_gfs_brain_node_t *** out_node_array,
2116 int * out_array_length,
2117 const char * repo_name,
2118 globus_off_t filesize,
2123 (*globus_i_gfs_brain_release_node_func_t)(
2124 globus_i_gfs_brain_node_t * contact_node,
2125 globus_gfs_brain_reason_t reason);
2128 (*globus_i_gfs_brain_init_func_t)();
2131 (*globus_i_gfs_brain_stop_func_t)();
2134 (*globus_i_gfs_brain_get_available_func_t)(
2135 const char * user_id,
2136 const char * repo_name,
2140 typedef struct globus_i_gfs_brain_module_s
2142 globus_i_gfs_brain_init_func_t init_func;
2143 globus_i_gfs_brain_stop_func_t stop_func;
2144 globus_i_gfs_brain_select_nodes_func_t select_func;
2145 globus_i_gfs_brain_release_node_func_t release_func;
2146 globus_i_gfs_brain_get_available_func_t available_func;
2147 } globus_i_gfs_brain_module_t;
2149 extern globus_i_gfs_brain_module_t globus_i_gfs_default_brain;
2152 globus_gfs_brain_select_nodes(
2153 globus_i_gfs_brain_node_t *** out_node_array,
2154 int * out_array_length,
2155 const char * repo_name,
2156 globus_off_t filesize,
2161 globus_gfs_brain_release_node(
2162 globus_i_gfs_brain_node_t * contact_node,
2163 globus_gfs_brain_reason_t reason);
2166 globus_gfs_brain_get_available(
2167 const char * user_id,
2168 const char * repo_name,
2172 globus_gfs_ipc_handle_get_contact_string(
2173 globus_gfs_ipc_handle_t ipc_handle,
2174 char ** contact_string);
2177 globus_gfs_ipc_init(
2184 globus_gfs_ipc_add_server(
2185 globus_xio_server_t server_handle);
2187 extern globus_gfs_ipc_iface_t globus_gfs_ipc_default_iface;
2200 typedef struct globus_i_gfs_acl_handle_s * globus_gfs_acl_handle_t;
2205 typedef enum globus_gfs_acl_action_e
2208 GFS_ACL_ACTION_INIT = 1,
2210 GFS_ACL_ACTION_DELETE,
2212 GFS_ACL_ACTION_WRITE,
2214 GFS_ACL_ACTION_CREATE,
2216 GFS_ACL_ACTION_READ,
2218 GFS_ACL_ACTION_LOOKUP,
2222 GFS_ACL_ACTION_AUTHZ_ASSERT,
2225 GFS_ACL_ACTION_COMMIT,
2228 } globus_gfs_acl_action_t;
2232 typedef struct globus_gfs_acl_info_s
2239 gss_ctx_id_t context;
2240 } globus_gfs_acl_info_t;
2244 typedef struct globus_gfs_acl_object_desc_s
2265 globus_gfs_op_info_t op_info;
2266 } globus_gfs_acl_object_desc_t;
2269 typedef enum globus_gfs_acl_status_e
2272 GLOBUS_GFS_ACL_COMPLETE = 1,
2275 GLOBUS_GFS_ACL_WOULD_BLOCK
2276 } globus_gfs_acl_status_t;
2293 (*globus_gfs_acl_init_t)(
2295 globus_gfs_acl_info_t * acl_info,
2296 globus_gfs_acl_handle_t acl_handle,
2309 (*globus_gfs_acl_authorize_t)(
2311 globus_gfs_acl_action_t action,
2312 globus_gfs_acl_object_desc_t * object,
2313 globus_gfs_acl_info_t * acl_info,
2314 globus_gfs_acl_handle_t acl_handle,
2319 (*globus_gfs_acl_destroy_t)(
2325 (*globus_gfs_acl_audit_t)(
2327 globus_gfs_acl_action_t action,
2328 globus_gfs_acl_object_desc_t * object,
2329 const char * message);
2333 typedef struct globus_gfs_acl_module_s
2335 globus_gfs_acl_init_t init_func;
2336 globus_gfs_acl_authorize_t authorize_func;
2337 globus_gfs_acl_destroy_t destroy_func;
2338 globus_gfs_acl_audit_t audit_func;
2339 } globus_gfs_acl_module_t;
2345 globus_gfs_acl_authorized_finished(
2346 globus_gfs_acl_handle_t acl_handle,
2352 globus_gfs_acl_action_to_string(
2353 globus_gfs_acl_action_t action);
2362 (*globus_i_gfs_config_set_string_cb_t)(
2363 const char * option_name,
2369 (*globus_i_gfs_config_set_int_cb_t)(
2370 const char * option_name,
2379 } globus_i_gfs_config_option_cb_ent_t;
2382 globus_gfs_config_enable_cb(
2383 globus_i_gfs_config_option_cb_ent_t * cb_handle,
2387 globus_gfs_config_add_cb(
2388 globus_i_gfs_config_option_cb_ent_t ** cb_handle,
2394 globus_gfs_config_get_bool(
2395 const char * option_name);
2398 globus_gfs_config_get_string(
2399 const char * option_name);
2402 globus_gfs_config_get_list(
2403 const char * option_name);
2406 globus_gfs_config_get(
2407 const char * option_name);
2410 globus_gfs_config_get_int(
2411 const char * option_name);
2414 globus_gfs_config_set_int(
2419 globus_gfs_config_set_bool(
2424 globus_gfs_config_set_ptr(
2429 globus_gfs_config_inc_int(