return NULL;
}
+const IEntityDescriptor* Metadata::lookup(const char* id)
+{
+ if (m_mapper) {
+ m_mapper->unlock();
+ m_mapper=NULL;
+ }
+ const IEntityDescriptor* ret=NULL;
+ m_metadatas.reset();
+ while (m_metadatas.hasNext()) {
+ IMetadata* i=m_metadatas.next();
+ i->lock();
+ if (ret=i->lookup(id)) {
+ m_mapper=i;
+ return ret;
+ }
+ i->unlock();
+ }
+ return NULL;
+}
+
const IEntityDescriptor* Metadata::lookup(const SAMLArtifact* artifact)
{
if (m_mapper) {
struct SHIB_EXPORTS IMetadata : public virtual saml::ILockable, public virtual saml::IPlugIn
{
+ virtual const IEntityDescriptor* lookup(const char* id) const=0;
virtual const IEntityDescriptor* lookup(const XMLCh* id) const=0;
virtual const IEntityDescriptor* lookup(const saml::SAMLArtifact* artifact) const=0;
virtual ~IMetadata() {}
Metadata(const saml::Iterator<IMetadata*>& metadatas) : m_metadatas(metadatas), m_mapper(NULL) {}
~Metadata();
- const IEntityDescriptor* lookup(const XMLCh* providerId);
+ const IEntityDescriptor* lookup(const char* id);
+ const IEntityDescriptor* lookup(const XMLCh* id);
const IEntityDescriptor* lookup(const saml::SAMLArtifact* artifact);
private:
XMLMetadata(const DOMElement* e) : ReloadableXMLFile(e) {}
~XMLMetadata() {}
+ const IEntityDescriptor* lookup(const char* providerId) const;
const IEntityDescriptor* lookup(const XMLCh* providerId) const;
const IEntityDescriptor* lookup(const saml::SAMLArtifact* artifact) const;
delete m_rootProvider;
}
-const IEntityDescriptor* XMLMetadata::lookup(const XMLCh* providerId) const
+const IEntityDescriptor* XMLMetadata::lookup(const char* providerId) const
{
XMLMetadataImpl* impl=dynamic_cast<XMLMetadataImpl*>(getImplementation());
- auto_ptr_char temp(providerId);
pair<XMLMetadataImpl::sitemap_t::const_iterator,XMLMetadataImpl::sitemap_t::const_iterator> range=
- impl->m_sites.equal_range(temp.get());
+ impl->m_sites.equal_range(providerId);
time_t now=time(NULL);
for (XMLMetadataImpl::sitemap_t::const_iterator i=range.first; i!=range.second; i++)
return NULL;
}
+const IEntityDescriptor* XMLMetadata::lookup(const XMLCh* providerId) const
+{
+ auto_ptr_char temp(providerId);
+ return lookup(temp.get());
+}
+
const IEntityDescriptor* XMLMetadata::lookup(const SAMLArtifact* artifact) const
{
time_t now=time(NULL);