Merge branch '1.x' of ssh://authdev.it.ohio-state.edu/~scantor/git/cpp-xmltooling...
[shibboleth/cpp-xmltooling.git] / xmltooling / internal.h
1 /**
2  * Licensed to the University Corporation for Advanced Internet
3  * Development, Inc. (UCAID) under one or more contributor license
4  * agreements. See the NOTICE file distributed with this work for
5  * additional information regarding copyright ownership.
6  *
7  * UCAID licenses this file to you under the Apache License,
8  * Version 2.0 (the "License"); you may not use this file except
9  * in compliance with the License. You may obtain a copy of the
10  * License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
17  * either express or implied. See the License for the specific
18  * language governing permissions and limitations under the License.
19  */
20
21 /*
22  *  internal.h - internally visible classes
23  */
24
25 #ifndef __xmltooling_internal_h__
26 #define __xmltooling_internal_h__
27
28 #ifdef WIN32
29 # define _CRT_SECURE_NO_DEPRECATE 1
30 # define _CRT_NONSTDC_NO_DEPRECATE 1
31 #endif
32
33 // Export public APIs.
34 #define XMLTOOLING_EXPORTS
35
36 // eventually we might be able to support autoconf via cygwin...
37 #if defined (_MSC_VER) || defined(__BORLANDC__)
38 # include "config_win32.h"
39 #else
40 # include "config.h"
41 #endif
42
43 #include "base.h"
44 #include "XMLToolingConfig.h"
45 #include "util/ParserPool.h"
46
47 #include <vector>
48 #ifndef XMLTOOLING_NO_XMLSEC
49     #include <xsec/framework/XSECProvider.hpp>
50 #endif
51
52 #define XMLTOOLING_LOGCAT "XMLTooling"
53
54 // Macros for path and directory separators.
55 #if defined __CYGWIN32__ && !defined __CYGWIN__
56    /* For backwards compatibility with Cygwin b19 and
57       earlier, we define __CYGWIN__ here, so that
58       we can rely on checking just for that macro. */
59 #  define __CYGWIN__  __CYGWIN32__
60 #endif
61
62 #if defined _WIN32 && !defined __CYGWIN__
63    /* Use Windows separators on all _WIN32 defining
64       environments, except Cygwin. */
65 #  define DIR_SEPARATOR_CHAR        '\\'
66 #  define DIR_SEPARATOR_STR         "\\"
67 #  define PATH_SEPARATOR_CHAR       ';'
68 #  define PATH_SEPARATOR_STR        ";"
69 #endif
70 #ifndef DIR_SEPARATOR_CHAR
71    /* Assume that not having this is an indicator that all
72       are missing. */
73 #  define DIR_SEPARATOR_CHAR        '/'
74 #  define DIR_SEPARATOR_STR         "/"
75 #  define PATH_SEPARATOR_CHAR       ':'
76 #  define PATH_SEPARATOR_STR        ":"
77 #endif /* !DIR_SEPARATOR_CHAR */
78
79 namespace xmltooling {
80     
81     /// @cond OFF
82     class XMLTOOL_DLLLOCAL XMLToolingInternalConfig : public XMLToolingConfig
83     {
84     public:
85         XMLToolingInternalConfig();
86         ~XMLToolingInternalConfig();
87
88         static XMLToolingInternalConfig& getInternalConfig();
89
90         // global per-process setup and shutdown of runtime
91         bool init();
92         void term();
93
94         // global mutex available to library applications
95         Lockable* lock();
96         void unlock();
97
98         // configuration
99         bool load_library(const char* path, void* context=nullptr);
100         bool log_config(const char* config=nullptr);
101
102         // parser access
103         ParserPool& getParser() const {
104             return *m_parserPool;
105         }
106
107         ParserPool& getValidatingParser() const {
108             return *m_validatingPool;
109         }
110
111 #ifndef XMLTOOLING_NO_XMLSEC
112         XSECCryptoX509CRL* X509CRL() const;
113         std::pair<const char*,unsigned int> mapXMLAlgorithmToKeyAlgorithm(const XMLCh* xmlAlgorithm) const;
114         void registerXMLAlgorithm(
115             const XMLCh* xmlAlgorithm, const char* keyAlgorithm, unsigned int size=0, XMLSecurityAlgorithmType type=ALGTYPE_UNK
116             );
117         bool isXMLAlgorithmSupported(const XMLCh* xmlAlgorithm, XMLSecurityAlgorithmType type=ALGTYPE_UNK);
118         void registerXMLAlgorithms();
119
120         XSECProvider* m_xsecProvider;
121     private:
122         typedef std::map<XMLSecurityAlgorithmType, std::map< xstring,std::pair<std::string,unsigned int> > > algmap_t;
123         algmap_t m_algorithmMap;
124 #endif
125
126     private:
127         int m_initCount;
128         Mutex* m_lock;
129         std::vector<void*> m_libhandles;
130         ParserPool* m_parserPool;
131         ParserPool* m_validatingPool;
132     };
133     
134 #ifndef XMLTOOLING_NO_XMLSEC
135     void log_openssl();
136 #endif
137     
138     /// @endcond
139
140 };
141
142 #endif /* __xmltooling_internal_h__ */