X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=xmltooling%2Finternal.h;h=6760aceda3a2048754dcf6b5353429b9035e456e;hb=a5e86d37cf40004e6a43a21ab67d26695fa8619c;hp=f4c51bf14c62e0cb892eaec39cfcf23785bd34b2;hpb=9bec6bea2cb7234f52d96c91f6225d5aac18192a;p=shibboleth%2Fcpp-xmltooling.git diff --git a/xmltooling/internal.h b/xmltooling/internal.h index f4c51bf..6760ace 100644 --- a/xmltooling/internal.h +++ b/xmltooling/internal.h @@ -1,5 +1,5 @@ /* - * Copyright 2001-2005 Internet2 + * 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. @@ -47,10 +47,35 @@ #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), m_validatingPool(NULL) { @@ -85,7 +110,37 @@ namespace xmltooling { #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(NULL,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: