X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml2%2Fmetadata%2FAbstractMetadataProvider.h;h=2e5a7cafa7020a8b97371b69c79cab4e96b63c9b;hb=d8a4f024b89272eae00618fc39e6127b6c191edd;hp=3506cac4736e566237343aecfbe94bf97b0777b0;hpb=46ac496b77b850309c07e732ff89fa41c776915d;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/saml2/metadata/AbstractMetadataProvider.h b/saml/saml2/metadata/AbstractMetadataProvider.h index 3506cac..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. */ @@ -65,8 +78,7 @@ namespace opensaml { using MetadataProvider::getEntitiesDescriptor; void emitChangeEvent() const; - const EntityDescriptor* getEntityDescriptor(const char* id, bool requireValidMetadata=true) const; - const EntityDescriptor* getEntityDescriptor(const SAMLArtifact* artifact) 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( @@ -82,35 +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. + * + * @param freeSites true iff the objects cached in the site map should be freed. */ - virtual void clearDescriptorIndex(); + 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< 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 }; };