diff OrthancServer/OrthancRestApi/OrthancRestModalities.cpp @ 1446:8dc80ba768aa

refactoring: IHttpHandler does not use std::string to hold the request body
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 01 Jul 2015 13:16:12 +0200
parents 0a355eeeb351
children f967bdf8534e
line wrap: on
line diff
--- a/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp	Wed Jul 01 12:30:19 2015 +0200
+++ b/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp	Wed Jul 01 13:16:12 2015 +0200
@@ -82,12 +82,13 @@
    ***************************************************************************/
 
   static bool MergeQueryAndTemplate(DicomMap& result,
-                                    const std::string& postData)
+                                    const char* postData,
+                                    size_t postSize)
   {
     Json::Value query;
     Json::Reader reader;
 
-    if (!reader.parse(postData, query) ||
+    if (!reader.parse(postData, postData + postSize, query) ||
         query.type() != Json::objectValue)
     {
       return false;
@@ -169,7 +170,7 @@
 
     DicomMap fields;
     DicomMap::SetupFindPatientTemplate(fields);
-    if (!MergeQueryAndTemplate(fields, call.GetPostBody()))
+    if (!MergeQueryAndTemplate(fields, call.GetBodyData(), call.GetBodySize()))
     {
       return;
     }
@@ -193,7 +194,7 @@
 
     DicomMap fields;
     DicomMap::SetupFindStudyTemplate(fields);
-    if (!MergeQueryAndTemplate(fields, call.GetPostBody()))
+    if (!MergeQueryAndTemplate(fields, call.GetBodyData(), call.GetBodySize()))
     {
       return;
     }
@@ -223,7 +224,7 @@
 
     DicomMap fields;
     DicomMap::SetupFindSeriesTemplate(fields);
-    if (!MergeQueryAndTemplate(fields, call.GetPostBody()))
+    if (!MergeQueryAndTemplate(fields, call.GetBodyData(), call.GetBodySize()))
     {
       return;
     }
@@ -254,7 +255,7 @@
 
     DicomMap fields;
     DicomMap::SetupFindInstanceTemplate(fields);
-    if (!MergeQueryAndTemplate(fields, call.GetPostBody()))
+    if (!MergeQueryAndTemplate(fields, call.GetBodyData(), call.GetBodySize()))
     {
       return;
     }
@@ -287,7 +288,7 @@
 
     DicomMap m;
     DicomMap::SetupFindPatientTemplate(m);
-    if (!MergeQueryAndTemplate(m, call.GetPostBody()))
+    if (!MergeQueryAndTemplate(m, call.GetBodyData(), call.GetBodySize()))
     {
       return;
     }
@@ -307,7 +308,7 @@
       FromDcmtkBridge::ToJson(patient, patients.GetAnswer(i), true);
 
       DicomMap::SetupFindStudyTemplate(m);
-      if (!MergeQueryAndTemplate(m, call.GetPostBody()))
+      if (!MergeQueryAndTemplate(m, call.GetBodyData(), call.GetBodySize()))
       {
         return;
       }
@@ -325,7 +326,7 @@
         FromDcmtkBridge::ToJson(study, studies.GetAnswer(j), true);
 
         DicomMap::SetupFindSeriesTemplate(m);
-        if (!MergeQueryAndTemplate(m, call.GetPostBody()))
+        if (!MergeQueryAndTemplate(m, call.GetBodyData(), call.GetBodySize()))
         {
           return;
         }
@@ -474,10 +475,13 @@
   {
     size_t index = boost::lexical_cast<size_t>(call.GetUriComponent("index", ""));
 
-    LOG(WARNING) << "Driving C-Move SCU on modality: " << call.GetPostBody();
+    std::string modality;
+    call.BodyToString(modality);
+
+    LOG(WARNING) << "Driving C-Move SCU on modality: " << modality;
 
     QueryAccessor query(call);
-    query->Retrieve(call.GetPostBody(), index);
+    query->Retrieve(modality, index);
 
     // Retrieve has succeeded
     call.GetOutput().AnswerBuffer("{}", "application/json");
@@ -486,10 +490,13 @@
 
   static void RetrieveAllAnswers(RestApiPostCall& call)
   {
-    LOG(WARNING) << "Driving C-Move SCU on modality: " << call.GetPostBody();
+    std::string modality;
+    call.BodyToString(modality);
+
+    LOG(WARNING) << "Driving C-Move SCU on modality: " << modality;
 
     QueryAccessor query(call);
-    query->Retrieve(call.GetPostBody());
+    query->Retrieve(modality);
 
     // Retrieve has succeeded
     call.GetOutput().AnswerBuffer("{}", "application/json");
@@ -562,11 +569,14 @@
     ServerContext& context = OrthancRestApi::GetContext(call);
 
     Json::Value request;
-    if (Toolbox::IsSHA1(call.GetPostBody()))
+    if (Toolbox::IsSHA1(call.GetBodyData(), call.GetBodySize()))
     {
+      std::string s;
+      call.BodyToString(s);
+
       // This is for compatibility with Orthanc <= 0.5.1.
       request = Json::arrayValue;
-      request.append(Toolbox::StripSpaces(call.GetPostBody()));
+      request.append(Toolbox::StripSpaces(s));
     }
     else if (!call.ParseJsonRequest(request))
     {
@@ -797,7 +807,7 @@
   {
     Json::Value json;
     Json::Reader reader;
-    if (reader.parse(call.GetPutBody(), json))
+    if (reader.parse(call.GetBodyData(), call.GetBodyData() + call.GetBodySize(), json))
     {
       RemoteModalityParameters modality;
       modality.FromJson(json);
@@ -818,7 +828,7 @@
   {
     Json::Value json;
     Json::Reader reader;
-    if (reader.parse(call.GetPutBody(), json))
+    if (reader.parse(call.GetBodyData(), call.GetBodyData() + call.GetBodySize(), json))
     {
       OrthancPeerParameters peer;
       peer.FromJson(json);