00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00022 #ifndef GLOBUS_GASS_TRANSFER_H
00023 #define GLOBUS_GASS_TRANSFER_H
00024
00025 #include "globus_common.h"
00026
00027 #ifdef __cplusplus
00028 extern "C" {
00029 #endif
00030
00031 #ifndef GLOBUS_GLOBAL_DOCUMENT_SET
00032
00036 #endif
00037
00095 extern globus_module_descriptor_t globus_i_gass_transfer_module;
00096
00101 #define GLOBUS_GASS_TRANSFER_MODULE (&globus_i_gass_transfer_module)
00102
00103 #define _GTSL(s) globus_common_i18n_get_string( \
00104 GLOBUS_GASS_TRANSFER_MODULE, \
00105 s)
00106
00128 typedef globus_handle_t globus_gass_transfer_request_t;
00129 typedef globus_handle_t globus_gass_transfer_listener_t;
00130
00134 typedef globus_object_t * globus_gass_transfer_requestattr_t;
00138 typedef globus_object_t * globus_gass_transfer_listenerattr_t;
00139
00140
00145 typedef enum
00146 {
00148 GLOBUS_GASS_TRANSFER_REQUEST_TYPE_INVALID,
00150 GLOBUS_GASS_TRANSFER_REQUEST_TYPE_GET,
00152 GLOBUS_GASS_TRANSFER_REQUEST_TYPE_PUT,
00154 GLOBUS_GASS_TRANSFER_REQUEST_TYPE_APPEND
00155 } globus_gass_transfer_request_type_t;
00156
00157 typedef enum
00158 {
00159 GLOBUS_GASS_TRANSFER_FILE_MODE_BINARY,
00160 GLOBUS_GASS_TRANSFER_FILE_MODE_TEXT
00161 } globus_gass_transfer_file_mode_t;
00162
00163
00164 typedef enum
00165 {
00166 GLOBUS_GASS_TRANSFER_AUTHORIZE_SELF,
00167 GLOBUS_GASS_TRANSFER_AUTHORIZE_HOST,
00168 GLOBUS_GASS_TRANSFER_AUTHORIZE_SUBJECT,
00169 GLOBUS_GASS_TRANSFER_AUTHORIZE_CALLBACK
00170 } globus_gass_transfer_authorization_t;
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00189 typedef enum
00190 {
00191 GLOBUS_GASS_TRANSFER_REQUEST_INVALID,
00192 GLOBUS_GASS_TRANSFER_REQUEST_STARTING,
00195 GLOBUS_GASS_TRANSFER_REQUEST_PENDING,
00196 GLOBUS_GASS_TRANSFER_REQUEST_FAILED,
00199 GLOBUS_GASS_TRANSFER_REQUEST_REFERRED,
00202 GLOBUS_GASS_TRANSFER_REQUEST_DENIED,
00204 GLOBUS_GASS_TRANSFER_REQUEST_DONE,
00205 #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL
00206 GLOBUS_GASS_TRANSFER_REQUEST_ACCEPTING,
00211 GLOBUS_GASS_TRANSFER_REQUEST_ACTING,
00212 GLOBUS_GASS_TRANSFER_REQUEST_ACTING_TO_PENDING,
00213 GLOBUS_GASS_TRANSFER_REQUEST_ACTING_TO_FAILING,
00214
00215 GLOBUS_GASS_TRANSFER_REQUEST_FAILING,
00216
00217
00218 GLOBUS_GASS_TRANSFER_REQUEST_USER_FAIL,
00219
00220 GLOBUS_GASS_TRANSFER_REQUEST_REFERRING,
00221
00222 GLOBUS_GASS_TRANSFER_REQUEST_ACTING_TO_REFERRING,
00223
00224 GLOBUS_GASS_TRANSFER_REQUEST_FINISHING,
00225
00226
00227 GLOBUS_GASS_TRANSFER_REQUEST_SERVER_FAIL1,
00228
00229 GLOBUS_GASS_TRANSFER_REQUEST_SERVER_FAIL2,
00230
00231 GLOBUS_GASS_TRANSFER_REQUEST_SERVER_FAIL3,
00232
00233 GLOBUS_GASS_TRANSFER_REQUEST_STARTING2,
00234 GLOBUS_GASS_TRANSFER_REQUEST_STARTING3
00235 #endif
00236 } globus_gass_transfer_request_status_t;
00237
00238 typedef enum
00239 {
00240 GLOBUS_GASS_TRANSFER_LISTENER_INVALID,
00241 GLOBUS_GASS_TRANSFER_LISTENER_STARTING,
00242 GLOBUS_GASS_TRANSFER_LISTENER_LISTENING,
00243
00244 GLOBUS_GASS_TRANSFER_LISTENER_READY,
00245 GLOBUS_GASS_TRANSFER_LISTENER_ACCEPTING,
00246 GLOBUS_GASS_TRANSFER_LISTENER_CLOSING1,
00247
00248 GLOBUS_GASS_TRANSFER_LISTENER_CLOSING2,
00249
00250 GLOBUS_GASS_TRANSFER_LISTENER_CLOSED
00251 } globus_gass_transfer_listener_status_t;
00252
00257 enum
00258 {
00260 GLOBUS_GASS_TRANSFER_ERROR_BAD_PORT = 2,
00262 GLOBUS_GASS_TRANSFER_ERROR_INTERNAL_ERROR,
00264 GLOBUS_GASS_TRANSFER_ERROR_BAD_URL,
00266 GLOBUS_GASS_TRANSFER_ERROR_NOT_SUPPORTED,
00268 GLOBUS_GASS_TRANSFER_ERROR_NOT_IMPLEMENTED,
00270 GLOBUS_GASS_TRANSFER_ERROR_MALLOC_FAILED,
00272 GLOBUS_GASS_TRANSFER_ERROR_NOT_INITIALIZED,
00274 GLOBUS_GASS_TRANSFER_ERROR_NULL_POINTER,
00276 GLOBUS_GASS_TRANSFER_ERROR_NOT_REGISTERED,
00278 GLOBUS_GASS_TRANSFER_ERROR_NOT_FOUND,
00280 GLOBUS_GASS_TRANSFER_ERROR_INVALID_USE,
00282 GLOBUS_GASS_TRANSFER_ERROR_TOO_LARGE,
00284 GLOBUS_GASS_TRANSFER_ERROR_REQUEST_FAILED,
00286 GLOBUS_GASS_TRANSFER_ERROR_DONE,
00288 GLOBUS_GASS_TRANSFER_ERROR_ALREADY_REGISTERED,
00290 GLOBUS_GASS_TRANSFER_ERROR_OPEN_FAILED,
00292 GLOBUS_GASS_TRANSFER_ERROR_TRANSFER_FAILED
00293 };
00294
00302 enum
00303 {
00304 GLOBUS_GASS_TRANSFER_DEFAULT_BUFFER_LENGTH = 1024
00305 };
00306
00314 #define GLOBUS_GASS_TRANSFER_LENGTH_UNKNOWN 0UL
00315
00323 #define GLOBUS_GASS_TRANSFER_TIMESTAMP_UNKNOWN 0UL
00324
00325 typedef void
00326 (* globus_gass_transfer_callback_t)(
00327 void * arg,
00328 globus_gass_transfer_request_t request);
00329
00351 int
00352 globus_gass_transfer_register_get(
00353 globus_gass_transfer_request_t * request,
00354 globus_gass_transfer_requestattr_t * attr,
00355 char * url,
00356 globus_gass_transfer_callback_t callback,
00357 void * user_arg);
00358
00359 int
00360 globus_gass_transfer_get(
00361 globus_gass_transfer_request_t * request,
00362 globus_gass_transfer_requestattr_t * attr,
00363 char * url);
00364
00365 int
00366 globus_gass_transfer_register_put(
00367 globus_gass_transfer_request_t * request,
00368 globus_gass_transfer_requestattr_t * attr,
00369 char * url,
00370 globus_size_t length,
00371 globus_gass_transfer_callback_t callback,
00372 void * user_arg);
00373
00374 int
00375 globus_gass_transfer_put(
00376 globus_gass_transfer_request_t * request,
00377 globus_gass_transfer_requestattr_t * attr,
00378 char * url,
00379 globus_size_t length);
00380
00381 int
00382 globus_gass_transfer_register_append(
00383 globus_gass_transfer_request_t * request,
00384 globus_gass_transfer_requestattr_t * attr,
00385 char * url,
00386 globus_size_t length,
00387 globus_gass_transfer_callback_t callback,
00388 void * user_arg);
00389
00390 int
00391 globus_gass_transfer_append(
00392 globus_gass_transfer_request_t * request,
00393 globus_gass_transfer_requestattr_t * attr,
00394 char * url,
00395 globus_size_t length);
00396
00433 typedef void
00434 (* globus_gass_transfer_close_callback_t)(
00435 void * callback_arg,
00436 globus_gass_transfer_listener_t listener);
00437
00444 typedef void
00445 (* globus_gass_transfer_listen_callback_t)(
00446 void * callback_arg,
00447 globus_gass_transfer_listener_t listener);
00448
00449 int
00450 globus_gass_transfer_create_listener(
00451 globus_gass_transfer_listener_t * listener,
00452 globus_gass_transfer_listenerattr_t * attr,
00453 char * scheme);
00454
00455 int
00456 globus_gass_transfer_close_listener(
00457 globus_gass_transfer_listener_t listener,
00458 globus_gass_transfer_close_callback_t callback,
00459 void * user_arg);
00460
00461 int
00462 globus_gass_transfer_register_listen(
00463 globus_gass_transfer_listener_t listener,
00464 globus_gass_transfer_listen_callback_t callback,
00465 void * user_arg);
00466
00467 int
00468 globus_gass_transfer_register_accept(
00469 globus_gass_transfer_request_t * request,
00470 globus_gass_transfer_requestattr_t * attr,
00471 globus_gass_transfer_listener_t listener,
00472 globus_gass_transfer_callback_t callback,
00473 void * user_arg);
00474
00475 int
00476 globus_gass_transfer_refer(
00477 globus_gass_transfer_request_t request,
00478 char ** urls,
00479 globus_size_t num_urls);
00480
00481 int
00482 globus_gass_transfer_authorize(
00483 globus_gass_transfer_request_t request,
00484 globus_size_t total_length);
00485
00486 int
00487 globus_gass_transfer_deny(
00488 globus_gass_transfer_request_t request,
00489 int reason,
00490 char * message);
00491
00492 char *
00493 globus_gass_transfer_listener_get_base_url(
00494 globus_gass_transfer_listener_t listener);
00495
00496 void *
00497 globus_gass_transfer_listener_get_user_pointer(
00498 globus_gass_transfer_listener_t listener);
00499
00500 int
00501 globus_gass_transfer_listener_set_user_pointer(
00502 globus_gass_transfer_listener_t listener,
00503 void * user_pointer);
00504
00530 typedef void
00531 (* globus_gass_transfer_bytes_callback_t)(
00532 void * arg,
00533 globus_gass_transfer_request_t request,
00534 globus_byte_t * bytes,
00535 globus_size_t length,
00536 globus_bool_t last_data);
00537
00538 int
00539 globus_gass_transfer_send_bytes(
00540 globus_gass_transfer_request_t request,
00541 globus_byte_t * bytes,
00542 globus_size_t send_length,
00543 globus_bool_t last_data,
00544 globus_gass_transfer_bytes_callback_t callback,
00545 void * user_arg);
00546
00547 int
00548 globus_gass_transfer_receive_bytes(
00549 globus_gass_transfer_request_t request,
00550 globus_byte_t * bytes,
00551 globus_size_t max_length,
00552 globus_size_t wait_for_length,
00553 globus_gass_transfer_bytes_callback_t callback,
00554 void * user_arg);
00555
00556 int
00557 globus_gass_transfer_fail(
00558 globus_gass_transfer_request_t request,
00559 globus_gass_transfer_callback_t callback,
00560 void * user_arg);
00579 #ifndef DOXYGEN
00580 typedef struct
00581 {
00582 char ** url;
00583 globus_size_t count;
00584 } globus_gass_transfer_referral_t;
00585
00586
00587 globus_size_t
00588 globus_gass_transfer_referral_get_count(
00589 globus_gass_transfer_referral_t * referral);
00590
00591 char *
00592 globus_gass_transfer_referral_get_url(
00593 globus_gass_transfer_referral_t * referral,
00594 globus_size_t index);
00595
00596 int
00597 globus_gass_transfer_referral_destroy(
00598 globus_gass_transfer_referral_t * referral);
00599
00600 #endif
00601
00602
00603
00631 #ifndef DOXYGEN
00632 globus_gass_transfer_request_type_t
00633 globus_gass_transfer_request_get_type(
00634 globus_gass_transfer_request_t request);
00635
00636 globus_gass_transfer_request_status_t
00637 globus_gass_transfer_request_get_status(
00638 globus_gass_transfer_request_t request);
00639
00640 char *
00641 globus_gass_transfer_request_get_subject(
00642 globus_gass_transfer_request_t request);
00643
00644 int
00645 globus_gass_transfer_request_set_subject(
00646 globus_gass_transfer_request_t request,
00647 char * subject);
00648
00649 int
00650 globus_gass_transfer_request_get_referral(
00651 globus_gass_transfer_request_t request,
00652 globus_gass_transfer_referral_t * referral);
00653
00654 char *
00655 globus_gass_transfer_request_get_url(
00656 globus_gass_transfer_request_t request);
00657
00658 int
00659 globus_gass_transfer_request_set_url(
00660 globus_gass_transfer_request_t request,
00661 char * url);
00662
00663 globus_size_t
00664 globus_gass_transfer_request_get_length(
00665 globus_gass_transfer_request_t request);
00666
00667 int
00668 globus_gass_transfer_request_get_denial_reason(
00669 globus_gass_transfer_request_t request);
00670
00671 char *
00672 globus_gass_transfer_request_get_denial_message(
00673 globus_gass_transfer_request_t request);
00674
00675 void *
00676 globus_gass_transfer_request_get_user_pointer(
00677 globus_gass_transfer_request_t request);
00678
00679 int
00680 globus_gass_transfer_request_set_user_pointer(
00681 globus_gass_transfer_request_t request,
00682 void * user_pointer);
00683
00684 int
00685 globus_gass_transfer_request_destroy(
00686 globus_gass_transfer_request_t request);
00687
00688 int
00689 globus_gass_transfer_request_set_type(
00690 globus_gass_transfer_request_t request,
00691 globus_gass_transfer_request_type_t type);
00692 #endif
00693
00694
00703 #ifndef DOXYGEN
00704 int
00705 globus_gass_transfer_requestattr_init(
00706 globus_gass_transfer_requestattr_t * attr,
00707 char * url_scheme);
00708
00709 int
00710 globus_gass_transfer_requestattr_destroy(
00711 globus_gass_transfer_requestattr_t * attr);
00712
00713 int
00714 globus_gass_transfer_listenerattr_init(
00715 globus_gass_transfer_listenerattr_t * attr,
00716 char * url_scheme);
00717
00718 int
00719 globus_gass_transfer_listenerattr_destroy(
00720 globus_gass_transfer_listenerattr_t * attr);
00721
00722
00723 int
00724 globus_gass_transfer_requestattr_set_proxy_url(
00725 globus_gass_transfer_requestattr_t * attr,
00726 char * proxy_url);
00727
00728 int
00729 globus_gass_transfer_requestattr_get_proxy_url(
00730 globus_gass_transfer_requestattr_t * attr,
00731 char ** proxy_url);
00732
00733 int
00734 globus_gass_transfer_requestattr_set_block_size(
00735 globus_gass_transfer_requestattr_t * attr,
00736 globus_size_t block_size);
00737
00738 int
00739 globus_gass_transfer_requestattr_get_block_size(
00740 globus_gass_transfer_requestattr_t * attr,
00741 globus_size_t * block_size);
00742
00743 int
00744 globus_gass_transfer_requestattr_set_file_mode(
00745 globus_gass_transfer_requestattr_t * attr,
00746 globus_gass_transfer_file_mode_t file_mode);
00747
00748 int
00749 globus_gass_transfer_requestattr_get_file_mode(
00750 globus_gass_transfer_requestattr_t * attr,
00751 globus_gass_transfer_file_mode_t * file_mode);
00752
00753 int
00754 globus_gass_transfer_requestattr_set_connection_reuse(
00755 globus_gass_transfer_requestattr_t * attr,
00756 globus_bool_t connection_reuse);
00757
00758 int
00759 globus_gass_transfer_requestattr_get_connection_reuse(
00760 globus_gass_transfer_requestattr_t * attr,
00761 globus_bool_t * connection_reuse);
00762
00763
00764 int
00765 globus_gass_transfer_requestattr_set_socket_sndbuf(
00766 globus_gass_transfer_requestattr_t * attr,
00767 int sndbuf);
00768
00769 int
00770 globus_gass_transfer_requestattr_get_socket_sndbuf(
00771 globus_gass_transfer_requestattr_t * attr,
00772 int * sndbuf);
00773
00774 int
00775 globus_gass_transfer_requestattr_set_socket_rcvbuf(
00776 globus_gass_transfer_requestattr_t * attr,
00777 int rcvbuf);
00778
00779 int
00780 globus_gass_transfer_requestattr_get_socket_rcvbuf(
00781 globus_gass_transfer_requestattr_t * attr,
00782 int * rcvbuf);
00783
00784 int
00785 globus_gass_transfer_requestattr_set_socket_nodelay(
00786 globus_gass_transfer_requestattr_t * attr,
00787 globus_bool_t nodelay);
00788
00789 int
00790 globus_gass_transfer_requestattr_get_socket_nodelay(
00791 globus_gass_transfer_requestattr_t * attr,
00792 globus_bool_t * nodelay);
00793
00794
00795 int
00796 globus_gass_transfer_secure_requestattr_set_authorization(
00797 globus_gass_transfer_requestattr_t * attr,
00798 globus_gass_transfer_authorization_t mode,
00799 char * subject);
00800
00801 int
00802 globus_gass_transfer_secure_requestattr_get_authorization(
00803 globus_gass_transfer_requestattr_t * attr,
00804 globus_gass_transfer_authorization_t * mode,
00805 char ** subject);
00806 #endif
00807
00813 #ifndef DOXYGEN
00814 int
00815 globus_gass_transfer_listenerattr_set_backlog(
00816 globus_gass_transfer_listenerattr_t * attr,
00817 int backlog);
00818
00819 int
00820 globus_gass_transfer_listenerattr_get_backlog(
00821 globus_gass_transfer_listenerattr_t * attr,
00822 int * backlog);
00823
00824 int
00825 globus_gass_transfer_listenerattr_set_port(
00826 globus_gass_transfer_listenerattr_t * attr,
00827 unsigned short port);
00828
00829 int
00830 globus_gass_transfer_listenerattr_get_port(
00831 globus_gass_transfer_listenerattr_t * attr,
00832 unsigned short * port);
00833 #endif
00834
00840 extern const globus_object_type_t
00841 GLOBUS_GASS_OBJECT_TYPE_REQUESTATTR_DEFINITION;
00842
00843 #define GLOBUS_GASS_OBJECT_TYPE_REQUESTATTR \
00844 (&GLOBUS_GASS_OBJECT_TYPE_REQUESTATTR_DEFINITION)
00845
00846 globus_object_t *
00847 globus_gass_transfer_requestattr_initialize(
00848 globus_object_t * obj,
00849 char * proxy_url,
00850 globus_size_t block_size,
00851 globus_gass_transfer_file_mode_t file_mode,
00852 globus_bool_t connection_reuse);
00853
00854 extern const globus_object_type_t
00855 GLOBUS_GASS_OBJECT_TYPE_SOCKET_REQUESTATTR_DEFINITION;
00856
00857 #define GLOBUS_GASS_OBJECT_TYPE_SOCKET_REQUESTATTR \
00858 (&GLOBUS_GASS_OBJECT_TYPE_SOCKET_REQUESTATTR_DEFINITION)
00859
00860 globus_object_t *
00861 globus_gass_transfer_socket_requestattr_initialize(
00862 globus_object_t * obj,
00863 char * proxy_url,
00864 globus_size_t block_size,
00865 globus_gass_transfer_file_mode_t file_mode,
00866 globus_bool_t connection_reuse,
00867 int sndbuf,
00868 int rcvbuf,
00869 globus_bool_t nodelay);
00870
00871 extern const globus_object_type_t
00872 GLOBUS_GASS_OBJECT_TYPE_SECURE_REQUESTATTR_DEFINITION;
00873
00874 #define GLOBUS_GASS_OBJECT_TYPE_SECURE_REQUESTATTR \
00875 (&GLOBUS_GASS_OBJECT_TYPE_SECURE_REQUESTATTR_DEFINITION)
00876
00877 globus_object_t *
00878 globus_gass_transfer_secure_requestattr_initialize(
00879 globus_object_t * obj,
00880 char * proxy_url,
00881 globus_size_t block_size,
00882 globus_gass_transfer_file_mode_t file_mode,
00883 globus_bool_t connection_reuse,
00884 int sndbuf,
00885 int rcvbuf,
00886 globus_bool_t nodelay,
00887 globus_gass_transfer_authorization_t authorization,
00888 char * subject);
00889
00890
00891 extern const globus_object_type_t
00892 GLOBUS_GASS_OBJECT_TYPE_LISTENERATTR_DEFINITION;
00893
00894 #define GLOBUS_GASS_OBJECT_TYPE_LISTENERATTR \
00895 (&GLOBUS_GASS_OBJECT_TYPE_LISTENERATTR_DEFINITION)
00896
00897 globus_object_t *
00898 globus_gass_transfer_listenerattr_initialize(
00899 globus_object_t * obj,
00900 int backlog,
00901 unsigned short port);
00902
00903 #ifdef __cplusplus
00904 }
00905 #endif
00906
00907 #endif