X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=xmltooling%2Finternal.h;h=189617ebdbaa1e6e0d277c33805151e7083f327c;hb=a0d768778a8f5f539b909baf5b115e70ea765f0f;hp=0be6bdb2a9a46fe7a27d702a0da6c43f808b94e6;hpb=a039baceeda19f0e5c3269332a668763c0889e90;p=shibboleth%2Fcpp-xmltooling.git diff --git a/xmltooling/internal.h b/xmltooling/internal.h index 0be6bdb..189617e 100644 --- a/xmltooling/internal.h +++ b/xmltooling/internal.h @@ -1,5 +1,5 @@ /* - * Copyright 2001-2005 Internet2 + * Copyright 2001-2010 Internet2 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,6 +26,9 @@ # define _CRT_NONSTDC_NO_DEPRECATE 1 #endif +// Export public APIs. +#define XMLTOOLING_EXPORTS + // eventually we might be able to support autoconf via cygwin... #if defined (_MSC_VER) || defined(__BORLANDC__) # include "config_win32.h" @@ -44,15 +47,40 @@ #define XMLTOOLING_LOGCAT "XMLTooling" +// Macros for path and directory separators. +#if defined __CYGWIN32__ && !defined __CYGWIN__ + /* For backwards compatibility with Cygwin b19 and + earlier, we define __CYGWIN__ here, so that + we can rely on checking just for that macro. */ +# define __CYGWIN__ __CYGWIN32__ +#endif + +#if defined _WIN32 && !defined __CYGWIN__ + /* Use Windows separators on all _WIN32 defining + environments, except Cygwin. */ +# define DIR_SEPARATOR_CHAR '\\' +# define DIR_SEPARATOR_STR "\\" +# define PATH_SEPARATOR_CHAR ';' +# define PATH_SEPARATOR_STR ";" +#endif +#ifndef DIR_SEPARATOR_CHAR + /* Assume that not having this is an indicator that all + are missing. */ +# define DIR_SEPARATOR_CHAR '/' +# define DIR_SEPARATOR_STR "/" +# define PATH_SEPARATOR_CHAR ':' +# define PATH_SEPARATOR_STR ":" +#endif /* !DIR_SEPARATOR_CHAR */ + namespace xmltooling { /// @cond OFF - class XMLToolingInternalConfig : public xmltooling::XMLToolingConfig + class XMLToolingInternalConfig : public XMLToolingConfig { public: - XMLToolingInternalConfig() : m_lock(NULL), m_parserPool(NULL) { + XMLToolingInternalConfig() : m_lock(nullptr), m_parserPool(nullptr), m_validatingPool(nullptr) { #ifndef XMLTOOLING_NO_XMLSEC - m_xsecProvider=NULL; + m_xsecProvider=nullptr; #endif } @@ -63,24 +91,69 @@ namespace xmltooling { void term(); // global mutex available to library applications - xmltooling::ILockable& lock(); + Lockable* lock(); void unlock(); // configuration - bool load_library(const char* path, void* context=NULL); - bool log_config(const char* config=NULL); + bool load_library(const char* path, void* context=nullptr); + bool log_config(const char* config=nullptr); + + // parser access + ParserPool& getParser() const { + return *m_parserPool; + } + + ParserPool& getValidatingParser() const { + return *m_validatingPool; + } - // internal parser pool - xmltooling::ParserPool* m_parserPool; #ifndef XMLTOOLING_NO_XMLSEC + XSECCryptoX509CRL* X509CRL() const; + + std::pair mapXMLAlgorithmToKeyAlgorithm(const XMLCh* xmlAlgorithm) const { +# ifdef HAVE_GOOD_STL + algmap_t::const_iterator i = m_algorithmMap.find(xmlAlgorithm); +# else + auto_ptr_char alg(xmlAlgorithm); + algmap_t::const_iterator i = m_algorithmMap.find(alg.get()); +# endif + if (i==m_algorithmMap.end()) + return std::pair(nullptr,0); + return std::make_pair(i->second.first.c_str(), i->second.second); + } + + void registerXMLAlgorithm(const XMLCh* xmlAlgorithm, const char* keyAlgorithm, unsigned int size=0) { +# ifdef HAVE_GOOD_STL + m_algorithmMap[xmlAlgorithm] = std::pair(keyAlgorithm,size); +# else + auto_ptr_char alg(xmlAlgorithm); + m_algorithmMap[alg.get()] = std::pair(keyAlgorithm,size); +# endif + } + + void registerXMLAlgorithms(); + XSECProvider* m_xsecProvider; + private: +# ifdef HAVE_GOOD_STL + typedef std::map< xstring,std::pair > algmap_t; +# else + typedef std::map< std::string,std::pair > algmap_t; +# endif + algmap_t m_algorithmMap; #endif private: std::vector m_libhandles; void* m_lock; - //PlugManager m_plugMgr; + ParserPool* m_parserPool; + ParserPool* m_validatingPool; }; + +#ifndef XMLTOOLING_NO_XMLSEC + void log_openssl(); +#endif + /// @endcond };