X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml2%2Fmetadata%2FAbstractMetadataProvider.h;h=2e5a7cafa7020a8b97371b69c79cab4e96b63c9b;hb=d8a4f024b89272eae00618fc39e6127b6c191edd;hp=db6427b5a68761f20b5c1993e4ed86de1ea3dcd3;hpb=b1614d3c1fc1f4230ab2a123f43994127c25462c;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/saml2/metadata/AbstractMetadataProvider.h b/saml/saml2/metadata/AbstractMetadataProvider.h index db6427b..2e5a7ca 100644 --- a/saml/saml2/metadata/AbstractMetadataProvider.h +++ b/saml/saml2/metadata/AbstractMetadataProvider.h @@ -1,5 +1,5 @@ /* - * Copyright 2001-2007 Internet2 + * Copyright 2001-2009 Internet2 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,15 +25,28 @@ #include -#include -#include -#include +#include +#include +#include +#include + +namespace xmltooling { + class XMLTOOL_API Credential; + class XMLTOOL_API CredentialCriteria; + class XMLTOOL_API KeyInfoResolver; + class XMLTOOL_API Mutex; +}; namespace opensaml { namespace saml2md { class SAML_API MetadataFilter; +#if defined (_MSC_VER) + #pragma warning( push ) + #pragma warning( disable : 4251 ) +#endif + /** * Base class for caching metadata providers. */ @@ -56,14 +69,16 @@ namespace opensaml { * * @param e DOM to supply configuration for provider */ - AbstractMetadataProvider(const DOMElement* e=NULL); + AbstractMetadataProvider(const xercesc::DOMElement* e=NULL); public: virtual ~AbstractMetadataProvider(); - void emitChangeEvent(); - const EntityDescriptor* getEntityDescriptor(const char* id, bool requireValidMetadata=true) const; - const EntityDescriptor* getEntityDescriptor(const SAMLArtifact* artifact) const; + using MetadataProvider::getEntityDescriptor; + using MetadataProvider::getEntitiesDescriptor; + + void emitChangeEvent() const; + std::pair getEntityDescriptor(const Criteria& criteria) const; const EntitiesDescriptor* getEntitiesDescriptor(const char* name, bool requireValidMetadata=true) const; const xmltooling::Credential* resolve(const xmltooling::CredentialCriteria* criteria=NULL) const; std::vector::size_type resolve( @@ -79,46 +94,43 @@ namespace opensaml { * processing known reverse lookup strategies for artifacts. * * @param site entity definition - * @param validUntil expiration time of the entity definition + * @param validUntil maximum expiration time of the entity definition + * @param replace true iff existing entries for the same entity should be cleared/replaced */ - virtual void index(EntityDescriptor* site, time_t validUntil); + virtual void index(EntityDescriptor* site, time_t validUntil, bool replace=false) const; /** * Loads a group of entities into the cache for faster lookup. * * @param group group definition - * @param validUntil expiration time of the group definition + * @param validUntil maximum expiration time of the group definition */ - virtual void index(EntitiesDescriptor* group, time_t validUntil); + virtual void index(EntitiesDescriptor* group, time_t validUntil) const; /** * Clear the cache of known entities and groups. - */ - virtual void clearDescriptorIndex(); - - /** - * Returns true iff the Credential matches the criteria supplied, if any. * - * @param cred Credential plus KeyDescriptor usage information - * @param criteria criteria for Credential selection - * @return true iff the Credential applies + * @param freeSites true iff the objects cached in the site map should be freed. */ - virtual bool matches( - const std::pair& cred, const xmltooling::CredentialCriteria* criteria - ) const; - + virtual void clearDescriptorIndex(bool freeSites=false); + private: typedef std::multimap sitemap_t; typedef std::multimap groupmap_t; - sitemap_t m_sites; - sitemap_t m_sources; - groupmap_t m_groups; + mutable sitemap_t m_sites; + mutable sitemap_t m_sources; + mutable groupmap_t m_groups; mutable xmltooling::Mutex* m_credentialLock; - typedef std::map > > credmap_t; + typedef std::map< const RoleDescriptor*, std::vector > credmap_t; mutable credmap_t m_credentialMap; const credmap_t::mapped_type& resolveCredentials(const RoleDescriptor& role) const; }; + +#if defined (_MSC_VER) + #pragma warning( pop ) + #pragma warning( disable : 4251 ) +#endif }; };