Fix namespace in SOAP fault child elements.
[shibboleth/xmltooling.git] / xmltooling / XMLToolingConfig.cpp
index e192b75..ee3e2a8 100644 (file)
 
 #include "internal.h"
 #include "exceptions.h"
+#include "logging.h"
 #include "XMLToolingConfig.h"
+#include "encryption/Encryption.h"
 #include "encryption/Encrypter.h"
+#include "io/HTTPRequest.h"
+#include "io/HTTPResponse.h"
 #include "impl/UnknownElement.h"
 #include "security/TrustEngine.h"
 #include "security/OpenSSLCryptoX509CRL.h"
@@ -32,7 +36,6 @@
 #include "signature/Signature.h"
 #include "soap/SOAP.h"
 #include "soap/SOAPTransport.h"
-#include "util/CurlNetAccessor.h"
 #include "util/NDC.h"
 #include "util/ReplayCache.h"
 #include "util/StorageService.h"
 #endif
 
 #include <stdexcept>
-#include <curl/curl.h>
-#include <log4cpp/Category.hh>
-#include <log4cpp/PropertyConfigurator.hh>
-#include <log4cpp/OstreamAppender.hh>
+#if defined(XMLTOOLING_LOG4SHIB)
+# include <log4shib/PropertyConfigurator.hh>
+# include <log4shib/OstreamAppender.hh>
+#elif defined(XMLTOOLING_LOG4CPP)
+# include <log4cpp/PropertyConfigurator.hh>
+# include <log4cpp/OstreamAppender.hh>
+#endif
 #include <xercesc/util/PlatformUtils.hpp>
 #ifndef XMLTOOLING_NO_XMLSEC
-    #include <xsec/framework/XSECProvider.hpp>
-    #include <openssl/err.h>
+# include <curl/curl.h>
+# include <openssl/err.h>
+# include <xsec/framework/XSECProvider.hpp>
 #endif
 
 using namespace soap11;
 using namespace xmlencryption;
 using namespace xmlsignature;
+using namespace xmltooling::logging;
 using namespace xmltooling;
-using namespace log4cpp;
 using namespace std;
 
 DECL_XMLTOOLING_EXCEPTION_FACTORY(XMLParserException,xmltooling);
@@ -81,6 +88,7 @@ DECL_XMLTOOLING_EXCEPTION_FACTORY(IOException,xmltooling);
 
 namespace xmltooling {
     static XMLToolingInternalConfig g_config;
+#ifndef XMLTOOLING_NO_XMLSEC
     static vector<Mutex*> g_openssl_locks;
 
     extern "C" void openssl_locking_callback(int mode,int n,const char *file,int line)
@@ -91,12 +99,13 @@ namespace xmltooling {
             g_openssl_locks[n]->unlock();
     }
     
-    #ifndef WIN32
+ifndef WIN32
     extern "C" unsigned long openssl_thread_id(void)
     {
         return (unsigned long)(pthread_self());
     }
-    #endif
+# endif
+#endif
 }
 
 XMLToolingConfig& XMLToolingConfig::getConfig()
@@ -168,11 +177,13 @@ bool XMLToolingInternalConfig::log_config(const char* config)
     return true;
 }
 
+#ifndef XMLTOOLING_LITE
 void XMLToolingConfig::setReplayCache(ReplayCache* replayCache)
 {
     delete m_replayCache;
     m_replayCache = replayCache;
 }
