X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml2%2Fmetadata%2FDynamicMetadataProvider.h;h=389f461651eac8ae0894d78592268f9b13dbb219;hb=e9554c255ad3c91c7c4976e7a1a54905903e66a2;hp=44b622bb8eff21857d913c6a116c9a2a8883b50d;hpb=a0f7ddfb1954304a01b6a49580ce8d2603a60446;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/saml2/metadata/DynamicMetadataProvider.h b/saml/saml2/metadata/DynamicMetadataProvider.h index 44b622b..389f461 100644 --- a/saml/saml2/metadata/DynamicMetadataProvider.h +++ b/saml/saml2/metadata/DynamicMetadataProvider.h @@ -1,6 +1,6 @@ /* - * Copyright 2001-2007 Internet2 - * + * Copyright 2001-2010 Internet2 + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -16,7 +16,7 @@ /** * @file saml/saml2/metadata/DynamicMetadataProvider.h - * + * * Simple implementation of a dynamic caching MetadataProvider. */ @@ -25,6 +25,10 @@ #include +namespace xmltooling { + class XMLTOOL_API RWLock; +}; + namespace opensaml { namespace saml2md { @@ -36,47 +40,40 @@ namespace opensaml { public: /** * Constructor. - * + * * @param e DOM to supply configuration for provider */ - DynamicMetadataProvider(const xercesc::DOMElement* e=NULL); + DynamicMetadataProvider(const xercesc::DOMElement* e=nullptr); virtual ~DynamicMetadataProvider(); - xmltooling::Lockable* lock() { - m_lock->rdlock(); - return this; - } - - void unlock() { - m_lock->unlock(); - } - - void init() { - } - - const xmltooling::XMLObject* getMetadata() const { - throw MetadataException("getMetadata operation not implemented on this provider."); - } - - const EntityDescriptor* getEntityDescriptor(const char* id, bool requireValidMetadata=true) const; + void init(); + xmltooling::Lockable* lock(); + void unlock(); + const xmltooling::XMLObject* getMetadata() const; + std::pair getEntityDescriptor(const Criteria& criteria) const; protected: /** Controls XML schema validation. */ bool m_validate; + /** Caps the allowable cache duration of a metadata instance. */ + time_t m_maxCacheDuration; + /** - * Resolves an entityID into a metadata instance for that entity. - * - * @param entityID entity ID to resolve + * Resolves a metadata instance using the supplied criteria. + * + * @param criteria lookup criteria * @return a valid metadata instance */ - virtual EntityDescriptor* resolve(const char* entityID) const; + virtual EntityDescriptor* resolve(const Criteria& criteria) const; private: mutable xmltooling::RWLock* m_lock; + typedef std::map cachemap_t; + mutable cachemap_t m_cacheMap; }; - + }; };