X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=xmltooling%2FXMLToolingConfig.h;h=76d81fc0df0ccff0d4107103592e039a6ffd3b54;hb=882d7123a7999da34a478128fcf6efb222923c5f;hp=cd04d7196ee805848e21f90e5ab6a1bc1d9c2f18;hpb=d73e59e9834ff2447334d7a5e576cc4a2cb219f9;p=shibboleth%2Fcpp-xmltooling.git diff --git a/xmltooling/XMLToolingConfig.h b/xmltooling/XMLToolingConfig.h index cd04d71..76d81fc 100644 --- a/xmltooling/XMLToolingConfig.h +++ b/xmltooling/XMLToolingConfig.h @@ -1,23 +1,27 @@ -/* - * 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 +/** + * Licensed to the University Corporation for Advanced Internet + * Development, Inc. (UCAID) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for + * additional information regarding copyright ownership. * - * http://www.apache.org/licenses/LICENSE-2.0 + * UCAID licenses this file to you 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 * - * 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. + * 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. */ /** - * @file XMLToolingConfig.h + * @file xmltooling/XMLToolingConfig.h * - * Library configuration + * Library configuration. */ #ifndef __xmltooling_config_h__ @@ -25,17 +29,10 @@ #include #include -#include +#include -#ifndef XMLTOOLING_NO_XMLSEC -namespace xmltooling { - class XMLTOOL_API CredentialResolver; - class XMLTOOL_API KeyInfoSource; - class XMLTOOL_API KeyResolver; - class XMLTOOL_API TrustEngine; - class XMLTOOL_API XSECCryptoX509CRL; -}; -#endif +#include +#include #if defined (_MSC_VER) #pragma warning( push ) @@ -44,27 +41,46 @@ namespace xmltooling { namespace xmltooling { - class XMLTOOL_API ReplayCache; - class XMLTOOL_API SOAPTransport; - class XMLTOOL_API StorageService; + class XMLTOOL_API Mutex; + class XMLTOOL_API ParserPool; + class XMLTOOL_API PathResolver; class XMLTOOL_API TemplateEngine; class XMLTOOL_API URLEncoder; +#ifndef XMLTOOLING_LITE + class XMLTOOL_API ReplayCache; + class XMLTOOL_API StorageService; +#endif +#ifndef XMLTOOLING_NO_XMLSEC + class XMLTOOL_API CredentialResolver; + class XMLTOOL_API KeyInfoResolver; + class XMLTOOL_API PathValidator; + class XMLTOOL_API TrustEngine; + class XMLTOOL_API XSECCryptoX509CRL; +#endif /** * Singleton object that manages library startup/shutdown.configuration. * - * A locking interface is supplied as a convenience for code that wants to + *

