diff OrthancServer/OrthancInitialization.cpp @ 1526:096a8af528c9

fix streams, initialization/finalization of libcurl and openssl
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 12 Aug 2015 10:43:10 +0200
parents 27661b33f624
children 0011cc99443c
line wrap: on
line diff
--- a/OrthancServer/OrthancInitialization.cpp	Tue Aug 11 17:50:38 2015 +0200
+++ b/OrthancServer/OrthancInitialization.cpp	Wed Aug 12 10:43:10 2015 +0200
@@ -49,6 +49,16 @@
 #include <boost/thread.hpp>
 
 
+#if ORTHANC_SSL_ENABLED == 1
+// For OpenSSL initialization and finalization
+#include <openssl/conf.h>
+#include <openssl/engine.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/ssl.h>
+#endif
+
+
 #if ORTHANC_JPEG_ENABLED == 1
 #include <dcmtk/dcmjpeg/djdecode.h>
 #endif
@@ -259,6 +269,18 @@
   {
     boost::mutex::scoped_lock lock(globalMutex_);
 
+#if ORTHANC_SSL_ENABLED == 1
+    // https://wiki.openssl.org/index.php/Library_Initialization
+    SSL_library_init();
+    SSL_load_error_strings();
+    OpenSSL_add_all_algorithms();
+    ERR_load_crypto_strings();
+
+    curl_global_init(CURL_GLOBAL_ALL);
+#else
+    curl_global_init(CURL_GLOBAL_ALL & ~CURL_GLOBAL_SSL);
+#endif
+
     InitializeServerEnumerations();
 
     // Read the user-provided configuration
@@ -298,6 +320,20 @@
     // Unregister JPEG codecs
     DJDecoderRegistration::cleanup();
 #endif
+
+    curl_global_cleanup();
+
+#if ORTHANC_SSL_ENABLED == 1
+    // Finalize OpenSSL
+    // https://wiki.openssl.org/index.php/Library_Initialization#Cleanup
+    FIPS_mode_set(0);
+    ENGINE_cleanup();
+    CONF_modules_unload(1);
+    EVP_cleanup();
+    CRYPTO_cleanup_all_ex_data();
+    ERR_remove_state(0);
+    ERR_free_strings();
+#endif
   }