Mercurial > hg > orthanc-dicomweb
changeset 172:14e598d80846
sync
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 29 Nov 2016 13:21:53 +0100 |
parents | 1cdee1170a11 |
children | 2144ad176183 |
files | Orthanc/Core/Toolbox.cpp Orthanc/Core/Toolbox.h Orthanc/Plugins/Samples/Common/OrthancPluginCppWrapper.cpp Orthanc/Plugins/Samples/Common/OrthancPluginCppWrapper.h Orthanc/Resources/CMake/BoostConfiguration.cmake Orthanc/Resources/CMake/Compiler.cmake Orthanc/Resources/CMake/GoogleTestConfiguration.cmake Orthanc/Resources/CMake/JsonCppConfiguration.cmake Orthanc/Resources/CMake/PugixmlConfiguration.cmake Orthanc/Resources/CMake/ZlibConfiguration.cmake |
diffstat | 10 files changed, 110 insertions(+), 82 deletions(-) [+] |
line wrap: on
line diff
--- a/Orthanc/Core/Toolbox.cpp Tue Nov 22 11:25:23 2016 +0100 +++ b/Orthanc/Core/Toolbox.cpp Tue Nov 29 13:21:53 2016 +0100 @@ -77,18 +77,9 @@ #endif - -// Inclusions for UUID -// http://stackoverflow.com/a/1626302 - -extern "C" -{ -#ifdef WIN32 -# include <rpc.h> -#else -# include <uuid/uuid.h> +#if defined(_WIN32) +# include <windows.h> // For ::Sleep #endif -} #if ORTHANC_ENABLE_PUGIXML == 1 @@ -1226,28 +1217,6 @@ } - std::string Toolbox::GenerateUuid() - { -#ifdef WIN32 - UUID uuid; - UuidCreate ( &uuid ); - - unsigned char * str; - UuidToStringA ( &uuid, &str ); - - std::string s( ( char* ) str ); - - RpcStringFreeA ( &str ); -#else - uuid_t uuid; - uuid_generate_random ( uuid ); - char s[37]; - uuid_unparse ( uuid, s ); -#endif - return s; - } - - bool Toolbox::IsUuid(const std::string& str) { if (str.size() != 36)
--- a/Orthanc/Core/Toolbox.h Tue Nov 22 11:25:23 2016 +0100 +++ b/Orthanc/Core/Toolbox.h Tue Nov 29 13:21:53 2016 +0100 @@ -204,8 +204,6 @@ const std::string& key, unsigned int defaultValue); - std::string GenerateUuid(); - bool IsUuid(const std::string& str); bool StartsWithUuid(const std::string& str);
--- a/Orthanc/Plugins/Samples/Common/OrthancPluginCppWrapper.cpp Tue Nov 22 11:25:23 2016 +0100 +++ b/Orthanc/Plugins/Samples/Common/OrthancPluginCppWrapper.cpp Tue Nov 29 13:21:53 2016 +0100 @@ -38,9 +38,10 @@ namespace OrthancPlugins { - const char* PluginException::GetErrorDescription(OrthancPluginContext* context) const + const char* GetErrorDescription(OrthancPluginContext* context, + OrthancPluginErrorCode code) { - const char* description = OrthancPluginGetErrorDescription(context, code_); + const char* description = OrthancPluginGetErrorDescription(context, code); if (description) { return description; @@ -52,13 +53,15 @@ } +#if HAS_ORTHANC_EXCEPTION == 0 void PluginException::Check(OrthancPluginErrorCode code) { if (code != OrthancPluginErrorCode_Success) { - throw PluginException(code); + ORTHANC_PLUGINS_THROW_EXCEPTION(code); } } +#endif void MemoryBuffer::Check(OrthancPluginErrorCode code) @@ -68,7 +71,7 @@ // Prevent using garbage information buffer_.data = NULL; buffer_.size = 0; - throw PluginException(code); + ORTHANC_PLUGINS_THROW_EXCEPTION(code); } } @@ -122,7 +125,7 @@ if (buffer_.data == NULL || buffer_.size == 0) { - throw PluginException(OrthancPluginErrorCode_InternalError); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_InternalError); } const char* tmp = reinterpret_cast<const char*>(buffer_.data); @@ -131,7 +134,7 @@ if (!reader.parse(tmp, tmp + buffer_.size, target)) { OrthancPluginLogError(context_, "Cannot convert some memory buffer to JSON"); - throw PluginException(OrthancPluginErrorCode_BadFileFormat); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_BadFileFormat); } } @@ -163,7 +166,7 @@ } else { - throw PluginException(error); + ORTHANC_PLUGINS_THROW_EXCEPTION(error); } } @@ -197,7 +200,7 @@ } else { - throw PluginException(error); + ORTHANC_PLUGINS_THROW_EXCEPTION(error); } } @@ -231,7 +234,7 @@ } else { - throw PluginException(error); + ORTHANC_PLUGINS_THROW_EXCEPTION(error); } } @@ -309,14 +312,14 @@ if (str_ == NULL) { OrthancPluginLogError(context_, "Cannot convert an empty memory buffer to JSON"); - throw PluginException(OrthancPluginErrorCode_InternalError); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_InternalError); } Json::Reader reader; if (!reader.parse(str_, target)) { OrthancPluginLogError(context_, "Cannot convert some memory buffer to JSON"); - throw PluginException(OrthancPluginErrorCode_BadFileFormat); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_BadFileFormat); } } @@ -329,7 +332,7 @@ if (str.GetContent() == NULL) { OrthancPluginLogError(context, "Cannot access the Orthanc configuration"); - throw PluginException(OrthancPluginErrorCode_InternalError); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_InternalError); } str.ToJson(configuration_); @@ -337,7 +340,7 @@ if (configuration_.type() != Json::objectValue) { OrthancPluginLogError(context, "Unable to read the Orthanc configuration"); - throw PluginException(OrthancPluginErrorCode_InternalError); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_InternalError); } } @@ -346,7 +349,7 @@ { if (context_ == NULL) { - throw PluginException(OrthancPluginErrorCode_Plugin); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_Plugin); } else { @@ -368,6 +371,15 @@ } + bool OrthancConfiguration::IsSection(const std::string& key) const + { + assert(configuration_.type() == Json::objectValue); + + return (configuration_.isMember(key) && + configuration_[key].type() == Json::objectValue); + } + + void OrthancConfiguration::GetSection(OrthancConfiguration& target, const std::string& key) const { @@ -390,7 +402,7 @@ OrthancPluginLogError(context_, s.c_str()); } - throw PluginException(OrthancPluginErrorCode_BadFileFormat); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_BadFileFormat); } target.configuration_ = configuration_[key]; @@ -416,7 +428,7 @@ OrthancPluginLogError(context_, s.c_str()); } - throw PluginException(OrthancPluginErrorCode_BadFileFormat); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_BadFileFormat); } target = configuration_[key].asString(); @@ -451,7 +463,7 @@ OrthancPluginLogError(context_, s.c_str()); } - throw PluginException(OrthancPluginErrorCode_BadFileFormat); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_BadFileFormat); } } @@ -473,7 +485,7 @@ OrthancPluginLogError(context_, s.c_str()); } - throw PluginException(OrthancPluginErrorCode_BadFileFormat); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_BadFileFormat); } else { @@ -501,7 +513,7 @@ OrthancPluginLogError(context_, s.c_str()); } - throw PluginException(OrthancPluginErrorCode_BadFileFormat); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_BadFileFormat); } target = configuration_[key].asBool(); @@ -540,7 +552,7 @@ OrthancPluginLogError(context_, s.c_str()); } - throw PluginException(OrthancPluginErrorCode_BadFileFormat); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_BadFileFormat); } } @@ -635,7 +647,7 @@ if (image_ == NULL) { OrthancPluginLogError(context_, "Trying to access a NULL image"); - throw PluginException(OrthancPluginErrorCode_ParameterOutOfRange); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_ParameterOutOfRange); } } @@ -646,7 +658,7 @@ { if (context == NULL) { - throw PluginException(OrthancPluginErrorCode_ParameterOutOfRange); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_ParameterOutOfRange); } } @@ -658,7 +670,7 @@ { if (context == NULL) { - throw PluginException(OrthancPluginErrorCode_ParameterOutOfRange); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_ParameterOutOfRange); } } @@ -671,7 +683,7 @@ { if (context == NULL) { - throw PluginException(OrthancPluginErrorCode_ParameterOutOfRange); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_ParameterOutOfRange); } else { @@ -688,7 +700,7 @@ if (image_ == NULL) { OrthancPluginLogError(context_, "Cannot uncompress a PNG image"); - throw PluginException(OrthancPluginErrorCode_ParameterOutOfRange); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_ParameterOutOfRange); } } @@ -701,7 +713,7 @@ if (image_ == NULL) { OrthancPluginLogError(context_, "Cannot uncompress a JPEG image"); - throw PluginException(OrthancPluginErrorCode_ParameterOutOfRange); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_ParameterOutOfRange); } } @@ -715,7 +727,7 @@ if (image_ == NULL) { OrthancPluginLogError(context_, "Cannot uncompress a DICOM image"); - throw PluginException(OrthancPluginErrorCode_ParameterOutOfRange); + ORTHANC_PLUGINS_THROW_EXCEPTION(OrthancPluginErrorCode_ParameterOutOfRange); } } @@ -903,7 +915,7 @@ } else { - throw PluginException(error); + ORTHANC_PLUGINS_THROW_EXCEPTION(error); } }
--- a/Orthanc/Plugins/Samples/Common/OrthancPluginCppWrapper.h Tue Nov 22 11:25:23 2016 +0100 +++ b/Orthanc/Plugins/Samples/Common/OrthancPluginCppWrapper.h Tue Nov 29 13:21:53 2016 +0100 @@ -37,18 +37,30 @@ #include <boost/lexical_cast.hpp> #include <json/value.h> +#if !defined(HAS_ORTHANC_EXCEPTION) +# error The macro HAS_ORTHANC_EXCEPTION must be defined +#endif + + #if HAS_ORTHANC_EXCEPTION == 1 # include "../../../Core/OrthancException.h" +# define ORTHANC_PLUGINS_THROW_EXCEPTION(code) throw ::Orthanc::OrthancException(static_cast<Orthanc::ErrorCode>(code)) +#else +# define ORTHANC_PLUGINS_THROW_EXCEPTION(code) throw ::OrthancPlugins::PluginException(code) #endif + namespace OrthancPlugins { typedef void (*RestCallback) (OrthancPluginRestOutput* output, const char* url, const OrthancPluginHttpRequest* request); + const char* GetErrorDescription(OrthancPluginContext* context, + OrthancPluginErrorCode code); +#if HAS_ORTHANC_EXCEPTION == 0 class PluginException { private: @@ -64,10 +76,14 @@ return code_; } - const char* GetErrorDescription(OrthancPluginContext* context) const; + const char* What(OrthancPluginContext* context) const + { + return ::OrthancPlugins::GetErrorDescription(context, code_); + } static void Check(OrthancPluginErrorCode code); }; +#endif class MemoryBuffer : public boost::noncopyable @@ -191,7 +207,7 @@ { private: OrthancPluginContext* context_; - Json::Value configuration_; + Json::Value configuration_; // Necessarily a Json::objectValue std::string path_; std::string GetPath(const std::string& key) const; @@ -210,6 +226,8 @@ return configuration_; } + bool IsSection(const std::string& key) const; + void GetSection(OrthancConfiguration& target, const std::string& key) const; @@ -357,10 +375,6 @@ const std::string& uri, bool applyPlugins); - bool RestApiDelete(OrthancPluginContext* context, - const std::string& uri, - bool applyPlugins); - inline void LogError(OrthancPluginContext* context, const std::string& message) { @@ -406,15 +420,16 @@ Callback(output, url, request); return OrthancPluginErrorCode_Success; } - catch (OrthancPlugins::PluginException& e) - { - return e.GetErrorCode(); - } #if HAS_ORTHANC_EXCEPTION == 1 catch (Orthanc::OrthancException& e) { return static_cast<OrthancPluginErrorCode>(e.GetErrorCode()); } +#else + catch (OrthancPlugins::PluginException& e) + { + return e.GetErrorCode(); + } #endif catch (boost::bad_lexical_cast&) {
--- a/Orthanc/Resources/CMake/BoostConfiguration.cmake Tue Nov 22 11:25:23 2016 +0100 +++ b/Orthanc/Resources/CMake/BoostConfiguration.cmake Tue Nov 29 13:21:53 2016 +0100 @@ -43,7 +43,7 @@ set(BOOST_NAME boost_1_60_0) set(BOOST_BCP_SUFFIX bcpdigest-1.0.1) set(BOOST_MD5 "a789f8ec2056ad1c2d5f0cb64687cc7b") - set(BOOST_URL "http://www.montefiore.ulg.ac.be/~jodogne/Orthanc/ThirdPartyDownloads/${BOOST_NAME}_${BOOST_BCP_SUFFIX}.tar.gz") + set(BOOST_URL "http://www.orthanc-server.com/downloads/third-party/${BOOST_NAME}_${BOOST_BCP_SUFFIX}.tar.gz") set(BOOST_FILESYSTEM_SOURCES_DIR "${BOOST_NAME}/libs/filesystem/src") set(BOOST_SOURCES_DIR ${CMAKE_BINARY_DIR}/${BOOST_NAME})
--- a/Orthanc/Resources/CMake/Compiler.cmake Tue Nov 22 11:25:23 2016 +0100 +++ b/Orthanc/Resources/CMake/Compiler.cmake Tue Nov 29 13:21:53 2016 +0100 @@ -164,6 +164,23 @@ endif() +if (DEFINED ENABLE_PROFILING AND ENABLE_PROFILING) + if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug") + message(WARNING "Enabling profiling on a non-debug build will not produce full information") + endif() + + if (CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -pg") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg") + else() + message(FATAL_ERROR "Don't know how to enable profiling on your configuration") + endif() +endif() + + if (STATIC_BUILD) add_definitions(-DORTHANC_STATIC=1) else()
--- a/Orthanc/Resources/CMake/GoogleTestConfiguration.cmake Tue Nov 22 11:25:23 2016 +0100 +++ b/Orthanc/Resources/CMake/GoogleTestConfiguration.cmake Tue Nov 29 13:21:53 2016 +0100 @@ -1,15 +1,32 @@ if (USE_GTEST_DEBIAN_SOURCE_PACKAGE) - set(GTEST_SOURCES /usr/src/gtest/src/gtest-all.cc) - include_directories(/usr/src/gtest) + find_path(GTEST_DEBIAN_SOURCES_DIR + NAMES src/gtest-all.cc + PATHS + /usr/src/gtest + /usr/src/googletest/googletest + PATH_SUFFIXES src + ) - if (NOT EXISTS /usr/include/gtest/gtest.h OR - NOT EXISTS ${GTEST_SOURCES}) + find_path(GTEST_DEBIAN_INCLUDE_DIR + NAMES gtest.h + PATHS + /usr/include/gtest + ) + + message("Path to the Debian Google Test sources: ${GTEST_DEBIAN_SOURCES_DIR}") + message("Path to the Debian Google Test includes: ${GTEST_DEBIAN_INCLUDE_DIR}") + + set(GTEST_SOURCES ${GTEST_DEBIAN_SOURCES_DIR}/src/gtest-all.cc) + include_directories(${GTEST_DEBIAN_SOURCES_DIR}) + + if (NOT EXISTS ${GTEST_SOURCES} OR + NOT EXISTS ${GTEST_DEBIAN_INCLUDE_DIR}/gtest.h) message(FATAL_ERROR "Please install the libgtest-dev package") endif() elseif (STATIC_BUILD OR NOT USE_SYSTEM_GOOGLE_TEST) set(GTEST_SOURCES_DIR ${CMAKE_BINARY_DIR}/gtest-1.7.0) - set(GTEST_URL "http://www.montefiore.ulg.ac.be/~jodogne/Orthanc/ThirdPartyDownloads/gtest-1.7.0.zip") + set(GTEST_URL "http://www.orthanc-server.com/downloads/third-party/gtest-1.7.0.zip") set(GTEST_MD5 "2d6ec8ccdf5c46b05ba54a9fd1d130d7") DownloadPackage(${GTEST_MD5} ${GTEST_URL} "${GTEST_SOURCES_DIR}")
--- a/Orthanc/Resources/CMake/JsonCppConfiguration.cmake Tue Nov 22 11:25:23 2016 +0100 +++ b/Orthanc/Resources/CMake/JsonCppConfiguration.cmake Tue Nov 29 13:21:53 2016 +0100 @@ -1,6 +1,6 @@ if (STATIC_BUILD OR NOT USE_SYSTEM_JSONCPP) set(JSONCPP_SOURCES_DIR ${CMAKE_BINARY_DIR}/jsoncpp-0.10.5) - set(JSONCPP_URL "http://www.montefiore.ulg.ac.be/~jodogne/Orthanc/ThirdPartyDownloads/jsoncpp-0.10.5.tar.gz") + set(JSONCPP_URL "http://www.orthanc-server.com/downloads/third-party/jsoncpp-0.10.5.tar.gz") set(JSONCPP_MD5 "db146bac5a126ded9bd728ab7b61ed6b") DownloadPackage(${JSONCPP_MD5} ${JSONCPP_URL} "${JSONCPP_SOURCES_DIR}")
--- a/Orthanc/Resources/CMake/PugixmlConfiguration.cmake Tue Nov 22 11:25:23 2016 +0100 +++ b/Orthanc/Resources/CMake/PugixmlConfiguration.cmake Tue Nov 29 13:21:53 2016 +0100 @@ -4,7 +4,7 @@ if (STATIC_BUILD OR NOT USE_SYSTEM_PUGIXML) set(PUGIXML_SOURCES_DIR ${CMAKE_BINARY_DIR}/pugixml-1.4) set(PUGIXML_MD5 "7c56c91cfe3ecdee248a8e4892ef5781") - set(PUGIXML_URL "http://www.montefiore.ulg.ac.be/~jodogne/Orthanc/ThirdPartyDownloads/pugixml-1.4.tar.gz") + set(PUGIXML_URL "http://www.orthanc-server.com/downloads/third-party/pugixml-1.4.tar.gz") DownloadPackage(${PUGIXML_MD5} ${PUGIXML_URL} "${PUGIXML_SOURCES_DIR}")
--- a/Orthanc/Resources/CMake/ZlibConfiguration.cmake Tue Nov 22 11:25:23 2016 +0100 +++ b/Orthanc/Resources/CMake/ZlibConfiguration.cmake Tue Nov 29 13:21:53 2016 +0100 @@ -1,6 +1,6 @@ if (STATIC_BUILD OR NOT USE_SYSTEM_ZLIB) SET(ZLIB_SOURCES_DIR ${CMAKE_BINARY_DIR}/zlib-1.2.7) - SET(ZLIB_URL "http://www.montefiore.ulg.ac.be/~jodogne/Orthanc/ThirdPartyDownloads/zlib-1.2.7.tar.gz") + SET(ZLIB_URL "http://www.orthanc-server.com/downloads/third-party/zlib-1.2.7.tar.gz") SET(ZLIB_MD5 "60df6a37c56e7c1366cca812414f7b85") DownloadPackage(${ZLIB_MD5} ${ZLIB_URL} "${ZLIB_SOURCES_DIR}")