00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00065 #ifndef GLOBUS_GASS_PROTO_H
00066 #define GLOBUS_GASS_PROTO_H
00067
00068 #include "globus_common.h"
00069 #include "globus_gass_transfer.h"
00070
00071 #ifdef __cplusplus
00072 "C" {
00073 #endif
00074
00075
00080 typedef struct globus_gass_transfer_request_proto_s
00081 globus_gass_transfer_request_proto_t;
00082
00087 typedef struct globus_gass_transfer_listener_proto_s
00088 globus_gass_transfer_listener_proto_t;
00089
00121 typedef void
00122 (* globus_gass_transfer_proto_send_t)(
00123 globus_gass_transfer_request_proto_t * proto,
00124 globus_gass_transfer_request_t request,
00125 globus_byte_t * bytes,
00126 globus_size_t send_length,
00127 globus_bool_t last_data);
00128
00161 typedef void
00162 (* globus_gass_transfer_proto_receive_t)(
00163 globus_gass_transfer_request_proto_t * proto,
00164 globus_gass_transfer_request_t request,
00165 globus_byte_t * bytes,
00166 globus_size_t bytes_length,
00167 globus_size_t wait_for_length);
00168
00188 typedef void
00189 (* globus_gass_transfer_proto_func_t)(
00190 globus_gass_transfer_request_proto_t * proto,
00191 globus_gass_transfer_request_t request);
00192
00221 typedef void
00222 (* globus_gass_transfer_proto_new_request_t)(
00223 globus_gass_transfer_request_t request,
00224 globus_gass_transfer_requestattr_t * attr);
00225
00263 typedef int
00264 (* globus_gass_transfer_proto_create_listener_t)(
00265 globus_gass_transfer_listener_t listener,
00266 globus_gass_transfer_listenerattr_t * attr,
00267 char * scheme,
00268 char ** base_url,
00269 globus_gass_transfer_listener_proto_t ** proto);
00270
00288 typedef void
00289 (* globus_gass_transfer_proto_listener_t)(
00290 globus_gass_transfer_listener_proto_t * proto,
00291 globus_gass_transfer_listener_t listener);
00292
00319 typedef globus_object_t *
00320 (* globus_gass_transfer_proto_new_attr_t)(
00321 char * url_scheme);
00322
00356 typedef void
00357 (* globus_gass_transfer_proto_accept_t)(
00358 globus_gass_transfer_listener_proto_t * proto,
00359 globus_gass_transfer_listener_t listener,
00360 globus_gass_transfer_request_t request,
00361 globus_gass_transfer_requestattr_t * attr);
00362
00385 struct globus_gass_transfer_request_proto_s
00386 {
00391 globus_gass_transfer_proto_send_t send_buffer;
00396 globus_gass_transfer_proto_receive_t recv_buffer;
00397
00398
00405 globus_gass_transfer_proto_func_t fail;
00406
00410 globus_gass_transfer_proto_func_t deny;
00414 globus_gass_transfer_proto_func_t refer;
00418 globus_gass_transfer_proto_func_t authorize;
00419
00423 globus_gass_transfer_proto_func_t destroy;
00424 };
00425
00431 struct globus_gass_transfer_listener_proto_s
00432 {
00434 globus_gass_transfer_proto_listener_t close_listener;
00436 globus_gass_transfer_proto_listener_t listen;
00438 globus_gass_transfer_proto_accept_t accept;
00440 globus_gass_transfer_proto_listener_t destroy;
00441 };
00442
00451 typedef struct
00452 {
00468 char * url_scheme;
00469
00481 globus_gass_transfer_proto_new_attr_t new_requestattr;
00482
00501 globus_gass_transfer_proto_new_request_t new_request;
00502
00514 globus_gass_transfer_proto_new_attr_t new_listenerattr;
00515
00534 globus_gass_transfer_proto_create_listener_t new_listener;
00535 } globus_gass_transfer_proto_descriptor_t;
00536
00537 #ifndef DOXYGEN
00538 int
00539 globus_gass_transfer_proto_register_protocol(
00540 globus_gass_transfer_proto_descriptor_t * proto_desc);
00541
00542 int
00543 globus_gass_transfer_proto_unregister_protocol(
00544 globus_gass_transfer_proto_descriptor_t * proto_desc);
00545
00546 void
00547 globus_gass_transfer_proto_request_ready(
00548 globus_gass_transfer_request_t request,
00549 globus_gass_transfer_request_proto_t * proto);
00550
00551 void
00552 globus_gass_transfer_proto_request_denied(
00553 globus_gass_transfer_request_t request,
00554 int reason,
00555 char * message);
00556
00557 void
00558 globus_gass_transfer_proto_request_referred(
00559 globus_gass_transfer_request_t request,
00560 char ** url,
00561 globus_size_t num_urls);
00562
00563 void
00564 globus_gass_transfer_proto_new_listener_request(
00565 globus_gass_transfer_listener_t listener,
00566 globus_gass_transfer_request_t request,
00567 globus_gass_transfer_request_proto_t * proto);
00568
00569 void
00570 globus_gass_transfer_proto_send_complete(
00571 globus_gass_transfer_request_t request,
00572 globus_byte_t * bytes,
00573 globus_size_t nbytes,
00574 globus_bool_t failed,
00575 globus_bool_t last_data);
00576
00577 void
00578 globus_gass_transfer_proto_receive_complete(
00579 globus_gass_transfer_request_t request,
00580 globus_byte_t * bytes,
00581 globus_size_t nbytes,
00582 globus_bool_t failed,
00583 globus_bool_t last_data);
00584
00585 void
00586 globus_gass_transfer_proto_listener_ready(
00587 globus_gass_transfer_listener_t listener);
00588
00589
00590
00591
00592 void
00593 globus_gass_transfer_crlf_to_lf(
00594 globus_byte_t * src,
00595 globus_size_t src_len,
00596 globus_byte_t ** dst,
00597 globus_size_t * dst_len);
00598
00599 void
00600 globus_gass_transfer_lf_to_crlf(
00601 globus_byte_t * src,
00602 globus_size_t src_len,
00603 globus_byte_t ** dst,
00604 globus_size_t * dst_len);
00605
00606 #endif
00607
00608 #ifdef __cplusplus
00609 }
00610 #endif
00611
00612 #endif