A locking interface is supplied as a convenience for code that wants to * obtain a global system lock, but the actual configuration itself is not * synchronized. */ - class XMLTOOL_API XMLToolingConfig : public Lockable + class XMLTOOL_API XMLToolingConfig : public virtual Lockable { MAKE_NONCOPYABLE(XMLToolingConfig); protected: - XMLToolingConfig() : m_replayCache(NULL), m_templateEngine(NULL), m_urlEncoder(NULL), clock_skew_secs(180) {} - + XMLToolingConfig(); + +#ifndef XMLTOOLING_NO_XMLSEC + /** Global KeyInfoResolver instance. */ + KeyInfoResolver* m_keyInfoResolver; + /** Global ReplayCache instance. */ ReplayCache* m_replayCache; +#endif + + /** Global PathResolver instance. */ + PathResolver* m_pathResolver; /** Global TemplateEngine instance. */ TemplateEngine* m_templateEngine; @@ -73,7 +89,7 @@ namespace xmltooling { URLEncoder* m_urlEncoder; public: - virtual ~XMLToolingConfig() {} + virtual ~XMLToolingConfig(); /** * Returns the global configuration object for the library. @@ -94,42 +110,40 @@ namespace xmltooling { /** * Shuts down library - * - * Each process using the library SHOULD call this function exactly once + *

Each process using the library SHOULD call this function exactly once * before terminating itself */ virtual void term()=0; /** * Loads a shared/dynamic library extension. - * - * Extension libraries are managed using a pair of "C" linkage functions:
+ * + *

Extension libraries are managed using a pair of "C" linkage functions:
* extern "C" int xmltooling_extension_init(void* context);
* extern "C" void xmltooling_extension_term(); - * - * This method is internally synchronized. + * + *

This method is internally synchronized. * * @param path pathname of shared library to load into process * @param context arbitrary data to pass to library initialization hook * @return true iff library was loaded successfully */ - virtual bool load_library(const char* path, void* context=NULL)=0; + virtual bool load_library(const char* path, void* context=nullptr)=0; /** * Configure logging system. - * - * May be called first, before initializing the library. Other calls to it + *

May be called first, before initializing the library. Other calls to it * must be externally synchronized. * * @param config either a logging configuration file, or a level from the set * (DEBUG, INFO, NOTICE, WARN, ERROR, CRIT, ALERT, FATAL, EMERG) * @return true iff configuration was successful */ - virtual bool log_config(const char* config=NULL)=0; + virtual bool log_config(const char* config=nullptr)=0; /** * Obtains a non-validating parser pool. - * Library must be initialized first. + *

Library must be initialized first. * * @return reference to a non-validating parser pool. */ @@ -137,7 +151,7 @@ namespace xmltooling { /** * Obtains a validating parser pool. - * Library must be initialized first. Schema/catalog registration must be + *

Library must be initialized first. Schema/catalog registration must be * externally synchronized. * * @return reference to a validating parser pool. @@ -145,44 +159,81 @@ namespace xmltooling { virtual ParserPool& getValidatingParser() const=0; /** - * Sets the global ReplayCache instance. - * This method must be externally synchronized with any code that uses the object. - * Any previously set object is destroyed. + * Returns a reference to a named mutex. + *

The first access to a given name will create the object. + * + * @param name name of mutex to access + * @return reference to a mutex object + */ + virtual Mutex& getNamedMutex(const char* name)=0; + +#ifndef XMLTOOLING_NO_XMLSEC + /** + * Returns the global KeyInfoResolver instance. * - * @param replayCache new ReplayCache instance to store + * @return global KeyInfoResolver or nullptr */ - void setReplayCache(ReplayCache* replayCache); + const KeyInfoResolver* getKeyInfoResolver() const; /** * Returns the global ReplayCache instance. * - * @return global ReplayCache or NULL + * @return global ReplayCache or nullptr */ - ReplayCache* getReplayCache() const { - return m_replayCache; - } + ReplayCache* getReplayCache() const; /** - * Sets the global URLEncoder instance. - * This method must be externally synchronized with any code that uses the object. + * Sets the global KeyInfoResolver instance. + *

This method must be externally synchronized with any code that uses the object. * Any previously set object is destroyed. * - * @param urlEncoder new URLEncoder instance to store + * @param keyInfoResolver new KeyInfoResolver instance to store */ - void setURLEncoder(URLEncoder* urlEncoder); + void setKeyInfoResolver(KeyInfoResolver* keyInfoResolver); + + /** + * Sets the global ReplayCache instance. + *

This method must be externally synchronized with any code that uses the object. + * Any previously set object is destroyed. + * + * @param replayCache new ReplayCache instance to store + */ + void setReplayCache(ReplayCache* replayCache); +#endif + + /** + * Returns the global PathResolver instance. + * + * @return global PathResolver or nullptr + */ + PathResolver* getPathResolver() const; /** + * Returns the global TemplateEngine instance. + * + * @return global TemplateEngine or nullptr + */ + TemplateEngine* getTemplateEngine() const; + + /** * Returns the global URLEncoder instance. * - * @return global URLEncoder or NULL + * @return global URLEncoder or nullptr + */ + const URLEncoder* getURLEncoder() const; + + /** + * Sets the global PathResolver instance. + *

This method must be externally synchronized with any code that uses the object. + * Any previously set object is destroyed. + * + * @param pathResolver new PathResolver instance to store */ - const URLEncoder* getURLEncoder() const { - return m_urlEncoder; - } + void setPathResolver(PathResolver* pathResolver); /** * Sets the global TemplateEngine instance. - * This method must be externally synchronized with any code that uses the object. + *

This method must be externally synchronized with any code that uses the object. * Any previously set object is destroyed. * * @param templateEngine new TemplateEngine instance to store @@ -190,27 +241,38 @@ namespace xmltooling { void setTemplateEngine(TemplateEngine* templateEngine); /** - * Returns the global TemplateEngine instance. + * Sets the global URLEncoder instance. + *

This method must be externally synchronized with any code that uses the object. + * Any previously set object is destroyed. * - * @return global TemplateEngine or NULL + * @param urlEncoder new URLEncoder instance to store */ - TemplateEngine* getTemplateEngine() const { - return m_templateEngine; - } - + void setURLEncoder(URLEncoder* urlEncoder); + /** + * @deprecated * List of catalog files to load into validating parser pool at initialization time. - * Like other path settings, the separator depends on the platform + *

Like other path settings, the separator depends on the platform * (semicolon on Windows, colon otherwise). */ std::string catalog_path; - + + /** A User-Agent header to include in HTTP client requests. */ + std::string user_agent; + /** * Adjusts any clock comparisons to be more liberal/permissive by the * indicated number of seconds. */ unsigned int clock_skew_secs; +#ifndef XMLTOOLING_LITE + /** + * Manages factories for StorageService plugins. + */ + PluginManager StorageServiceManager; +#endif + #ifndef XMLTOOLING_NO_XMLSEC /** * Returns an X.509 CRL implementation object. @@ -218,30 +280,75 @@ namespace xmltooling { virtual XSECCryptoX509CRL* X509CRL() const=0; /** - * Manages factories for KeyResolver plugins. + * Manages factories for CredentialResolver plugins. */ - PluginManager KeyResolverManager; + PluginManager CredentialResolverManager; /** - * Manages factories for CredentialResolver plugins. + * Manages factories for KeyInfoResolver plugins. */ - PluginManager CredentialResolverManager; + PluginManager KeyInfoResolverManager; + + /** + * Manages factories for PathValidator plugins. + */ + PluginManager PathValidatorManager; /** * Manages factories for TrustEngine plugins. */ - PluginManager TrustEngineManager; -#endif + PluginManager TrustEngineManager; /** - * Manages factories for SOAPTransport plugins. + * Maps an XML Signature/Encryption algorithm identifier to a library-specific + * key algorithm and size for use in resolving credentials. + * + * @param xmlAlgorithm XML Signature/Encryption algorithm identifier + * @return a general key algorithm and key size (or 0 if the size is irrelevant) */ - PluginManager > SOAPTransportManager; + virtual std::pair mapXMLAlgorithmToKeyAlgorithm(const XMLCh* xmlAlgorithm) const=0; /** - * Manages factories for StorageService plugins. + * Types of XML Security algorithms. + */ + enum XMLSecurityAlgorithmType { + ALGTYPE_UNK, + ALGTYPE_DIGEST, + ALGTYPE_SIGN, + ALGTYPE_ENCRYPT, + ALGTYPE_KEYENCRYPT, + ALGTYPE_KEYAGREE + }; + + /** + * Registers an XML Signature/Encryption algorithm identifier against a library-specific + * key algorithm and size for use in resolving credentials. + * + * @param xmlAlgorithm XML Signature/Encryption algorithm identifier + * @param keyAlgorithm a key algorithm + * @param size a key size (or 0 if the size is irrelevant) + * @param type type of algorithm, if known + */ + virtual void registerXMLAlgorithm( + const XMLCh* xmlAlgorithm, const char* keyAlgorithm, unsigned int size=0, XMLSecurityAlgorithmType type=ALGTYPE_UNK + )=0; + + /** + * Checks for implementation support of a particular XML Security algorithm. + * + * @param xmlAlgorithm XML Signature/Encryption algorithm identifier + * @param type type of algorithm, or ALGTYPE_UNK to ignore + * @return true iff the algorithm is supported by the underlying libraries + */ + virtual bool isXMLAlgorithmSupported(const XMLCh* xmlAlgorithm, XMLSecurityAlgorithmType type=ALGTYPE_UNK)=0; +#endif + + /** + * Manages factories for SOAPTransport plugins. + * + *

The factory interface takes a peer name/endpoint pair. */ - PluginManager StorageServiceManager; + PluginManager SOAPTransportManager; }; };