Boolean BasicProviderManagerRouter::hasActiveProviders() { PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "BasicProviderManagerRouter::hasActiveProviders"); ReadLock tableLock(_providerManagerTableLock); for (Uint32 i = 0, n = _providerManagerTable.size(); i < n; i++) { ProviderManagerContainer* pmc = _providerManagerTable[i]; if (pmc->getProviderManager()->hasActiveProviders()) { PEG_METHOD_EXIT(); return true; } } PEG_METHOD_EXIT(); return false; }
// NOTE: The caller must lock _providerManagerTableLock before calling this // method. ProviderManager* BasicProviderManagerRouter::_lookupProviderManager( const String& interfaceType) { PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "BasicProviderManagerRouter::_lookupProviderManager"); // // Search for this InterfaceType in the table of loaded ProviderManagers // for (Uint32 i = 0, n = _providerManagerTable.size(); i < n; i++) { if (interfaceType == _providerManagerTable[i]->getInterfaceName()) { ProviderManagerContainer* pmc = _providerManagerTable[i]; PEG_METHOD_EXIT(); return pmc->getProviderManager(); } } // Not found PEG_METHOD_EXIT(); return 0; }
// ATTN: May need to add interfaceVersion parameter to further constrain lookup ProviderManager* BasicProviderManagerRouter::_getProviderManager( const String& interfaceType, const String& providerModuleName, const String& providerManagerPath) { PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "BasicProviderManagerRouter::_getProviderManager"); // // Search for this InterfaceType in the table of loaded ProviderManagers // { ReadLock tableLock(_providerManagerTableLock); ProviderManager* pm = _lookupProviderManager(interfaceType); if (pm) { PEG_METHOD_EXIT(); return pm; } } // // Load the ProviderManager for this InterfaceType and add it to the table // { WriteLock tableLock(_providerManagerTableLock); ProviderManager* pm = _lookupProviderManager(interfaceType); if (pm) { PEG_METHOD_EXIT(); return pm; } // The DefaultProviderManager is now statically linked rather than // dynamically loaded. This code is no longer used but remains for // reference purposes. #if defined(PEGASUS_ENABLE_DEFAULT_PROVIDER_MANAGER) if (interfaceType == "C++Default" && _createDefaultProviderManagerCallback) { pm = (*_createDefaultProviderManagerCallback)(); ProviderManagerContainer* pmc = new ProviderManagerContainer( "C++Default", _indicationCallback, _responseChunkCallback, _subscriptionInitComplete, pm); _providerManagerTable.append(pmc); PEG_METHOD_EXIT(); return pmc->getProviderManager(); } #endif ProviderManagerContainer* pmc = new ProviderManagerContainer( providerManagerPath, interfaceType, interfaceType, _indicationCallback, _responseChunkCallback, _subscriptionInitComplete); _providerManagerTable.append(pmc); PEG_METHOD_EXIT(); return pmc->getProviderManager(); } }
// ATTN: May need to add interfaceVersion parameter to further constrain lookup ProviderManager* BasicProviderManagerRouter::_getProviderManager( const String& interfaceType, const String& providerManagerPath, Boolean loadProviderManager) { PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "BasicProviderManagerRouter::_getProviderManager"); // // Search for this InterfaceType in the table of loaded ProviderManagers // { ReadLock tableLock(_providerManagerTableLock); ProviderManager* pm = _lookupProviderManager(interfaceType); if (pm) { PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Provider Manager for interfaceType '%s' already loaded.", (const char*)interfaceType.getCString())); PEG_METHOD_EXIT(); return pm; } } // // If requested, do not load the ProviderManger. // if (!loadProviderManager) { PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Requested not to load the Provider Manager " "for interfaceType '%s'.", (const char*)interfaceType.getCString())); PEG_METHOD_EXIT(); return 0; } // // Load the ProviderManager for this InterfaceType and add it to the table // { WriteLock tableLock(_providerManagerTableLock); ProviderManager* pm = _lookupProviderManager(interfaceType); if (pm) { PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Provider Manager for interfaceType '%s' already loaded.", (const char*)interfaceType.getCString())); PEG_METHOD_EXIT(); return pm; } // The DefaultProviderManager is now statically linked rather than // dynamically loaded. This code is no longer used but remains for // reference purposes. #if defined(PEGASUS_ENABLE_DEFAULT_PROVIDER_MANAGER) if (interfaceType == "C++Default" && _createDefaultProviderManagerCallback) { pm = (*_createDefaultProviderManagerCallback)(); ProviderManagerContainer* pmc = new ProviderManagerContainer( "C++Default", _indicationCallback, _responseChunkCallback, _subscriptionInitComplete, pm); _providerManagerTable.append(pmc); PEG_METHOD_EXIT(); return pmc->getProviderManager(); } #endif PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Crating new Provider Manager for interfaceType '%s', " "providerManagerPath '%s'.", (const char*)interfaceType.getCString(), (const char*)providerManagerPath.getCString())); ProviderManagerContainer* pmc = new ProviderManagerContainer( providerManagerPath, interfaceType, interfaceType, _indicationCallback, _responseChunkCallback, _subscriptionInitComplete); _providerManagerTable.append(pmc); PEG_METHOD_EXIT(); return pmc->getProviderManager(); } }