UtlBoolean SipRedirectServer::initialize(OsConfigDb& configDb ///< Configuration parameters ) { configDb.get("SIP_REGISTRAR_DOMAIN_NAME", mDefaultDomain); mProxyNormalPort = configDb.getPort("SIP_REGISTRAR_PROXY_PORT"); if (mProxyNormalPort == PORT_DEFAULT) { mProxyNormalPort = SIP_PORT; } mAckRouteToProxy.insert(0, "<"); mAckRouteToProxy.append(mDefaultDomain); mAckRouteToProxy.append(";lr>"); // Load the list of redirect processors. mRedirectPlugins.readConfig(configDb); mRedirectorCount = mRedirectPlugins.entries(); // Call their ::initialize() methods. mpConfiguredRedirectors = new RedirectorDescriptor[ mRedirectorCount ]; PluginIterator iterator(mRedirectPlugins); RedirectPlugin* redirector; UtlString redirectorName; bool bAuthorityLevelDbAvailable; UtlString authorityLevelDbPrefix = RedirectPlugin::Prefix; authorityLevelDbPrefix.append( AuthorityLevelPrefix ); authorityLevelDbPrefix.append( '.' ); OsConfigDb authorityLevelDb; bAuthorityLevelDbAvailable = ( configDb.getSubHash( authorityLevelDbPrefix, authorityLevelDb ) == OS_SUCCESS ); int i; // Iterator sequence number. for (i = 0; (redirector = static_cast <RedirectPlugin*> (iterator.next( &redirectorName ))); i++) { mpConfiguredRedirectors[i].name = redirectorName; if( ( mpConfiguredRedirectors[i].bActive = ( redirector->initialize(configDb, i, mDefaultDomain) == OS_SUCCESS ) ) ) { redirector->setUserAgent(mpSipUserAgent); int authorityLevel; if( bAuthorityLevelDbAvailable && authorityLevelDb.get( redirectorName, authorityLevel ) == OS_SUCCESS ) { mpConfiguredRedirectors[i].authorityLevel = authorityLevel; } else { mpConfiguredRedirectors[i].authorityLevel = LOWEST_AUTHORITY_LEVEL; } Os::Logger::instance().log(FAC_SIP, PRI_DEBUG, "SipRedirectServer::initialize " "Initialized redirector %s (authority level = %zd)", redirectorName.data(), mpConfiguredRedirectors[i].authorityLevel ); } else { Os::Logger::instance().log(FAC_SIP, PRI_DEBUG, "SipRedirectServer::initialize " "Redirector %s is inactive ", redirectorName.data() ); } } return true; }