static int globus_l_gram_streamer_open_destination( globus_gram_streamer_monitor_t * monitor, globus_gram_stream_t * stream) { globus_gass_transfer_requestattr_t attr; char scheme[16]; int i; int rc; for (i = 0; i < sizeof(scheme); i++) { if (stream->destination[i] == ':') { scheme[i] = 0; break; } else { scheme[i] = stream->destination[i]; } } scheme[15] = 0; rc = globus_gass_transfer_requestattr_init( &attr, scheme); if (rc != GLOBUS_SUCCESS) { return rc; } rc = globus_gass_transfer_register_append( &stream->handle, &attr, (char *) stream->destination, GLOBUS_GASS_TRANSFER_LENGTH_UNKNOWN, globus_l_gram_streamer_request_ready, monitor); if (rc == GLOBUS_SUCCESS) { (void) globus_gass_transfer_request_set_user_pointer( stream->handle, stream); } (void) globus_gass_transfer_requestattr_destroy(&attr); return rc; }
void test_l_new_listener_callback( void * callback_arg, globus_gass_transfer_listener_t listener) { int rc; globus_gass_transfer_request_t request; globus_gass_transfer_requestattr_t attr; globus_gass_transfer_requestattr_init(&attr, "https"); globus_gass_transfer_secure_requestattr_set_authorization( &attr, GLOBUS_GASS_TRANSFER_AUTHORIZE_SELF, "https"); rc = globus_gass_transfer_register_accept( &request, &attr, listener, test_l_new_accept_callback, callback_arg); globus_gass_transfer_requestattr_destroy(&attr); }
/****************************************************************************** Function: globus_gass_server_ez_init() Description: Parameters: Returns: ******************************************************************************/ int globus_gass_server_ez_init(globus_gass_transfer_listener_t * listener, globus_gass_transfer_listenerattr_t * attr, char * scheme, globus_gass_transfer_requestattr_t * reqattr, unsigned long options, globus_gass_server_ez_client_shutdown_t callback, int fd) { int rc; globus_l_gass_server_ez_t *server; globus_bool_t free_scheme=GLOBUS_FALSE; if(scheme==GLOBUS_NULL) { scheme=globus_malloc(6); /* https/0 is the default */ if(scheme == GLOBUS_NULL) { rc = GLOBUS_GASS_TRANSFER_ERROR_MALLOC_FAILED; goto error_exit; } free_scheme=GLOBUS_TRUE; globus_libc_lock(); sprintf(scheme, "https"); globus_libc_unlock(); } if(reqattr==GLOBUS_NULL) { reqattr=(globus_gass_transfer_requestattr_t *)globus_malloc(sizeof(globus_gass_transfer_requestattr_t)); globus_gass_transfer_requestattr_init(reqattr, scheme); globus_gass_transfer_secure_requestattr_set_authorization(reqattr, GLOBUS_GASS_TRANSFER_AUTHORIZE_SELF, scheme); } rc=globus_gass_transfer_create_listener(listener, attr, scheme); if(rc!=GLOBUS_SUCCESS) { goto error_exit; } server=(globus_l_gass_server_ez_t *)globus_malloc( sizeof (globus_l_gass_server_ez_t)); if(server==GLOBUS_NULL) { rc = GLOBUS_GASS_TRANSFER_ERROR_MALLOC_FAILED; goto error_exit; } server->options=options; server->listener=*listener; server->reqattr=reqattr; server->callback=callback; server->fd=fd; globus_hashtable_insert(&globus_l_gass_server_ez_listeners, (void *)*listener, server); rc=globus_gass_transfer_register_listen(*listener, globus_l_gass_server_ez_listen_callback, (void *)reqattr); /* insert error handling here*/ error_exit: if (free_scheme) globus_free(scheme); return rc; } /* globus_gass_server_ez_init() */