# HG changeset patch # User Sebastien Jodogne # Date 1486978754 -3600 # Node ID 8e5e0de758394a92bfac84d57f902b2579b9351d # Parent b9775db0fd9b1f26ee76aeb6786620e32db2f7ce primitives for HTTP client in plugin C++ wrapper diff -r b9775db0fd9b -r 8e5e0de75839 Plugins/Samples/Common/OrthancPluginCppWrapper.cpp --- a/Plugins/Samples/Common/OrthancPluginCppWrapper.cpp Wed Feb 08 15:27:20 2017 +0100 +++ b/Plugins/Samples/Common/OrthancPluginCppWrapper.cpp Mon Feb 13 10:39:14 2017 +0100 @@ -51,6 +51,31 @@ } + bool MemoryBuffer::CheckHttp(OrthancPluginErrorCode code) + { + if (code != OrthancPluginErrorCode_Success) + { + // Prevent using garbage information + buffer_.data = NULL; + buffer_.size = 0; + } + + if (code == OrthancPluginErrorCode_Success) + { + return true; + } + else if (code == OrthancPluginErrorCode_UnknownResource || + code == OrthancPluginErrorCode_InexistentItem) + { + return false; + } + else + { + ORTHANC_PLUGINS_THROW_PLUGIN_ERROR_CODE(code); + } + } + + MemoryBuffer::MemoryBuffer(OrthancPluginContext* context) : context_(context) { @@ -119,29 +144,13 @@ { Clear(); - OrthancPluginErrorCode error; - if (applyPlugins) { - error = OrthancPluginRestApiGetAfterPlugins(context_, &buffer_, uri.c_str()); + return CheckHttp(OrthancPluginRestApiGetAfterPlugins(context_, &buffer_, uri.c_str())); } else { - error = OrthancPluginRestApiGet(context_, &buffer_, uri.c_str()); - } - - if (error == OrthancPluginErrorCode_Success) - { - return true; - } - else if (error == OrthancPluginErrorCode_UnknownResource || - error == OrthancPluginErrorCode_InexistentItem) - { - return false; - } - else - { - ORTHANC_PLUGINS_THROW_PLUGIN_ERROR_CODE(error); + return CheckHttp(OrthancPluginRestApiGet(context_, &buffer_, uri.c_str())); } } @@ -153,29 +162,13 @@ { Clear(); - OrthancPluginErrorCode error; - if (applyPlugins) { - error = OrthancPluginRestApiPostAfterPlugins(context_, &buffer_, uri.c_str(), body, bodySize); + return CheckHttp(OrthancPluginRestApiPostAfterPlugins(context_, &buffer_, uri.c_str(), body, bodySize)); } else { - error = OrthancPluginRestApiPost(context_, &buffer_, uri.c_str(), body, bodySize); - } - - if (error == OrthancPluginErrorCode_Success) - { - return true; - } - else if (error == OrthancPluginErrorCode_UnknownResource || - error == OrthancPluginErrorCode_InexistentItem) - { - return false; - } - else - { - ORTHANC_PLUGINS_THROW_PLUGIN_ERROR_CODE(error); + return CheckHttp(OrthancPluginRestApiPost(context_, &buffer_, uri.c_str(), body, bodySize)); } } @@ -187,29 +180,13 @@ { Clear(); - OrthancPluginErrorCode error; - if (applyPlugins) { - error = OrthancPluginRestApiPutAfterPlugins(context_, &buffer_, uri.c_str(), body, bodySize); + return CheckHttp(OrthancPluginRestApiPutAfterPlugins(context_, &buffer_, uri.c_str(), body, bodySize)); } else { - error = OrthancPluginRestApiPut(context_, &buffer_, uri.c_str(), body, bodySize); - } - - if (error == OrthancPluginErrorCode_Success) - { - return true; - } - else if (error == OrthancPluginErrorCode_UnknownResource || - error == OrthancPluginErrorCode_InexistentItem) - { - return false; - } - else - { - ORTHANC_PLUGINS_THROW_PLUGIN_ERROR_CODE(error); + return CheckHttp(OrthancPluginRestApiPut(context_, &buffer_, uri.c_str(), body, bodySize)); } } @@ -322,6 +299,68 @@ str.ToJson(target); } + + bool MemoryBuffer::HttpGet(const std::string& url, + const std::string& username, + const std::string& password) + { + Clear(); + return CheckHttp(OrthancPluginHttpGet(context_, &buffer_, url.c_str(), + username.empty() ? NULL : username.c_str(), + password.empty() ? NULL : password.c_str())); + } + + + bool MemoryBuffer::HttpPost(const std::string& url, + const std::string& body, + const std::string& username, + const std::string& password) + { + Clear(); + return CheckHttp(OrthancPluginHttpGet(context_, &buffer_, url.c_str(), + username.empty() ? NULL : username.c_str(), + password.empty() ? NULL : password.c_str())); + } + + + bool MemoryBuffer::HttpPut(const std::string& url, + const std::string& body, + const std::string& username, + const std::string& password) + { + Clear(); + return CheckHttp(OrthancPluginHttpPut(context_, &buffer_, url.c_str(), + body.empty() ? NULL : body.c_str(), + body.size(), + username.empty() ? NULL : username.c_str(), + password.empty() ? NULL : password.c_str())); + } + + + bool HttpDelete(OrthancPluginContext* context_, + const std::string& url, + const std::string& username, + const std::string& password) + { + OrthancPluginErrorCode error = OrthancPluginHttpDelete + (context_, url.c_str(), + username.empty() ? NULL : username.c_str(), + password.empty() ? NULL : password.c_str()); + + if (error == OrthancPluginErrorCode_Success) + { + return true; + } + else if (error == OrthancPluginErrorCode_UnknownResource || + error == OrthancPluginErrorCode_InexistentItem) + { + return false; + } + else + { + ORTHANC_PLUGINS_THROW_PLUGIN_ERROR_CODE(error); + } + } OrthancConfiguration::OrthancConfiguration(OrthancPluginContext* context) : diff -r b9775db0fd9b -r 8e5e0de75839 Plugins/Samples/Common/OrthancPluginCppWrapper.h --- a/Plugins/Samples/Common/OrthancPluginCppWrapper.h Wed Feb 08 15:27:20 2017 +0100 +++ b/Plugins/Samples/Common/OrthancPluginCppWrapper.h Mon Feb 13 10:39:14 2017 +0100 @@ -67,6 +67,8 @@ void Check(OrthancPluginErrorCode code); + bool CheckHttp(OrthancPluginErrorCode code); + public: MemoryBuffer(OrthancPluginContext* context); @@ -152,6 +154,20 @@ OrthancPluginDicomToJsonFormat format, OrthancPluginDicomToJsonFlags flags, uint32_t maxStringLength); + + bool HttpGet(const std::string& url, + const std::string& username, + const std::string& password); + + bool HttpPost(const std::string& url, + const std::string& body, + const std::string& username, + const std::string& password); + + bool HttpPut(const std::string& url, + const std::string& body, + const std::string& username, + const std::string& password); }; @@ -407,6 +423,11 @@ const std::string& uri, bool applyPlugins); + bool HttpDelete(OrthancPluginContext* context, + const std::string& url, + const std::string& username, + const std::string& password); + inline void LogError(OrthancPluginContext* context, const std::string& message) {