+XMLMetadataProvider::XMLMetadataProvider(const DOMElement* e)
+ : MetadataProvider(e), AbstractMetadataProvider(e), DiscoverableMetadataProvider(e),
+ ReloadableXMLFile(e, Category::getInstance(SAML_LOGCAT".MetadataProvider.XML"), false),
+ m_discoveryFeed(XMLHelper::getAttrBool(e, true, discoveryFeed)),
+ m_dropDOM(XMLHelper::getAttrBool(e, true, dropDOM)),
+ m_refreshDelayFactor(0.75), m_backoffFactor(1),
+ m_minRefreshDelay(XMLHelper::getAttrInt(e, 600, minRefreshDelay)),
+ m_maxRefreshDelay(m_reloadInterval), m_lastValidUntil(SAMLTIME_MAX)
+{
+ if (!m_local && m_maxRefreshDelay) {
+ const XMLCh* setting = e->getAttributeNS(nullptr, refreshDelayFactor);
+ if (setting && *setting) {
+ auto_ptr_char delay(setting);
+ m_refreshDelayFactor = atof(delay.get());
+ if (m_refreshDelayFactor <= 0.0 || m_refreshDelayFactor >= 1.0) {
+ m_log.error("invalid refreshDelayFactor setting, using default");
+ m_refreshDelayFactor = 0.75;
+ }
+ }
+
+ if (m_minRefreshDelay > m_maxRefreshDelay) {
+ m_log.warn("minRefreshDelay setting exceeds maxRefreshDelay/reloadInterval setting, lowering to match it");
+ m_minRefreshDelay = m_maxRefreshDelay;
+ }
+ }
+}
+
+pair<bool,DOMElement*> XMLMetadataProvider::load(bool backup)