diff Core/HttpServer/HttpHandler.cpp @ 1363:feaf2840917c

Plugins now receive duplicated GET arguments in their REST callbacks
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 20 May 2015 15:21:26 +0200
parents 6e7e5ed91c2d
children 02f5a3f5c0a0
line wrap: on
line diff
--- a/Core/HttpServer/HttpHandler.cpp	Fri May 15 17:33:43 2015 +0200
+++ b/Core/HttpServer/HttpHandler.cpp	Wed May 20 15:21:26 2015 +0200
@@ -39,7 +39,7 @@
 
 namespace Orthanc
 {
-  static void SplitGETNameValue(HttpHandler::Arguments& result,
+  static void SplitGETNameValue(HttpHandler::GetArguments& result,
                                 const char* start,
                                 const char* end)
   {
@@ -60,11 +60,12 @@
     Toolbox::UrlDecode(name);
     Toolbox::UrlDecode(value);
 
-    result.insert(std::make_pair(name, value));
+    result.push_back(std::make_pair(name, value));
   }
 
 
-  void HttpHandler::ParseGetArguments(HttpHandler::Arguments& result, const char* query)
+  void HttpHandler::ParseGetArguments(HttpHandler::GetArguments& result, 
+                                      const char* query)
   {
     const char* pos = query;
 
@@ -87,7 +88,7 @@
 
 
   void  HttpHandler::ParseGetQuery(UriComponents& uri,
-                                   HttpHandler::Arguments& getArguments, 
+                                   HttpHandler::GetArguments& getArguments, 
                                    const char* query)
   {
     const char *questionMark = ::strchr(query, '?');
@@ -104,7 +105,7 @@
     }    
   }
 
-
+ 
   std::string HttpHandler::GetArgument(const Arguments& getArguments,
                                        const std::string& name,
                                        const std::string& defaultValue)
@@ -121,6 +122,22 @@
   }
 
 
+  std::string HttpHandler::GetArgument(const GetArguments& getArguments,
+                                       const std::string& name,
+                                       const std::string& defaultValue)
+  {
+    for (size_t i = 0; i < getArguments.size(); i++)
+    {
+      if (getArguments[i].first == name)
+      {
+        return getArguments[i].second;
+      }
+    }
+
+    return defaultValue;
+  }
+
+
 
   void HttpHandler::ParseCookies(HttpHandler::Arguments& result, 
                                  const HttpHandler::Arguments& httpHeaders)
@@ -159,4 +176,16 @@
       }
     }
   }
+
+
+  void HttpHandler::CompileGetArguments(Arguments& compiled,
+                                        const GetArguments& source)
+  {
+    compiled.clear();
+
+    for (size_t i = 0; i < source.size(); i++)
+    {
+      compiled[source[i].first] = source[i].second;
+    }
+  }
 }