# HG changeset patch # User Sebastien Jodogne # Date 1466604663 -7200 # Node ID acb4d6bf9ad128d5a7ea11436cf60e8c6218adaf # Parent d0f72cc15602a5f4ff506397309f7d75542a2c47 cont diff -r d0f72cc15602 -r acb4d6bf9ad1 Plugin/StowRsClient.cpp --- a/Plugin/StowRsClient.cpp Wed Jun 22 15:57:43 2016 +0200 +++ b/Plugin/StowRsClient.cpp Wed Jun 22 16:11:03 2016 +0200 @@ -110,10 +110,13 @@ static void SendStowRequest(const Orthanc::WebServiceParameters& server, - const std::string& mime, + const std::map& httpHeaders, + const std::string& mime, // TODO remove this const std::string& body, size_t countInstances) { + // TODO use httpHeaders + const char* headersKeys[] = { "Accept", "Expect", @@ -203,19 +206,25 @@ } -static void GetListOfInstances(std::list& instances, - const OrthancPluginHttpRequest* request) +static void ParseRestRequest(std::list& instances /* out */, + std::map& httpHeaders /* out */, + const OrthancPluginHttpRequest* request /* in */) { - Json::Value resources; + instances.clear(); + httpHeaders.clear(); + + Json::Value body; Json::Reader reader; - if (!reader.parse(request->body, request->body + request->bodySize, resources) || - resources.type() != Json::arrayValue) + if (!reader.parse(request->body, request->body + request->bodySize, body) || + body.type() != Json::arrayValue) { std::string s = "The list of resources to be sent through DICOMweb STOW-RS must be given as a JSON array"; OrthancPluginLogError(context_, s.c_str()); throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); } + Json::Value& resources = body; // TODO + // Extract information about all the child instances for (Json::Value::ArrayIndex i = 0; i < resources.size(); i++) { @@ -261,6 +270,7 @@ static void SendStowChunks(const Orthanc::WebServiceParameters& server, + const std::map& httpHeaders, const std::string& mime, const std::string& boundary, Orthanc::ChunkedBuffer& chunks, @@ -276,7 +286,7 @@ std::string body; chunks.Flatten(body); - SendStowRequest(server, mime, body, countInstances); + SendStowRequest(server, httpHeaders, mime, body, countInstances); countInstances = 0; } } @@ -300,7 +310,8 @@ Orthanc::WebServiceParameters server(OrthancPlugins::DicomWebServers::GetInstance().GetServer(request->groups[0])); std::list instances; - GetListOfInstances(instances, request); + std::map httpHeaders; + ParseRestRequest(instances, httpHeaders, request); { std::string s = ("Sending " + boost::lexical_cast(instances.size()) + @@ -342,11 +353,11 @@ chunks.AddChunk(dicom); countInstances ++; - SendStowChunks(server, mime, boundary, chunks, countInstances, false); + SendStowChunks(server, httpHeaders, mime, boundary, chunks, countInstances, false); } } - SendStowChunks(server, mime, boundary, chunks, countInstances, true); + SendStowChunks(server, httpHeaders, mime, boundary, chunks, countInstances, true); std::string answer = "{}\n"; OrthancPluginAnswerBuffer(context_, output, answer.c_str(), answer.size(), "application/json");