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