/** * Server listener ready. * @ingroup globus_gass_transfer_protocol * * This function notifies the GASS Transfer Library that the protocol module * has decided that a new request can be accepted on this particular listener. * It must only be called after the GASS Transfer Library has called the * @link globus_gass_transfer_listener_proto_t::listen listen function@endlink * in a #globus_gass_transfer_listener_proto_t protocol module-specific * listener structure. * * @param listener * The listener handle which is now ready for accepting a new * connection. */ void globus_gass_transfer_proto_listener_ready( globus_gass_transfer_listener_t listener) { globus_gass_transfer_listener_struct_t * l; globus_gass_transfer_listen_callback_t callback; void * callback_arg; globus_gass_transfer_listen_callback_t close_callback = GLOBUS_NULL; void * close_callback_arg; globus_i_gass_transfer_lock(); l = globus_handle_table_lookup(&globus_i_gass_transfer_listener_handles, listener); if(l == GLOBUS_NULL) { goto error_exit; } switch(l->status) { case GLOBUS_GASS_TRANSFER_LISTENER_INVALID: goto error_exit; case GLOBUS_GASS_TRANSFER_LISTENER_LISTENING: l->status = GLOBUS_GASS_TRANSFER_LISTENER_READY; callback = l->listen_callback; callback_arg = l->listen_callback_arg; globus_i_gass_transfer_unlock(); callback(callback_arg, listener); return; case GLOBUS_GASS_TRANSFER_LISTENER_CLOSING1: l->status = GLOBUS_GASS_TRANSFER_LISTENER_CLOSED; callback = l->listen_callback; callback_arg = l->listen_callback_arg; close_callback = l->close_callback; close_callback_arg = l->close_callback_arg; /* Destroy our reference to the proto */ l->proto->destroy(l->proto, listener); /* * Destroy GASS's reference * to this listener */ globus_i_gass_transfer_listener_destroy(listener); globus_i_gass_transfer_unlock(); callback(callback_arg, listener); if(close_callback) { close_callback(close_callback_arg, listener); } globus_i_gass_transfer_lock(); globus_i_gass_transfer_listener_destroy(listener); globus_i_gass_transfer_unlock(); return; case GLOBUS_GASS_TRANSFER_LISTENER_READY: case GLOBUS_GASS_TRANSFER_LISTENER_STARTING: case GLOBUS_GASS_TRANSFER_LISTENER_ACCEPTING: case GLOBUS_GASS_TRANSFER_LISTENER_CLOSING2: case GLOBUS_GASS_TRANSFER_LISTENER_CLOSED: globus_assert(l->status != GLOBUS_GASS_TRANSFER_LISTENER_READY); globus_assert(l->status != GLOBUS_GASS_TRANSFER_LISTENER_STARTING); globus_assert(l->status != GLOBUS_GASS_TRANSFER_LISTENER_ACCEPTING); globus_assert(l->status != GLOBUS_GASS_TRANSFER_LISTENER_CLOSING2); globus_assert(l->status != GLOBUS_GASS_TRANSFER_LISTENER_CLOSED); break; } globus_i_gass_transfer_unlock(); return; error_exit: globus_i_gass_transfer_unlock(); }
void mock_file_writer::close() { close_callback(); }