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
00094 extern globus_module_descriptor_t globus_i_gass_transfer_module;
00095
00100 #define GLOBUS_GASS_TRANSFER_MODULE (&globus_i_gass_transfer_module)
00101
00102 #define _GTSL(s) globus_common_i18n_get_string( \
00103 GLOBUS_GASS_TRANSFER_MODULE, \
00104 s)
00105
00127 typedef globus_handle_t globus_gass_transfer_request_t;
00128 typedef globus_handle_t globus_gass_transfer_listener_t;
00129
00133 typedef globus_object_t * globus_gass_transfer_requestattr_t;
00137 typedef globus_object_t * globus_gass_transfer_listenerattr_t;
00138
00139
00144 typedef enum
00145 {
00147 GLOBUS_GASS_TRANSFER_REQUEST_TYPE_INVALID,
00149 GLOBUS_GASS_TRANSFER_REQUEST_TYPE_GET,
00151 GLOBUS_GASS_TRANSFER_REQUEST_TYPE_PUT,
00153 GLOBUS_GASS_TRANSFER_REQUEST_TYPE_APPEND
00154 } globus_gass_transfer_request_type_t;
00155
00156 typedef enum
00157 {
00158 GLOBUS_GASS_TRANSFER_FILE_MODE_BINARY,
00159 GLOBUS_GASS_TRANSFER_FILE_MODE_TEXT
00160 } globus_gass_transfer_file_mode_t;
00161
00162
00163 typedef enum
00164 {
00165 GLOBUS_GASS_TRANSFER_AUTHORIZE_SELF,
00166 GLOBUS_GASS_TRANSFER_AUTHORIZE_HOST,
00167 GLOBUS_GASS_TRANSFER_AUTHORIZE_SUBJECT,
00168 GLOBUS_GASS_TRANSFER_AUTHORIZE_CALLBACK
00169 } globus_gass_transfer_authorization_t;
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00188 typedef enum
00189 {
00190 GLOBUS_GASS_TRANSFER_REQUEST_INVALID,
00191 GLOBUS_GASS_TRANSFER_REQUEST_STARTING,
00194 GLOBUS_GASS_TRANSFER_REQUEST_PENDING,
00195 GLOBUS_GASS_TRANSFER_REQUEST_FAILED,
00198 GLOBUS_GASS_TRANSFER_REQUEST_REFERRED,
00201 GLOBUS_GASS_TRANSFER_REQUEST_DENIED,
00203 GLOBUS_GASS_TRANSFER_REQUEST_DONE,
00204 #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL
00205 GLOBUS_GASS_TRANSFER_REQUEST_ACCEPTING,
00210 GLOBUS_GASS_TRANSFER_REQUEST_ACTING,
00211 GLOBUS_GASS_TRANSFER_REQUEST_ACTING_TO_PENDING,
00212 GLOBUS_GASS_TRANSFER_REQUEST_ACTING_TO_FAILING,
00213
00214 GLOBUS_GASS_TRANSFER_REQUEST_FAILING,
00215
00216
00217 GLOBUS_GASS_TRANSFER_REQUEST_USER_FAIL,
00218
00219 GLOBUS_GASS_TRANSFER_REQUEST_REFERRING,
00220
00221 GLOBUS_GASS_TRANSFER_REQUEST_ACTING_TO_REFERRING,
00222
00223 GLOBUS_GASS_TRANSFER_REQUEST_FINISHING,
00224
00225
00226 GLOBUS_GASS_TRANSFER_REQUEST_SERVER_FAIL1,
00227
00228 GLOBUS_GASS_TRANSFER_REQUEST_SERVER_FAIL2,
00229
00230 GLOBUS_GASS_TRANSFER_REQUEST_SERVER_FAIL3,
00231
00232 GLOBUS_GASS_TRANSFER_REQUEST_STARTING2,
00233 GLOBUS_GASS_TRANSFER_REQUEST_STARTING3
00234 #endif
00235 } globus_gass_transfer_request_status_t;
00236
00237 typedef enum
00238 {
00239 GLOBUS_GASS_TRANSFER_LISTENER_INVALID,
00240 GLOBUS_GASS_TRANSFER_LISTENER_STARTING,
00241 GLOBUS_GASS_TRANSFER_LISTENER_LISTENING,
00242
00243 GLOBUS_GASS_TRANSFER_LISTENER_READY,
00244 GLOBUS_GASS_TRANSFER_LISTENER_ACCEPTING,
00245 GLOBUS_GASS_TRANSFER_LISTENER_CLOSING1,
00246
00247 GLOBUS_GASS_TRANSFER_LISTENER_CLOSING2,
00248
00249 GLOBUS_GASS_TRANSFER_LISTENER_CLOSED
00250 } globus_gass_transfer_listener_status_t;
00251
00256 enum
00257 {
00259 GLOBUS_GASS_TRANSFER_ERROR_BAD_PORT = 2,
00261 GLOBUS_GASS_TRANSFER_ERROR_INTERNAL_ERROR,
00263 GLOBUS_GASS_TRANSFER_ERROR_BAD_URL,
00265 GLOBUS_GASS_TRANSFER_ERROR_NOT_SUPPORTED,
00267 GLOBUS_GASS_TRANSFER_ERROR_NOT_IMPLEMENTED,
00269 GLOBUS_GASS_TRANSFER_ERROR_MALLOC_FAILED,
00271 GLOBUS_GASS_TRANSFER_ERROR_NOT_INITIALIZED,
00273 GLOBUS_GASS_TRANSFER_ERROR_NULL_POINTER,
00275 GLOBUS_GASS_TRANSFER_ERROR_NOT_REGISTERED,
00277 GLOBUS_GASS_TRANSFER_ERROR_NOT_FOUND,
00279 GLOBUS_GASS_TRANSFER_ERROR_INVALID_USE,
00281 GLOBUS_GASS_TRANSFER_ERROR_TOO_LARGE,
00283 GLOBUS_GASS_TRANSFER_ERROR_REQUEST_FAILED,
00285 GLOBUS_GASS_TRANSFER_ERROR_DONE,
00287 GLOBUS_GASS_TRANSFER_ERROR_ALREADY_REGISTERED,
00289 GLOBUS_GASS_TRANSFER_ERROR_OPEN_FAILED,
00291 GLOBUS_GASS_TRANSFER_ERROR_TRANSFER_FAILED
00292 };
00293
00301 enum
00302 {
00303 GLOBUS_GASS_TRANSFER_DEFAULT_BUFFER_LENGTH = 1024
00304 };
00305
00313 #define GLOBUS_GASS_TRANSFER_LENGTH_UNKNOWN 0UL
00314
00322 #define GLOBUS_GASS_TRANSFER_TIMESTAMP_UNKNOWN 0UL
00323
00324 typedef void
00325 (* globus_gass_transfer_callback_t)(
00326 void * arg,
00327 globus_gass_transfer_request_t request);
00328
00349 int
00350 globus_gass_transfer_register_get(
00351 globus_gass_transfer_request_t * request,
00352 globus_gass_transfer_requestattr_t * attr,
00353 char * url,
00354 globus_gass_transfer_callback_t callback,
00355 void * user_arg);
00356
00357 int
00358 globus_gass_transfer_get(
00359 globus_gass_transfer_request_t * request,
00360 globus_gass_transfer_requestattr_t * attr,
00361 char * url);
00362
00363 int
00364 globus_gass_transfer_register_put(
00365 globus_gass_transfer_request_t * request,
00366 globus_gass_transfer_requestattr_t * attr,
00367 char * url,
00368 globus_size_t length,
00369 globus_gass_transfer_callback_t callback,
00370 void * user_arg);
00371
00372 int
00373 globus_gass_transfer_put(
00374 globus_gass_transfer_request_t * request,
00375 globus_gass_transfer_requestattr_t * attr,
00376 char * url,
00377 globus_size_t length);
00378
00379 int
00380 globus_gass_transfer_register_append(
00381 globus_gass_transfer_request_t * request,
00382 globus_gass_transfer_requestattr_t * attr,
00383 char * url,
00384 globus_size_t length,
00385 globus_gass_transfer_callback_t callback,
00386 void * user_arg);
00387
00388 int
00389 globus_gass_transfer_append(
00390 globus_gass_transfer_request_t * request,
00391 globus_gass_transfer_requestattr_t * attr,
00392 char * url,
00393 globus_size_t length);
00394
00430 typedef void
00431 (* globus_gass_transfer_close_callback_t)(
00432 void * callback_arg,
00433 globus_gass_transfer_listener_t listener);
00434
00441 typedef void
00442 (* globus_gass_transfer_listen_callback_t)(
00443 void * callback_arg,
00444 globus_gass_transfer_listener_t listener);
00445
00446 int
00447 globus_gass_transfer_create_listener(
00448 globus_gass_transfer_listener_t * listener,
00449 globus_gass_transfer_listenerattr_t * attr,
00450 char * scheme);
00451
00452 int
00453 globus_gass_transfer_close_listener(
00454 globus_gass_transfer_listener_t listener,
00455 globus_gass_transfer_close_callback_t callback,
00456 void * user_arg);
00457
00458 int
00459 globus_gass_transfer_register_listen(
00460 globus_gass_transfer_listener_t listener,
00461 globus_gass_transfer_listen_callback_t callback,
00462 void * user_arg);
00463
00464 int
00465 globus_gass_transfer_register_accept(
00466 globus_gass_transfer_request_t * request,
00467 globus_gass_transfer_requestattr_t * attr,
00468 globus_gass_transfer_listener_t listener,
00469 globus_gass_transfer_callback_t callback,
00470 void * user_arg);
00471
00472 int
00473 globus_gass_transfer_refer(
00474 globus_gass_transfer_request_t request,
00475 char ** urls,
00476 globus_size_t num_urls);
00477
00478 int
00479 globus_gass_transfer_authorize(
00480 globus_gass_transfer_request_t request,
00481 globus_size_t total_length);
00482
00483 int
00484 globus_gass_transfer_deny(
00485 globus_gass_transfer_request_t request,
00486 int reason,
00487 char * message);
00488
00489 char *
00490 globus_gass_transfer_listener_get_base_url(
00491 globus_gass_transfer_listener_t listener);
00492
00493 void *
00494 globus_gass_transfer_listener_get_user_pointer(
00495 globus_gass_transfer_listener_t listener);
00496
00497 int
00498 globus_gass_transfer_listener_set_user_pointer(
00499 globus_gass_transfer_listener_t listener,
00500 void * user_pointer);
00501
00526 typedef void
00527 (* globus_gass_transfer_bytes_callback_t)(
00528 void * arg,
00529 globus_gass_transfer_request_t request,
00530 globus_byte_t * bytes,
00531 globus_size_t length,
00532 globus_bool_t last_data);
00533
00534 int
00535 globus_gass_transfer_send_bytes(
00536 globus_gass_transfer_request_t request,
00537 globus_byte_t * bytes,
00538 globus_size_t send_length,
00539 globus_bool_t last_data,
00540 globus_gass_transfer_bytes_callback_t callback,
00541 void * user_arg);
00542
00543 int
00544 globus_gass_transfer_receive_bytes(
00545 globus_gass_transfer_request_t request,
00546 globus_byte_t * bytes,
00547 globus_size_t max_length,
00548 globus_size_t wait_for_length,
00549 globus_gass_transfer_bytes_callback_t callback,
00550 void * user_arg);
00551
00552 int
00553 globus_gass_transfer_fail(
00554 globus_gass_transfer_request_t request,
00555 globus_gass_transfer_callback_t callback,
00556 void * user_arg);
00574 #ifndef DOXYGEN
00575 typedef struct
00576 {
00577 char ** url;
00578 globus_size_t count;
00579 } globus_gass_transfer_referral_t;
00580
00581
00582 globus_size_t
00583 globus_gass_transfer_referral_get_count(
00584 globus_gass_transfer_referral_t * referral);
00585
00586 char *
00587 globus_gass_transfer_referral_get_url(
00588 globus_gass_transfer_referral_t * referral,
00589 globus_size_t index);
00590
00591 int
00592 globus_gass_transfer_referral_destroy(
00593 globus_gass_transfer_referral_t * referral);
00594
00595 #endif
00596
00597
00598
00625 #ifndef DOXYGEN
00626 globus_gass_transfer_request_type_t
00627 globus_gass_transfer_request_get_type(
00628 globus_gass_transfer_request_t request);
00629
00630 globus_gass_transfer_request_status_t
00631 globus_gass_transfer_request_get_status(
00632 globus_gass_transfer_request_t request);
00633
00634 char *
00635 globus_gass_transfer_request_get_subject(
00636 globus_gass_transfer_request_t request);
00637
00638 int
00639 globus_gass_transfer_request_set_subject(
00640 globus_gass_transfer_request_t request,
00641 char * subject);
00642
00643 int
00644 globus_gass_transfer_request_get_referral(
00645 globus_gass_transfer_request_t request,
00646 globus_gass_transfer_referral_t * referral);
00647
00648 char *
00649 globus_gass_transfer_request_get_url(
00650 globus_gass_transfer_request_t request);
00651
00652 int
00653 globus_gass_transfer_request_set_url(
00654 globus_gass_transfer_request_t request,
00655 char * url);
00656
00657 globus_size_t
00658 globus_gass_transfer_request_get_length(
00659 globus_gass_transfer_request_t request);
00660
00661 int
00662 globus_gass_transfer_request_get_denial_reason(
00663 globus_gass_transfer_request_t request);
00664
00665 char *
00666 globus_gass_transfer_request_get_denial_message(
00667 globus_gass_transfer_request_t request);
00668
00669 void *
00670 globus_gass_transfer_request_get_user_pointer(
00671 globus_gass_transfer_request_t request);
00672
00673 int
00674 globus_gass_transfer_request_set_user_pointer(
00675 globus_gass_transfer_request_t request,
00676 void * user_pointer);
00677
00678 int
00679 globus_gass_transfer_request_destroy(
00680 globus_gass_transfer_request_t request);
00681
00682 int
00683 globus_gass_transfer_request_set_type(
00684 globus_gass_transfer_request_t request,
00685 globus_gass_transfer_request_type_t type);
00686 #endif
00687
00688
00696 #ifndef DOXYGEN
00697 int
00698 globus_gass_transfer_requestattr_init(
00699 globus_gass_transfer_requestattr_t * attr,
00700 char * url_scheme);
00701
00702 int
00703 globus_gass_transfer_requestattr_destroy(
00704 globus_gass_transfer_requestattr_t * attr);
00705
00706 int
00707 globus_gass_transfer_listenerattr_init(
00708 globus_gass_transfer_listenerattr_t * attr,
00709 char * url_scheme);
00710
00711 int
00712 globus_gass_transfer_listenerattr_destroy(
00713 globus_gass_transfer_listenerattr_t * attr);
00714
00715
00716 int
00717 globus_gass_transfer_requestattr_set_proxy_url(
00718 globus_gass_transfer_requestattr_t * attr,
00719 char * proxy_url);
00720
00721 int
00722 globus_gass_transfer_requestattr_get_proxy_url(
00723 globus_gass_transfer_requestattr_t * attr,
00724 char ** proxy_url);
00725
00726 int
00727 globus_gass_transfer_requestattr_set_block_size(
00728 globus_gass_transfer_requestattr_t * attr,
00729 globus_size_t block_size);
00730
00731 int
00732 globus_gass_transfer_requestattr_get_block_size(
00733 globus_gass_transfer_requestattr_t * attr,
00734 globus_size_t * block_size);
00735
00736 int
00737 globus_gass_transfer_requestattr_set_file_mode(
00738 globus_gass_transfer_requestattr_t * attr,
00739 globus_gass_transfer_file_mode_t file_mode);
00740
00741 int
00742 globus_gass_transfer_requestattr_get_file_mode(
00743 globus_gass_transfer_requestattr_t * attr,
00744 globus_gass_transfer_file_mode_t * file_mode);
00745
00746 int
00747 globus_gass_transfer_requestattr_set_connection_reuse(
00748 globus_gass_transfer_requestattr_t * attr,
00749 globus_bool_t connection_reuse);
00750
00751 int
00752 globus_gass_transfer_requestattr_get_connection_reuse(
00753 globus_gass_transfer_requestattr_t * attr,
00754 globus_bool_t * connection_reuse);
00755
00756
00757 int
00758 globus_gass_transfer_requestattr_set_socket_sndbuf(
00759 globus_gass_transfer_requestattr_t * attr,
00760 int sndbuf);
00761
00762 int
00763 globus_gass_transfer_requestattr_get_socket_sndbuf(
00764 globus_gass_transfer_requestattr_t * attr,
00765 int * sndbuf);
00766
00767 int
00768 globus_gass_transfer_requestattr_set_socket_rcvbuf(
00769 globus_gass_transfer_requestattr_t * attr,
00770 int rcvbuf);
00771
00772 int
00773 globus_gass_transfer_requestattr_get_socket_rcvbuf(
00774 globus_gass_transfer_requestattr_t * attr,
00775 int * rcvbuf);
00776
00777 int
00778 globus_gass_transfer_requestattr_set_socket_nodelay(
00779 globus_gass_transfer_requestattr_t * attr,
00780 globus_bool_t nodelay);
00781
00782 int
00783 globus_gass_transfer_requestattr_get_socket_nodelay(
00784 globus_gass_transfer_requestattr_t * attr,
00785 globus_bool_t * nodelay);
00786
00787
00788 int
00789 globus_gass_transfer_secure_requestattr_set_authorization(
00790 globus_gass_transfer_requestattr_t * attr,
00791 globus_gass_transfer_authorization_t mode,
00792 char * subject);
00793
00794 int
00795 globus_gass_transfer_secure_requestattr_get_authorization(
00796 globus_gass_transfer_requestattr_t * attr,
00797 globus_gass_transfer_authorization_t * mode,
00798 char ** subject);
00799 #endif
00800
00805 #ifndef DOXYGEN
00806 int
00807 globus_gass_transfer_listenerattr_set_backlog(
00808 globus_gass_transfer_listenerattr_t * attr,
00809 int backlog);
00810
00811 int
00812 globus_gass_transfer_listenerattr_get_backlog(
00813 globus_gass_transfer_listenerattr_t * attr,
00814 int * backlog);
00815
00816 int
00817 globus_gass_transfer_listenerattr_set_port(
00818 globus_gass_transfer_listenerattr_t * attr,
00819 unsigned short port);
00820
00821 int
00822 globus_gass_transfer_listenerattr_get_port(
00823 globus_gass_transfer_listenerattr_t * attr,
00824 unsigned short * port);
00825 #endif
00826
00831 extern const globus_object_type_t
00832 GLOBUS_GASS_OBJECT_TYPE_REQUESTATTR_DEFINITION;
00833
00834 #define GLOBUS_GASS_OBJECT_TYPE_REQUESTATTR \
00835 (&GLOBUS_GASS_OBJECT_TYPE_REQUESTATTR_DEFINITION)
00836
00837 globus_object_t *
00838 globus_gass_transfer_requestattr_initialize(
00839 globus_object_t * obj,
00840 char * proxy_url,
00841 globus_size_t block_size,
00842 globus_gass_transfer_file_mode_t file_mode,
00843 globus_bool_t connection_reuse);
00844
00845 extern const globus_object_type_t
00846 GLOBUS_GASS_OBJECT_TYPE_SOCKET_REQUESTATTR_DEFINITION;
00847
00848 #define GLOBUS_GASS_OBJECT_TYPE_SOCKET_REQUESTATTR \
00849 (&GLOBUS_GASS_OBJECT_TYPE_SOCKET_REQUESTATTR_DEFINITION)
00850
00851 globus_object_t *
00852 globus_gass_transfer_socket_requestattr_initialize(
00853 globus_object_t * obj,
00854 char * proxy_url,
00855 globus_size_t block_size,
00856 globus_gass_transfer_file_mode_t file_mode,
00857 globus_bool_t connection_reuse,
00858 int sndbuf,
00859 int rcvbuf,
00860 globus_bool_t nodelay);
00861
00862 extern const globus_object_type_t
00863 GLOBUS_GASS_OBJECT_TYPE_SECURE_REQUESTATTR_DEFINITION;
00864
00865 #define GLOBUS_GASS_OBJECT_TYPE_SECURE_REQUESTATTR \
00866 (&GLOBUS_GASS_OBJECT_TYPE_SECURE_REQUESTATTR_DEFINITION)
00867
00868 globus_object_t *
00869 globus_gass_transfer_secure_requestattr_initialize(
00870 globus_object_t * obj,
00871 char * proxy_url,
00872 globus_size_t block_size,
00873 globus_gass_transfer_file_mode_t file_mode,
00874 globus_bool_t connection_reuse,
00875 int sndbuf,
00876 int rcvbuf,
00877 globus_bool_t nodelay,
00878 globus_gass_transfer_authorization_t authorization,
00879 char * subject);
00880
00881
00882 extern const globus_object_type_t
00883 GLOBUS_GASS_OBJECT_TYPE_LISTENERATTR_DEFINITION;
00884
00885 #define GLOBUS_GASS_OBJECT_TYPE_LISTENERATTR \
00886 (&GLOBUS_GASS_OBJECT_TYPE_LISTENERATTR_DEFINITION)
00887
00888 globus_object_t *
00889 globus_gass_transfer_listenerattr_initialize(
00890 globus_object_t * obj,
00891 int backlog,
00892 unsigned short port);
00893
00894 #ifdef __cplusplus
00895 }
00896 #endif
00897
00898 #endif