Mercurial > hg > orthanc-dicomweb
changeset 153:158f4fdb0690 dev
sync
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 30 Jun 2016 20:22:44 +0200 |
parents | cb2b84c883d4 |
children | 7dc0481f025a |
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/Sdk-mainline/orthanc/OrthancCPlugin.h Plugin/DicomWebClient.cpp Plugin/QidoRs.cpp Plugin/WadoRs.cpp Plugin/WadoRsRetrieveFrames.cpp Plugin/WadoUri.cpp |
diffstat | 11 files changed, 207 insertions(+), 77 deletions(-) [+] |
line wrap: on
line diff
--- a/Orthanc/Core/Toolbox.cpp Mon Jun 27 17:20:36 2016 +0200 +++ b/Orthanc/Core/Toolbox.cpp Thu Jun 30 20:22:44 2016 +0200 @@ -111,6 +111,7 @@ namespace Orthanc { +#if !defined(ORTHANC_SANDBOXED) || ORTHANC_SANDBOXED != 1 static bool finish_; static ServerBarrierEvent barrierEvent_; @@ -188,6 +189,7 @@ const bool stopFlag = false; return ServerBarrierInternal(&stopFlag); } +#endif /* ORTHANC_SANDBOXED */ void Toolbox::ToUpperCase(std::string& s) @@ -677,11 +679,15 @@ return std::string(pathbuf); } +#elif defined(ORTHANC_SANDBOXED) && ORTHANC_SANDBOXED == 1 + // Sandboxed Orthanc, no access to the executable + #else #error Support your platform here #endif +#if !defined(ORTHANC_SANDBOXED) || ORTHANC_SANDBOXED != 1 std::string Toolbox::GetPathToExecutable() { boost::filesystem::path p(GetPathToExecutableInternal()); @@ -694,6 +700,7 @@ boost::filesystem::path p(GetPathToExecutableInternal()); return boost::filesystem::absolute(p.parent_path()).string(); } +#endif static const char* GetBoostLocaleEncoding(const Encoding sourceEncoding)
--- a/Orthanc/Core/Toolbox.h Mon Jun 27 17:20:36 2016 +0200 +++ b/Orthanc/Core/Toolbox.h Thu Jun 30 20:22:44 2016 +0200 @@ -49,9 +49,11 @@ namespace Toolbox { +#if !defined(ORTHANC_SANDBOXED) || ORTHANC_SANDBOXED != 1 ServerBarrierEvent ServerBarrier(const bool& stopFlag); ServerBarrierEvent ServerBarrier(); +#endif void ToUpperCase(std::string& s); // Inplace version @@ -77,7 +79,9 @@ size_t size, const std::string& path); +#if !defined(ORTHANC_SANDBOXED) || ORTHANC_SANDBOXED != 1 void USleep(uint64_t microSeconds); +#endif void RemoveFile(const std::string& path); @@ -137,9 +141,11 @@ const std::string& content); #endif +#if !defined(ORTHANC_SANDBOXED) || ORTHANC_SANDBOXED != 1 std::string GetPathToExecutable(); std::string GetDirectoryOfExecutable(); +#endif std::string ConvertToUtf8(const std::string& source, Encoding sourceEncoding);
--- a/Orthanc/Plugins/Samples/Common/OrthancPluginCppWrapper.cpp Mon Jun 27 17:20:36 2016 +0200 +++ b/Orthanc/Plugins/Samples/Common/OrthancPluginCppWrapper.cpp Thu Jun 30 20:22:44 2016 +0200 @@ -33,6 +33,7 @@ #include "OrthancPluginCppWrapper.h" #include <json/reader.h> +#include <json/writer.h> namespace OrthancPlugins @@ -50,6 +51,15 @@ } } + + void PluginException::Check(OrthancPluginErrorCode code) + { + if (code != OrthancPluginErrorCode_Success) + { + throw PluginException(code); + } + } + MemoryBuffer::MemoryBuffer(OrthancPluginContext* context) : context_(context) @@ -214,6 +224,36 @@ } + bool MemoryBuffer::RestApiPost(const std::string& uri, + const Json::Value& body, + bool applyPlugins) + { + Json::FastWriter writer; + return RestApiPost(uri, writer.write(body), applyPlugins); + } + + + bool MemoryBuffer::RestApiPut(const std::string& uri, + const Json::Value& body, + bool applyPlugins) + { + Json::FastWriter writer; + return RestApiPut(uri, writer.write(body), applyPlugins); + } + + + void MemoryBuffer::CreateDicom(const Json::Value& tags, + OrthancPluginCreateDicomFlags flags) + { + Clear(); + + Json::FastWriter writer; + std::string s = writer.write(tags); + + PluginException::Check(OrthancPluginCreateDicom(context_, &buffer_, s.c_str(), NULL, flags)); + } + + OrthancString::OrthancString(OrthancPluginContext* context, char* str) : context_(context), @@ -738,10 +778,10 @@ } - bool RestApiGetJson(Json::Value& result, - OrthancPluginContext* context, - const std::string& uri, - bool applyPlugins) + bool RestApiGet(Json::Value& result, + OrthancPluginContext* context, + const std::string& uri, + bool applyPlugins) { MemoryBuffer answer(context); if (!answer.RestApiGet(uri, applyPlugins)) @@ -756,12 +796,12 @@ } - bool RestApiPostJson(Json::Value& result, - OrthancPluginContext* context, - const std::string& uri, - const char* body, - size_t bodySize, - bool applyPlugins) + bool RestApiPost(Json::Value& result, + OrthancPluginContext* context, + const std::string& uri, + const char* body, + size_t bodySize, + bool applyPlugins) { MemoryBuffer answer(context); if (!answer.RestApiPost(uri, body, bodySize, applyPlugins)) @@ -776,12 +816,23 @@ } - bool RestApiPutJson(Json::Value& result, - OrthancPluginContext* context, - const std::string& uri, - const char* body, - size_t bodySize, - bool applyPlugins) + bool RestApiPost(Json::Value& result, + OrthancPluginContext* context, + const std::string& uri, + const Json::Value& body, + bool applyPlugins) + { + Json::FastWriter writer; + return RestApiPost(result, context, uri, writer.write(body), applyPlugins); + } + + + bool RestApiPut(Json::Value& result, + OrthancPluginContext* context, + const std::string& uri, + const char* body, + size_t bodySize, + bool applyPlugins) { MemoryBuffer answer(context); if (!answer.RestApiPut(uri, body, bodySize, applyPlugins)) @@ -796,6 +847,17 @@ } + bool RestApiPut(Json::Value& result, + OrthancPluginContext* context, + const std::string& uri, + const Json::Value& body, + bool applyPlugins) + { + Json::FastWriter writer; + return RestApiPut(result, context, uri, writer.write(body), applyPlugins); + } + + bool RestApiDelete(OrthancPluginContext* context, const std::string& uri, bool applyPlugins)
--- a/Orthanc/Plugins/Samples/Common/OrthancPluginCppWrapper.h Mon Jun 27 17:20:36 2016 +0200 +++ b/Orthanc/Plugins/Samples/Common/OrthancPluginCppWrapper.h Thu Jun 30 20:22:44 2016 +0200 @@ -38,7 +38,7 @@ #include <json/value.h> #if HAS_ORTHANC_EXCEPTION == 1 -# include <OrthancException.h> +# include "../../../Core/OrthancException.h" #endif @@ -65,6 +65,8 @@ } const char* GetErrorDescription(OrthancPluginContext* context) const; + + static void Check(OrthancPluginErrorCode code); }; @@ -127,6 +129,14 @@ bool applyPlugins); bool RestApiPost(const std::string& uri, + const Json::Value& body, + bool applyPlugins); + + bool RestApiPut(const std::string& uri, + const Json::Value& body, + bool applyPlugins); + + bool RestApiPost(const std::string& uri, const std::string& body, bool applyPlugins) { @@ -139,6 +149,9 @@ { return RestApiPut(uri, body.empty() ? NULL : body.c_str(), body.size(), applyPlugins); } + + void CreateDicom(const Json::Value& tags, + OrthancPluginCreateDicomFlags flags); }; @@ -285,53 +298,92 @@ }; - bool RestApiGetJson(Json::Value& result, - OrthancPluginContext* context, - const std::string& uri, - bool applyPlugins); + bool RestApiGet(Json::Value& result, + OrthancPluginContext* context, + const std::string& uri, + bool applyPlugins); - bool RestApiPostJson(Json::Value& result, - OrthancPluginContext* context, - const std::string& uri, - const char* body, - size_t bodySize, - bool applyPlugins); + bool RestApiPost(Json::Value& result, + OrthancPluginContext* context, + const std::string& uri, + const char* body, + size_t bodySize, + bool applyPlugins); + + bool RestApiPost(Json::Value& result, + OrthancPluginContext* context, + const std::string& uri, + const Json::Value& body, + bool applyPlugins); - bool RestApiPutJson(Json::Value& result, - OrthancPluginContext* context, - const std::string& uri, - const char* body, - size_t bodySize, - bool applyPlugins); + inline bool RestApiPost(Json::Value& result, + OrthancPluginContext* context, + const std::string& uri, + const std::string& body, + bool applyPlugins) + { + return RestApiPost(result, context, uri, body.empty() ? NULL : body.c_str(), + body.size(), applyPlugins); + } - inline bool RestApiPostJson(Json::Value& result, - OrthancPluginContext* context, - const std::string& uri, - const std::string& body, - bool applyPlugins) + bool RestApiPut(Json::Value& result, + OrthancPluginContext* context, + const std::string& uri, + const char* body, + size_t bodySize, + bool applyPlugins); + + bool RestApiPut(Json::Value& result, + OrthancPluginContext* context, + const std::string& uri, + const Json::Value& body, + bool applyPlugins); + + inline bool RestApiPut(Json::Value& result, + OrthancPluginContext* context, + const std::string& uri, + const std::string& body, + bool applyPlugins) { - return RestApiPostJson(result, context, uri, body.empty() ? NULL : body.c_str(), - body.size(), applyPlugins); + return RestApiPut(result, context, uri, body.empty() ? NULL : body.c_str(), + body.size(), applyPlugins); } bool RestApiDelete(OrthancPluginContext* context, const std::string& uri, bool applyPlugins); - inline bool RestApiPutJson(Json::Value& result, - OrthancPluginContext* context, - const std::string& uri, - const std::string& body, - bool applyPlugins) - { - return RestApiPutJson(result, context, uri, body.empty() ? NULL : body.c_str(), - body.size(), applyPlugins); - } - bool RestApiDelete(OrthancPluginContext* context, const std::string& uri, bool applyPlugins); + inline void LogError(OrthancPluginContext* context, + const std::string& message) + { + if (context != NULL) + { + OrthancPluginLogError(context, message.c_str()); + } + } + + inline void LogWarning(OrthancPluginContext* context, + const std::string& message) + { + if (context != NULL) + { + OrthancPluginLogWarning(context, message.c_str()); + } + } + + inline void LogInfo(OrthancPluginContext* context, + const std::string& message) + { + if (context != NULL) + { + OrthancPluginLogInfo(context, message.c_str()); + } + } + namespace Internals { @@ -355,7 +407,7 @@ return static_cast<OrthancPluginErrorCode>(e.GetErrorCode()); } #endif - catch (boost::bad_lexical_cast& e) + catch (boost::bad_lexical_cast&) { return OrthancPluginErrorCode_BadFileFormat; }
--- a/Orthanc/Resources/CMake/BoostConfiguration.cmake Mon Jun 27 17:20:36 2016 +0200 +++ b/Orthanc/Resources/CMake/BoostConfiguration.cmake Thu Jun 30 20:22:44 2016 +0200 @@ -54,7 +54,8 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD" OR - ${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD") + ${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD" OR + ${CMAKE_SYSTEM_NAME} STREQUAL "PNaCl") list(APPEND BOOST_SOURCES ${BOOST_SOURCES_DIR}/libs/thread/src/pthread/once.cpp ${BOOST_SOURCES_DIR}/libs/thread/src/pthread/thread.cpp @@ -65,7 +66,8 @@ -DBOOST_LOCALE_NO_STD_BACKEND=1 ) - if ("${CMAKE_SYSTEM_VERSION}" STREQUAL "LinuxStandardBase") + if ("${CMAKE_SYSTEM_VERSION}" STREQUAL "LinuxStandardBase" OR + ${CMAKE_SYSTEM_NAME} STREQUAL "PNaCl") add_definitions(-DBOOST_HAS_SCHED_YIELD=1) endif() @@ -119,7 +121,8 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD" OR - ${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD") + ${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD" OR + ${CMAKE_SYSTEM_NAME} STREQUAL "PNaCl") list(APPEND BOOST_SOURCES ${BOOST_SOURCES_DIR}/libs/locale/src/posix/codecvt.cpp ${BOOST_SOURCES_DIR}/libs/locale/src/posix/collate.cpp
--- a/Orthanc/Sdk-mainline/orthanc/OrthancCPlugin.h Mon Jun 27 17:20:36 2016 +0200 +++ b/Orthanc/Sdk-mainline/orthanc/OrthancCPlugin.h Thu Jun 30 20:22:44 2016 +0200 @@ -116,8 +116,8 @@ #endif #define ORTHANC_PLUGINS_MINIMAL_MAJOR_NUMBER 1 -#define ORTHANC_PLUGINS_MINIMAL_MINOR_NUMBER 0 -#define ORTHANC_PLUGINS_MINIMAL_REVISION_NUMBER 1 +#define ORTHANC_PLUGINS_MINIMAL_MINOR_NUMBER 1 +#define ORTHANC_PLUGINS_MINIMAL_REVISION_NUMBER 0
--- a/Plugin/DicomWebClient.cpp Mon Jun 27 17:20:36 2016 +0200 +++ b/Plugin/DicomWebClient.cpp Thu Jun 30 20:22:44 2016 +0200 @@ -135,17 +135,17 @@ // Test whether this resource is an instance Json::Value tmp; - if (OrthancPlugins::RestApiGetJson(tmp, context, "/instances/" + resource, false)) + if (OrthancPlugins::RestApiGet(tmp, context, "/instances/" + resource, false)) { AddInstance(instances, tmp); } // This was not an instance, successively try with series/studies/patients - else if ((OrthancPlugins::RestApiGetJson(tmp, context, "/series/" + resource, false) && - OrthancPlugins::RestApiGetJson(tmp, context, "/series/" + resource + "/instances", false)) || - (OrthancPlugins::RestApiGetJson(tmp, context, "/studies/" + resource, false) && - OrthancPlugins::RestApiGetJson(tmp, context, "/studies/" + resource + "/instances", false)) || - (OrthancPlugins::RestApiGetJson(tmp, context, "/patients/" + resource, false) && - OrthancPlugins::RestApiGetJson(tmp, context, "/patients/" + resource + "/instances", false))) + else if ((OrthancPlugins::RestApiGet(tmp, context, "/series/" + resource, false) && + OrthancPlugins::RestApiGet(tmp, context, "/series/" + resource + "/instances", false)) || + (OrthancPlugins::RestApiGet(tmp, context, "/studies/" + resource, false) && + OrthancPlugins::RestApiGet(tmp, context, "/studies/" + resource + "/instances", false)) || + (OrthancPlugins::RestApiGet(tmp, context, "/patients/" + resource, false) && + OrthancPlugins::RestApiGet(tmp, context, "/patients/" + resource + "/instances", false))) { if (tmp.type() != Json::arrayValue) {
--- a/Plugin/QidoRs.cpp Mon Jun 27 17:20:36 2016 +0200 +++ b/Plugin/QidoRs.cpp Thu Jun 30 20:22:44 2016 +0200 @@ -288,8 +288,8 @@ case QueryLevel_Study: { Json::Value series, instances; - if (OrthancPlugins::RestApiGetJson(series, context, "/studies/" + resource + "/series?expand", false) && - OrthancPlugins::RestApiGetJson(instances, context, "/studies/" + resource + "/instances", false)) + if (OrthancPlugins::RestApiGet(series, context, "/studies/" + resource + "/series?expand", false) && + OrthancPlugins::RestApiGet(instances, context, "/studies/" + resource + "/instances", false)) { // Number of Study Related Series target[gdcm::Tag(0x0020, 0x1206)] = boost::lexical_cast<std::string>(series.size()); @@ -335,7 +335,7 @@ case QueryLevel_Series: { Json::Value instances; - if (OrthancPlugins::RestApiGetJson(instances, context, "/series/" + resource + "/instances", false)) + if (OrthancPlugins::RestApiGet(instances, context, "/series/" + resource + "/instances", false)) { // Number of Series Related Instances target[gdcm::Tag(0x0020, 0x1209)] = boost::lexical_cast<std::string>(instances.size()); @@ -507,7 +507,7 @@ std::string body = writer.write(find); Json::Value resources; - if (!OrthancPlugins::RestApiPostJson(resources, context, "/tools/find", body, false) || + if (!OrthancPlugins::RestApiPost(resources, context, "/tools/find", body, false) || resources.type() != Json::arrayValue) { throw OrthancPlugins::PluginException(OrthancPluginErrorCode_InternalError); @@ -527,7 +527,7 @@ { // Find one child instance of this resource Json::Value tmp; - if (OrthancPlugins::RestApiGetJson(tmp, context, root + resource + "/instances", false) && + if (OrthancPlugins::RestApiGet(tmp, context, root + resource + "/instances", false) && tmp.type() == Json::arrayValue && tmp.size() > 0) { @@ -585,7 +585,7 @@ it = resourcesAndInstances.begin(); it != resourcesAndInstances.end(); ++it) { Json::Value tags; - if (OrthancPlugins::RestApiGetJson(tags, context, "/instances/" + it->second + "/tags", false)) + if (OrthancPlugins::RestApiGet(tags, context, "/instances/" + it->second + "/tags", false)) { std::string wadoUrl = OrthancPlugins::Configuration::GetWadoUrl( wadoBase,
--- a/Plugin/WadoRs.cpp Mon Jun 27 17:20:36 2016 +0200 +++ b/Plugin/WadoRs.cpp Thu Jun 30 20:22:44 2016 +0200 @@ -174,7 +174,7 @@ OrthancPluginContext* context = OrthancPlugins::Configuration::GetContext(); Json::Value instances; - if (!OrthancPlugins::RestApiGetJson(instances, context, resource + "/instances", false)) + if (!OrthancPlugins::RestApiGet(instances, context, resource + "/instances", false)) { // Internal error OrthancPluginSendHttpStatusCode(context, output, 400); @@ -217,7 +217,7 @@ else { Json::Value instances; - if (!OrthancPlugins::RestApiGetJson(instances, context, resource + "/instances", false)) + if (!OrthancPlugins::RestApiGet(instances, context, resource + "/instances", false)) { // Internal error OrthancPluginSendHttpStatusCode(context, output, 400); @@ -310,7 +310,7 @@ } Json::Value study; - if (!OrthancPlugins::RestApiGetJson(study, context, "/series/" + id + "/study", false)) + if (!OrthancPlugins::RestApiGet(study, context, "/series/" + id + "/study", false)) { OrthancPluginSendHttpStatusCode(context, output, 404); return false; @@ -358,8 +358,8 @@ } Json::Value study, series; - if (!OrthancPlugins::RestApiGetJson(series, context, "/instances/" + id + "/series", false) || - !OrthancPlugins::RestApiGetJson(study, context, "/instances/" + id + "/study", false)) + if (!OrthancPlugins::RestApiGet(series, context, "/instances/" + id + "/series", false) || + !OrthancPlugins::RestApiGet(study, context, "/instances/" + id + "/study", false)) { OrthancPluginSendHttpStatusCode(context, output, 404); return false;
--- a/Plugin/WadoRsRetrieveFrames.cpp Mon Jun 27 17:20:36 2016 +0200 +++ b/Plugin/WadoRsRetrieveFrames.cpp Thu Jun 30 20:22:44 2016 +0200 @@ -413,7 +413,7 @@ OrthancPlugins::MemoryBuffer content(context); if (LocateInstance(output, uri, request) && content.RestApiGet(uri + "/file", false) && - OrthancPlugins::RestApiGetJson(header, context, uri + "/header?simplify", false)) + OrthancPlugins::RestApiGet(header, context, uri + "/header?simplify", false)) { { std::string s = "DICOMweb RetrieveFrames on " + uri + ", frames: ";
--- a/Plugin/WadoUri.cpp Mon Jun 27 17:20:36 2016 +0200 +++ b/Plugin/WadoUri.cpp Thu Jun 30 20:22:44 2016 +0200 @@ -116,7 +116,7 @@ else { Json::Value info; - if (!OrthancPlugins::RestApiGetJson(info, context, "/instances/" + instance + "/series", false) || + if (!OrthancPlugins::RestApiGet(info, context, "/instances/" + instance + "/series", false) || info["MainDicomTags"]["SeriesInstanceUID"] != seriesUid) { OrthancPlugins::Configuration::LogError("WADO-URI: Instance " + objectUid + " does not belong to series " + seriesUid); @@ -136,7 +136,7 @@ else { Json::Value info; - if (!OrthancPlugins::RestApiGetJson(info, context, "/instances/" + instance + "/study", false) || + if (!OrthancPlugins::RestApiGet(info, context, "/instances/" + instance + "/study", false) || info["MainDicomTags"]["StudyInstanceUID"] != studyUid) { OrthancPlugins::Configuration::LogError("WADO-URI: Instance " + objectUid + " does not belong to study " + studyUid);