static globus_result_t globus_l_net_manager_context_load_entry( const char * name, globus_i_net_manager_context_entry_t ** entry) { globus_extension_handle_t ext_handle; globus_net_manager_t * loaded_manager; char * dll_name = NULL; globus_i_net_manager_context_entry_t * ent; int rc; globus_result_t result = GLOBUS_SUCCESS; GlobusNetManagerName(globus_l_net_manager_context_load_entry); /* is module already in registry? */ loaded_manager = (globus_net_manager_t *) globus_extension_lookup( &ext_handle, GLOBUS_NET_MANAGER_REGISTRY, (void *) name); if(loaded_manager == NULL) { /* load and activate the dll */ dll_name = globus_common_create_string( "globus_net_manager_%s", name); rc = globus_extension_activate(dll_name); if(rc != GLOBUS_SUCCESS) { result = GlobusNetManagerErrorManager( rc, name, "attempting to activate module."); goto error_activate; } /* now module should be in registry */ loaded_manager = (globus_net_manager_t *) globus_extension_lookup( &ext_handle, GLOBUS_NET_MANAGER_REGISTRY, (void *) name); if(loaded_manager == NULL) { result = GlobusNetManagerErrorManager( rc, name, "attempting to load activated module."); goto error_activate; } } ent = globus_calloc(1, sizeof(globus_i_net_manager_context_entry_t)); ent->manager = loaded_manager; ent->ext_handle = ext_handle; ent->name = strdup(name); ent->dll_name = dll_name; *entry = ent; return GLOBUS_SUCCESS; error_activate: globus_free(dll_name); *entry = NULL; return result; }
static int osg_activate(void) { GlobusGFSName(osg_activate); globus_result_t result = GLOBUS_SUCCESS; memset(&osg_dsi_iface, '\0', sizeof(globus_gfs_storage_iface_t)); char * dsi_name = getenv("OSG_EXTENSIONS_OVERRIDE_DSI"); dsi_name = dsi_name ? dsi_name : "file"; // Code adapted from globus_i_gfs_data.c in Globus Toolkit. void *new_dsi = (globus_gfs_storage_iface_t *) globus_extension_lookup( &osg_dsi_handle, GLOBUS_GFS_DSI_REGISTRY, dsi_name); if (new_dsi == NULL) { char module_name[1024]; snprintf(module_name, 1024, "globus_gridftp_server_%s", dsi_name); module_name[1023] = '\0'; result = globus_extension_activate(module_name); if (result != GLOBUS_SUCCESS) { result = GlobusGFSErrorWrapFailed("DSI activation", result); return result; } } new_dsi = (globus_gfs_storage_iface_t *) globus_extension_lookup( &osg_dsi_handle, GLOBUS_GFS_DSI_REGISTRY, dsi_name); if(new_dsi == NULL) { GlobusGFSErrorGenericStr(result, ("DSI '%s' is not available in the module.", dsi_name)); return result; } memcpy(&osg_dsi_iface, new_dsi, sizeof(globus_gfs_storage_iface_t)); original_command_function = osg_dsi_iface.command_func; original_init_function = osg_dsi_iface.init_func; osg_dsi_iface.command_func = osg_command; osg_dsi_iface.init_func = osg_extensions_init; globus_extension_registry_add( GLOBUS_GFS_DSI_REGISTRY, "osg", GlobusExtensionMyModule(globus_gridftp_server_osg), &osg_dsi_iface); return result; }