saml2/metadata/impl/MetadataImpl.cpp \
saml2/metadata/impl/MetadataProvider.cpp \
saml2/metadata/impl/MetadataSchemaValidators.cpp \
- saml2/metadata/impl/ObservableMetadataProvider.cpp \
saml2/metadata/impl/SignatureMetadataFilter.cpp \
saml2/metadata/impl/WhitelistMetadataFilter.cpp \
saml2/metadata/impl/XMLMetadataProvider.cpp \
* @param peer peer to send message to, expressed in metadata criteria terms
* @param endpoint URL of endpoint to recieve message
*/
- void send(const soap11::Envelope& env, saml2md::MetadataCredentialCriteria& peer, const char* endpoint);
+ virtual void send(const soap11::Envelope& env, saml2md::MetadataCredentialCriteria& peer, const char* endpoint);
/**
* Override applies SecurityPolicy to envelope before returning it.
>\r
</File>\r
<File\r
- RelativePath=".\saml2\metadata\impl\ObservableMetadataProvider.cpp"\r
- >\r
- </File>\r
- <File\r
RelativePath=".\saml2\metadata\impl\SignatureMetadataFilter.cpp"\r
>\r
</File>\r
const EntitiesDescriptor* getEntitiesDescriptor(const char* name, bool requireValidMetadata=true) const;
const EntityDescriptor* getEntityDescriptor(const char* id, bool requireValidMetadata=true) const;
const EntityDescriptor* getEntityDescriptor(const SAMLArtifact* artifact) const;
- void onEvent(MetadataProvider& provider);
+ void onEvent(const MetadataProvider& provider) const;
const xmltooling::Credential* resolve(const xmltooling::CredentialCriteria* criteria=NULL) const;
std::vector<const xmltooling::Credential*>::size_type resolve(
#ifndef __saml2_metadataprov_h__
#define __saml2_metadataprov_h__
+#include <saml/base.h>
+#include <xmltooling/exceptions.h>
#include <xmltooling/XMLObject.h>
#include <xmltooling/security/CredentialResolver.h>
#define __saml2_obsmetadataprov_h__
#include <saml/saml2/metadata/MetadataProvider.h>
+#include <xmltooling/util/Threads.h>
namespace opensaml {
*
* @param e DOM to supply configuration for provider
*/
- ObservableMetadataProvider(const DOMElement* e=NULL) : MetadataProvider(e) {}
+ ObservableMetadataProvider(const DOMElement* e=NULL)
+ : MetadataProvider(e), m_observerLock(xmltooling::Mutex::create()) {
+ }
/**
* Convenience method for notifying every registered Observer of an event.
*/
- virtual void emitChangeEvent();
+ virtual void emitChangeEvent() const {
+ xmltooling::Lock lock(m_observerLock);
+ for (std::vector<const Observer*>::const_iterator i=m_observers.begin(); i!=m_observers.end(); i++) {
+ (*i)->onEvent(*this);
+ }
+ }
public:
- /**
- * Destructor will delete any installed filters.
- */
- virtual ~ObservableMetadataProvider();
+ virtual ~ObservableMetadataProvider() {
+ delete m_observerLock;
+ }
/**
* An observer of metadata provider changes.
*
* @param provider the provider being observed
*/
- virtual void onEvent(MetadataProvider& provider)=0;
+ virtual void onEvent(const MetadataProvider& provider) const=0;
};
/**
*
* @param newObserver metadata observer to add
*/
- virtual void addObserver(Observer* newObserver) {
+ virtual void addObserver(const Observer* newObserver) const {
+ xmltooling::Lock lock(m_observerLock);
m_observers.push_back(newObserver);
}
/**
- * Removes a metadata observer. The caller must delete the observer if necessary.
+ * Removes a metadata observer.
*
* @param oldObserver metadata observer to remove
* @return the old observer
*/
- virtual Observer* removeObserver(Observer* oldObserver) {
- for (std::vector<Observer*>::iterator i=m_observers.begin(); i!=m_observers.end(); i++) {
+ virtual const Observer* removeObserver(const Observer* oldObserver) const {
+ xmltooling::Lock lock(m_observerLock);
+ for (std::vector<const Observer*>::iterator i=m_observers.begin(); i!=m_observers.end(); i++) {
if (oldObserver==(*i)) {
m_observers.erase(i);
return oldObserver;
}
private:
- std::vector<Observer*> m_observers;
+ mutable xmltooling::Mutex* m_observerLock;
+ mutable std::vector<const Observer*> m_observers;
};
#if defined (_MSC_VER)
for_each(m_providers.begin(), m_providers.end(), xmltooling::cleanup<MetadataProvider>());
}
-void ChainingMetadataProvider::onEvent(MetadataProvider& provider)
+void ChainingMetadataProvider::onEvent(const MetadataProvider& provider) const
{
emitChangeEvent();
}
+++ /dev/null
-/*
- * Copyright 2001-2007 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
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * ObservableMetadataProvider.cpp
- *
- * A metadata provider that notifies interested parties of changes.
- */
-
-#include "internal.h"
-#include "saml2/metadata/ObservableMetadataProvider.h"
-
-using namespace opensaml::saml2md;
-using namespace std;
-
-ObservableMetadataProvider::~ObservableMetadataProvider()
-{
- for_each(m_observers.begin(),m_observers.end(),xmltooling::cleanup<Observer>());
-}
-
-void ObservableMetadataProvider::emitChangeEvent()
-{
- for (std::vector<Observer*>::const_iterator i=m_observers.begin(); i!=m_observers.end(); i++) {
- (*i)->onEvent(*this);
- }
-}
};
PKIXValidationInfoIterator* getPKIXValidationInfoIterator(
- const CredentialResolver& credResolver, CredentialCriteria* criteria=NULL, const KeyInfoResolver* keyInfoResolver=NULL
+ const CredentialResolver& credResolver, CredentialCriteria* criteria=NULL
) const {
dynamic_cast<const MetadataCredentialCriteria*>(criteria);
return new SampleIterator();