00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef GLOBUS_GASS_COPY_H
00018 #define GLOBUS_GASS_COPY_H
00019
00020 #include <openssl/evp.h>
00021
00027 #ifndef GLOBUS_GLOBAL_DOCUMENT_SET
00028
00032 #endif
00033
00057 #include "globus_gass_transfer.h"
00058 #include "globus_ftp_client.h"
00059 #include "globus_io.h"
00060
00061 #ifdef __cplusplus
00062 extern "C" {
00063 #endif
00064
00096 #define GLOBUS_GASS_COPY_MODULE (&globus_i_gass_copy_module)
00097
00098 extern
00099 globus_module_descriptor_t globus_i_gass_copy_module;
00100
00101 #define _GASCSL(s) globus_common_i18n_get_string( \
00102 GLOBUS_GASS_COPY_MODULE, \
00103 s)
00104
00105 #define CKSM_SIZE (EVP_MAX_MD_SIZE * 2 + 1)
00106
00107 typedef struct globus_gass_copy_state_s globus_gass_copy_state_t;
00108 typedef struct globus_gass_copy_handle_s globus_gass_copy_handle_t;
00109 typedef struct globus_gass_copy_perf_info_s globus_gass_copy_perf_info_t;
00110
00143 typedef void (*globus_gass_copy_performance_cb_t)(
00144 void * user_arg,
00145 globus_gass_copy_handle_t * handle,
00146 globus_off_t total_bytes,
00147 float instantaneous_throughput,
00148 float avg_throughput);
00149
00157 typedef void (*globus_gass_copy_callback_t)(
00158 void * callback_arg,
00159 globus_gass_copy_handle_t * handle,
00160 globus_object_t * error);
00161
00166 typedef enum
00167 {
00168 GLOBUS_GASS_COPY_STATUS_NONE,
00169 GLOBUS_GASS_COPY_STATUS_PENDING,
00170 GLOBUS_GASS_COPY_STATUS_INITIAL,
00171 GLOBUS_GASS_COPY_STATUS_SOURCE_READY,
00172 GLOBUS_GASS_COPY_STATUS_TRANSFER_IN_PROGRESS,
00173 GLOBUS_GASS_COPY_STATUS_READ_COMPLETE,
00174 GLOBUS_GASS_COPY_STATUS_WRITE_COMPLETE,
00175 GLOBUS_GASS_COPY_STATUS_DONE,
00176 GLOBUS_GASS_COPY_STATUS_FAILURE,
00177 GLOBUS_GASS_COPY_STATUS_CANCEL,
00178 GLOBUS_GASS_COPY_STATUS_DONE_SUCCESS,
00179 GLOBUS_GASS_COPY_STATUS_DONE_FAILURE,
00180 GLOBUS_GASS_COPY_STATUS_DONE_CANCELLED
00181 } globus_gass_copy_status_t;
00182
00187 typedef enum
00188 {
00189 GLOBUS_GASS_COPY_URL_MODE_UNSUPPORTED,
00190 GLOBUS_GASS_COPY_URL_MODE_FTP,
00191 GLOBUS_GASS_COPY_URL_MODE_GASS,
00192 GLOBUS_GASS_COPY_URL_MODE_IO
00193 } globus_gass_copy_url_mode_t;
00194
00199 struct globus_gass_copy_handle_s
00200 {
00204 globus_gass_copy_status_t status;
00205
00210 globus_gass_copy_state_t *state;
00211
00215 void *user_pointer;
00216
00221 globus_gass_copy_perf_info_t *performance;
00222
00227 globus_bool_t external_third_party;
00228
00232 globus_gass_copy_callback_t user_callback;
00233
00237 void *callback_arg;
00238
00242 globus_gass_copy_callback_t user_cancel_callback;
00243
00247 void *cancel_callback_arg;
00248
00252 globus_object_t *err;
00253
00257 int buffer_length;
00258
00265 globus_bool_t no_third_party_transfers;
00266
00267 globus_ftp_client_handle_t ftp_handle;
00271 globus_ftp_client_handle_t ftp_handle_2;
00272
00277 globus_off_t partial_offset;
00278 globus_off_t partial_end_offset;
00279 globus_off_t partial_bytes_remaining;
00284 globus_bool_t send_allo;
00285
00289 globus_bool_t always_stat_on_expand;
00290 };
00291
00299 typedef struct globus_gass_copy_attr_s
00300 {
00301 globus_ftp_client_operationattr_t * ftp_attr;
00302 globus_io_attr_t * io;
00303 globus_gass_transfer_requestattr_t * gass_requestattr;
00304 } globus_gass_copy_attr_t;
00305
00313 typedef struct globus_gass_copy_handleattr_s
00314 {
00315 globus_ftp_client_handleattr_t * ftp_attr;
00316 } globus_gass_copy_handleattr_t;
00317
00318
00319 globus_result_t
00320 globus_gass_copy_handle_init(
00321 globus_gass_copy_handle_t * handle,
00322 globus_gass_copy_handleattr_t * handle_attr);
00323
00324 globus_result_t
00325 globus_gass_copy_handle_destroy(
00326 globus_gass_copy_handle_t * handle);
00327
00328 globus_result_t
00329 globus_gass_copy_handleattr_init(
00330 globus_gass_copy_handleattr_t * handle_attr);
00331
00332 globus_result_t
00333 globus_gass_copy_handleattr_destroy(
00334 globus_gass_copy_handleattr_t * handle_attr);
00335
00336 globus_result_t
00337 globus_gass_copy_handleattr_set_ftp_attr(
00338 globus_gass_copy_handleattr_t * handle_attr,
00339 globus_ftp_client_handleattr_t * ftp_attr);
00340
00341
00342 globus_result_t
00343 globus_gass_copy_set_buffer_length(
00344 globus_gass_copy_handle_t * handle,
00345 int length);
00346
00347
00348 globus_result_t
00349 globus_gass_copy_get_buffer_length(
00350 globus_gass_copy_handle_t * handle,
00351 int * length);
00352
00353
00354
00355 globus_result_t
00356 globus_gass_copy_set_no_third_party_transfers(
00357 globus_gass_copy_handle_t * handle,
00358 globus_bool_t no_third_party_transfers);
00359
00360
00361 globus_result_t
00362 globus_gass_copy_get_no_third_party_transfers(
00363 globus_gass_copy_handle_t * handle,
00364 globus_bool_t * no_third_party_transfers);
00365
00366
00367 globus_result_t
00368 globus_gass_copy_get_partial_offsets(
00369 globus_gass_copy_handle_t * handle,
00370 globus_off_t * offset,
00371 globus_off_t * end_offset);
00372
00373
00374 globus_result_t
00375 globus_gass_copy_set_partial_offsets(
00376 globus_gass_copy_handle_t * handle,
00377 globus_off_t offset,
00378 globus_off_t end_offset);
00379
00380
00381 globus_result_t
00382 globus_gass_copy_set_allocate(
00383 globus_gass_copy_handle_t * handle,
00384 globus_bool_t send_allo);
00385
00386
00387
00388
00389
00390
00391 globus_result_t
00392 globus_gass_copy_set_stat_on_expand(
00393 globus_gass_copy_handle_t * handle,
00394 globus_bool_t always_stat);
00395
00396 globus_result_t
00397 globus_gass_copy_set_checksum_algo(
00398 globus_gass_copy_handle_t * handle,
00399 char * algo,
00400 globus_gass_copy_handle_t * cksm_handle);
00401
00402 globus_result_t
00403 globus_gass_copy_set_checksum(
00404 globus_gass_copy_handle_t * handle,
00405 char * cksm);
00406
00407
00408 globus_result_t
00409 globus_gass_copy_get_url_mode(
00410 char * url,
00411 globus_gass_copy_url_mode_t * mode);
00412
00413
00414 globus_result_t
00415 globus_gass_copy_get_ftp_handle(
00416 globus_gass_copy_handle_t * handle,
00417 globus_ftp_client_handle_t * ftp_handle);
00418
00419
00420 globus_result_t
00421 globus_gass_copy_attr_init(
00422 globus_gass_copy_attr_t * attr);
00423
00424
00425 globus_result_t
00426 globus_gass_copy_attr_set_ftp(
00427 globus_gass_copy_attr_t * attr,
00428 globus_ftp_client_operationattr_t * ftp_attr);
00429
00430 globus_result_t
00431 globus_gass_copy_attr_set_io(
00432 globus_gass_copy_attr_t * attr,
00433 globus_io_attr_t * io_attr);
00434
00435 globus_result_t
00436 globus_gass_copy_attr_set_gass(
00437 globus_gass_copy_attr_t * attr,
00438 globus_gass_transfer_requestattr_t * gass_attr);
00439
00440
00441
00442
00443 globus_result_t
00444 globus_gass_copy_url_to_url(
00445 globus_gass_copy_handle_t * handle,
00446 char * source_url,
00447 globus_gass_copy_attr_t * source_attr,
00448 char * dest_url,
00449 globus_gass_copy_attr_t * dest_attr);
00450
00451 globus_result_t
00452 globus_gass_copy_url_to_handle(
00453 globus_gass_copy_handle_t * handle,
00454 char * source_url,
00455 globus_gass_copy_attr_t * source_attr,
00456 globus_io_handle_t * dest_handle);
00457
00458 globus_result_t
00459 globus_gass_copy_handle_to_url(
00460 globus_gass_copy_handle_t * handle,
00461 globus_io_handle_t * source_handle,
00462 char * dest_url,
00463 globus_gass_copy_attr_t * dest_attr);
00464
00465
00466
00467
00468 globus_result_t
00469 globus_gass_copy_register_url_to_url(
00470 globus_gass_copy_handle_t * handle,
00471 char * source_url,
00472 globus_gass_copy_attr_t * dest_attr,
00473 char * dest_url,
00474 globus_gass_copy_attr_t * source_attr,
00475 globus_gass_copy_callback_t callback_func,
00476 void * callback_arg);
00477
00478 globus_result_t
00479 globus_gass_copy_register_url_to_handle(
00480 globus_gass_copy_handle_t * handle,
00481 char * source_url,
00482 globus_gass_copy_attr_t * source_attr,
00483 globus_io_handle_t * dest_handle,
00484 globus_gass_copy_callback_t callback_func,
00485 void * callback_arg);
00486
00487 globus_result_t
00488 globus_gass_copy_register_handle_to_url(
00489 globus_gass_copy_handle_t * handle,
00490 globus_io_handle_t * source_handle,
00491 char * dest_url,
00492 globus_gass_copy_attr_t * dest_attr,
00493 globus_gass_copy_callback_t callback_func,
00494 void * callback_arg);
00495
00496
00497
00498
00499 globus_result_t
00500 globus_gass_copy_get_status(
00501 globus_gass_copy_handle_t * handle,
00502 globus_gass_copy_status_t *status);
00503
00504
00505
00506
00507
00508 const char *
00509 globus_gass_copy_get_status_string(
00510 globus_gass_copy_handle_t * handle);
00511
00512
00513
00514
00515 globus_result_t
00516 globus_gass_copy_cancel(
00517 globus_gass_copy_handle_t * handle,
00518 globus_gass_copy_callback_t cancel_callback,
00519 void * cancel_callback_arg);
00520
00521
00522
00523
00524
00525
00526 globus_result_t
00527 globus_gass_copy_cache_url_state(
00528 globus_gass_copy_handle_t * handle,
00529 char * url);
00530
00531 globus_result_t
00532 globus_gass_copy_flush_url_state(
00533 globus_gass_copy_handle_t * handle,
00534 char * url);
00535
00536
00537
00538
00539 globus_result_t
00540 globus_gass_copy_set_user_pointer(
00541 globus_gass_copy_handle_t * handle,
00542 void * user_data);
00543
00544 globus_result_t
00545 globus_gass_copy_get_user_pointer(
00546 globus_gass_copy_handle_t * handle,
00547 void ** user_data);
00548
00549 globus_result_t
00550 globus_gass_copy_register_performance_cb(
00551 globus_gass_copy_handle_t * handle,
00552 globus_gass_copy_performance_cb_t callback,
00553 void * user_arg);
00554
00555
00556
00557
00558
00559 #ifdef USE_FTP
00560
00561 globus_result_t
00562 globus_gass_copy_attr_set_tcpbuffer(
00563 globus_gass_copy_attr_t * attr,
00564 globus_ftp_control_tcpbuffer_t * tcpbuffer_info);
00565
00566
00567 globus_result_t
00568 globus_gass_copy_attr_set_parallelism(
00569 globus_gass_copy_attr_t * attr,
00570 globus_ftp_control_parallelism_t * parallelism_info);
00571
00572
00573 globus_result_t
00574 globus_gass_copy_attr_set_striping(
00575 globus_gass_copy_attr_t * attr,
00576 globus_ftp_control_striping_t * striping_info);
00577
00578
00579 globus_result_t
00580 globus_gass_copy_attr_set_authorization(
00581 globus_gass_copy_attr_t * attr,
00582 globus_io_authorization_t * authorization_info);
00583
00584
00585 globus_result_t
00586 globus_gass_copy_attr_set_secure_channel(
00587 globus_gass_copy_attr_t * attr,
00588 globus_io_secure_channel_t * secure_channel_info);
00589 #endif
00590
00595 typedef enum {
00596 GLOBUS_GASS_COPY_GLOB_ENTRY_UNKNOWN,
00597 GLOBUS_GASS_COPY_GLOB_ENTRY_FILE,
00598 GLOBUS_GASS_COPY_GLOB_ENTRY_DIR,
00599 GLOBUS_GASS_COPY_GLOB_ENTRY_OTHER
00600 } globus_gass_copy_glob_entry_t;
00601
00606 typedef struct
00607 {
00610 globus_gass_copy_glob_entry_t type;
00611
00617 char * unique_id;
00618
00622 char * symlink_target;
00623
00627 int mode;
00628
00632 int mdtm;
00633
00637 globus_off_t size;
00638 } globus_gass_copy_glob_stat_t;
00639
00661 typedef void (*globus_gass_copy_glob_entry_cb_t)(
00662 const char * url,
00663 const globus_gass_copy_glob_stat_t * info_stat,
00664 void * user_arg);
00665
00698 globus_result_t
00699 globus_gass_copy_glob_expand_url(
00700 globus_gass_copy_handle_t * handle,
00701 const char * url,
00702 globus_gass_copy_attr_t * attr,
00703 globus_gass_copy_glob_entry_cb_t entry_cb,
00704 void * user_arg);
00705
00729 globus_result_t
00730 globus_gass_copy_mkdir(
00731 globus_gass_copy_handle_t * handle,
00732 char * url,
00733 globus_gass_copy_attr_t * attr);
00734
00735 globus_result_t
00736 globus_gass_copy_cksm(
00737 globus_gass_copy_handle_t * handle,
00738 char * url,
00739 globus_gass_copy_attr_t * attr,
00740 globus_off_t offset,
00741 globus_off_t length,
00742 const char * algorithm,
00743 char * cksm);
00744
00745 globus_result_t
00746 globus_gass_copy_cksm_async(
00747 globus_gass_copy_handle_t * handle,
00748 char * url,
00749 globus_gass_copy_attr_t * attr,
00750 globus_off_t offset,
00751 globus_off_t length,
00752 const char * algorithm,
00753 char * cksm,
00754 globus_gass_copy_callback_t callback,
00755 void * callback_arg);
00756
00757 globus_result_t
00758 globus_gass_copy_stat(
00759 globus_gass_copy_handle_t * handle,
00760 char * url,
00761 globus_gass_copy_attr_t * attr,
00762 globus_gass_copy_glob_stat_t * stat_info);
00763
00764 #ifdef __cplusplus
00765 }
00766 #endif
00767
00768 #endif