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