+#endif
 
 void XMLToolingConfig::setTemplateEngine(TemplateEngine* templateEngine)
 {
@@ -195,16 +206,15 @@ bool XMLToolingInternalConfig::init()
     try {
         log.debug("library initialization started");
 
+#ifndef XMLTOOLING_NO_XMLSEC
         if (curl_global_init(CURL_GLOBAL_ALL)) {
             log.fatal("failed to initialize libcurl, OpenSSL, or Winsock");
             return false;
         }
         log.debug("libcurl %s initialization complete", LIBCURL_VERSION);
+#endif
 
         XMLPlatformUtils::Initialize();
-        auto_ptr<XMLNetAccessor> curler(new CurlNetAccessor());
-        delete XMLPlatformUtils::fgNetAccessor;
-        XMLPlatformUtils::fgNetAccessor = curler.release();
         log.debug("Xerces initialization complete");
 
 #ifndef XMLTOOLING_NO_XMLSEC
@@ -258,13 +268,13 @@ bool XMLToolingInternalConfig::init()
         registerCredentialResolvers();
         registerTrustEngines();
         registerXMLAlgorithms();
-#endif
         registerSOAPTransports();
         initSOAPTransports();
         registerStorageServices();
+        m_keyInfoResolver = KeyInfoResolverManager.newPlugin(INLINE_KEYINFO_RESOLVER,NULL);
+#endif
 
         m_urlEncoder = new URLEncoder();
-        m_keyInfoResolver = KeyInfoResolverManager.newPlugin(INLINE_KEYINFO_RESOLVER,NULL);
         
         // Register xml:id as an ID attribute.        
         static const XMLCh xmlid[] = UNICODE_LITERAL_2(i,d);
@@ -272,16 +282,20 @@ bool XMLToolingInternalConfig::init()
     }
     catch (const xercesc::XMLException&) {
         log.fatal("caught exception while initializing Xerces");
+#ifndef XMLTOOLING_NO_XMLSEC
         curl_global_cleanup();
+#endif
         return false;
     }
 
+#ifndef XMLTOOLING_NO_XMLSEC
     // Set up OpenSSL locking.
     for (int i=0; i<CRYPTO_num_locks(); i++)
         g_openssl_locks.push_back(Mutex::create());
     CRYPTO_set_locking_callback(openssl_locking_callback);
-#ifndef WIN32
+# ifndef WIN32
     CRYPTO_set_id_callback(openssl_thread_id);
+# endif
 #endif
 
     log.info("library initialization complete");
@@ -290,31 +304,33 @@ bool XMLToolingInternalConfig::init()
 
 void XMLToolingInternalConfig::term()
 {
+#ifndef XMLTOOLING_NO_XMLSEC
     CRYPTO_set_locking_callback(NULL);
     for_each(g_openssl_locks.begin(), g_openssl_locks.end(), xmltooling::cleanup<Mutex>());
     g_openssl_locks.clear();
+#endif
 
     SchemaValidators.destroyValidators();
     XMLObjectBuilder::destroyBuilders();
     XMLToolingException::deregisterFactories();
     AttributeExtensibleXMLObject::deregisterIDAttributes();
 
+#ifndef XMLTOOLING_NO_XMLSEC
     StorageServiceManager.deregisterFactories();
     termSOAPTransports();
     SOAPTransportManager.deregisterFactories();
-#ifndef XMLTOOLING_NO_XMLSEC
     TrustEngineManager.deregisterFactories();
     CredentialResolverManager.deregisterFactories();
     KeyInfoResolverManager.deregisterFactories();
     m_algorithmMap.clear();
-#endif
 
     delete m_keyInfoResolver;
     m_keyInfoResolver = NULL;
 
     delete m_replayCache;
     m_replayCache = NULL;
-    
+#endif
+
     delete m_templateEngine;
     m_templateEngine = NULL;
 
@@ -353,9 +369,10 @@ void XMLToolingInternalConfig::term()
     m_lock=NULL;
     XMLPlatformUtils::Terminate();
 
+#ifndef XMLTOOLING_NO_XMLSEC
     curl_global_cleanup();
-    
- #ifdef _DEBUG
+#endif   
+#ifdef _DEBUG
     xmltooling::NDC ndc("term");
 #endif
    Category::getInstance(XMLTOOLING_LOGCAT".XMLToolingConfig").info("library shutdown complete");
@@ -458,9 +475,9 @@ void xmltooling::log_openssl()
     unsigned long code=ERR_get_error_line_data(&file,&line,&data,&flags);
     while (code) {
         Category& log=Category::getInstance("OpenSSL");
-        log.errorStream() << "error code: " << code << " in " << file << ", line " << line << CategoryStream::ENDLINE;
+        log.errorStream() << "error code: " << code << " in " << file << ", line " << line << logging::eol;
         if (data && (flags & ERR_TXT_STRING))
-            log.errorStream() << "error data: " << data << CategoryStream::ENDLINE;
+            log.errorStream() << "error data: " << data << logging::eol;
         code=ERR_get_error_line_data(&file,&line,&data,&flags);
     }
 }