<pre style='margin:0'>
Ryan Schmidt (ryandesign) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/dac3e04de992b31c833c29a42dd38c2067224079">https://github.com/macports/macports-ports/commit/dac3e04de992b31c833c29a42dd38c2067224079</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new dac3e04de99 ola: Support newer protobuf3-cpp and libmicrohttpd
</span>dac3e04de99 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit dac3e04de992b31c833c29a42dd38c2067224079
</span>Author: Peter Newman <peternewman@users.noreply.github.com>
AuthorDate: Tue Oct 27 12:43:31 2020 +0000

<span style='display:block; white-space:pre;color:#404040;'>    ola: Support newer protobuf3-cpp and libmicrohttpd
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Closes: https://trac.macports.org/ticket/59585
</span>---
 net/ola/Portfile                              |  10 +-
 net/ola/files/patch-google_check.diff         | 138 ++++++++++++
 net/ola/files/patch-libmicrohttpd-0.9.71.diff | 295 ++++++++++++++++++++++++++
 net/ola/files/patch-protobuf3.diff            |  48 -----
 4 files changed, 442 insertions(+), 49 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/net/ola/Portfile b/net/ola/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index a5272c933fe..20845c9a227 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/net/ola/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/net/ola/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -29,7 +29,15 @@ checksums           rmd160  1312a43f8db8f211f68cd1ab390eb9c8bf476144 \
</span> github.tarball_from releases
 
 patch.pre_args      -p1
<span style='display:block; white-space:pre;background:#ffe0e0;'>-patchfiles          patch-protobuf3.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Protobuf 3 support, can be dropped once 0.10.8 is out
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append   patch-protobuf3.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Protobuf GOOGLE_CHECK fix, can be dropped once 0.10.8 is out
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append   patch-google_check.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Protobuf libmicrohttpd v0.9.71 fix, can be dropped once 0.10.8 is out
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append   patch-libmicrohttpd-0.9.71.diff
</span> 
 depends_build       port:pkgconfig
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/net/ola/files/patch-google_check.diff b/net/ola/files/patch-google_check.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..68cc0f71680
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/net/ola/files/patch-google_check.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,138 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/AUTHORS b/AUTHORS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index ae2d58095..084ff0b69 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/AUTHORS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/AUTHORS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -13,6 +13,7 @@ Contributors:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Hakan Lindestaf, Renard plugin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Harry F, for the Eurolite USB Pro code
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Heikki Junnila, bug fixes for the debian packaging files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  Jannis Achstetter, compile fixes for newer dependencies
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Laurent (Renzo), Debian packages, FreeBSD & RDM testing.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Lukas Erlinghagen, win32 port.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Johan Nilsson, Philips Hue trigger config
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/configure.ac b/configure.ac
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e40372ec7..f63767f05 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/configure.ac
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/configure.ac
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -858,6 +858,9 @@ AS_IF([test "${enable_rdm_tests}" = "yes"],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ AS_IF([test "x$build_java_libs" = xyes],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       [PROTOBUF_SUPPORT([2.4.0])],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       [PROTOBUF_SUPPORT([2.3.0])])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# Version 3.7 and above of protoc require some additional includes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++AC_CHECK_HEADERS([google/protobuf/io/strtod.h google/protobuf/stubs/logging.h \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  google/protobuf/stubs/stl_util.h])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Doxygen
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/protoc/CppFileGenerator.cpp b/protoc/CppFileGenerator.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 518c17879..ee93afc14 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/protoc/CppFileGenerator.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/protoc/CppFileGenerator.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -196,6 +196,8 @@ void FileGenerator::GenerateBuildDescriptors(Printer* printer) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "assigndescriptorsname", GlobalAssignDescriptorsName(m_output_name));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     printer->Indent();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // No longer needed since protobuf 3.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if GOOGLE_PROTOBUF_VERSION < 3007000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // Make sure the file has found its way into the pool.  If a descriptor
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // is requested *during* static init then AddDescriptors() may not have
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // been called yet, so we call it manually.  Note that it's fine if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -203,6 +205,7 @@ void FileGenerator::GenerateBuildDescriptors(Printer* printer) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     printer->Print(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "$adddescriptorsname$();\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "adddescriptorsname", GlobalAddDescriptorsName(m_file->name()));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // Get the file's descriptor from the pool.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     printer->Print(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -228,6 +231,10 @@ void FileGenerator::GenerateBuildDescriptors(Printer* printer) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // protobuf_AssignDescriptorsOnce():  The first time it is called, calls
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // AssignDescriptors().  All later times, waits for the first call to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // complete and then returns.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // We need to generate different code, depending on the version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // of protobuf we compile against
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if GOOGLE_PROTOBUF_VERSION < 3007000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     printer->Print(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "namespace {\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -241,6 +248,19 @@ void FileGenerator::GenerateBuildDescriptors(Printer* printer) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "assigndescriptorsname", GlobalAssignDescriptorsName(m_output_name));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     printer->Print("}  // namespace\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    printer->Print(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      "namespace {\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      "\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      "inline void protobuf_AssignDescriptorsOnce() {\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      "  static ::google::protobuf::internal::once_flag once;\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      "  ::google::protobuf::internal::call_once(once,\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      "    &$assigndescriptorsname$);\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      "}\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      "\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      "assigndescriptorsname", GlobalAssignDescriptorsName(m_output_name));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    printer->Print("}  // namespace\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/protoc/GeneratorHelpers.cpp b/protoc/GeneratorHelpers.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 19609181e..d0939c430 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/protoc/GeneratorHelpers.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/protoc/GeneratorHelpers.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -104,10 +104,13 @@ string FilenameIdentifier(const string& filename) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// No longer needed since protobuf 3.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if GOOGLE_PROTOBUF_VERSION < 3007000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Return the name of the AddDescriptors() function for a given file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ string GlobalAddDescriptorsName(const string& filename) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return "protobuf_AddDesc_" + FilenameIdentifier(filename);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Return the name of the AssignDescriptors() function for a given file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ string GlobalAssignDescriptorsName(const string& filename) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/protoc/GeneratorHelpers.h b/protoc/GeneratorHelpers.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 35efdbb04..2e9d311d0 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/protoc/GeneratorHelpers.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/protoc/GeneratorHelpers.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -67,8 +67,11 @@ string StripProto(const string& filename);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Convert a file name into a valid identifier.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ string FilenameIdentifier(const string& filename);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// No longer needed since protobuf 3.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if GOOGLE_PROTOBUF_VERSION < 3007000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Return the name of the AddDescriptors() function for a given file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ string GlobalAddDescriptorsName(const string& filename);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Return the name of the AssignDescriptors() function for a given file.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ string GlobalAssignDescriptorsName(const string& filename);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/protoc/StrUtil.cpp b/protoc/StrUtil.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 85891a6a4..d300b71e8 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/protoc/StrUtil.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/protoc/StrUtil.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -41,6 +41,21 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "protoc/StrUtil.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if HAVE_CONFIG_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <config.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif  // HAVE_CONFIG_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Required for Protobuf 3.7 onwards
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_GOOGLE_PROTOBUF_IO_STRTOD_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <google/protobuf/io/strtod.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif  // HAVE_GOOGLE_PROTOBUF_IO_STRTOD_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_GOOGLE_PROTOBUF_STUBS_LOGGING_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <google/protobuf/stubs/logging.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif  // HAVE_GOOGLE_PROTOBUF_STUBS_LOGGING_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_GOOGLE_PROTOBUF_STUBS_STL_UTIL_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <google/protobuf/stubs/stl_util.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif  // HAVE_GOOGLE_PROTOBUF_STUBS_STL_UTIL_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef _WIN32
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // MSVC has only _snprintf, not snprintf.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // 
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/net/ola/files/patch-libmicrohttpd-0.9.71.diff b/net/ola/files/patch-libmicrohttpd-0.9.71.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..f312b6f9912
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/net/ola/files/patch-libmicrohttpd-0.9.71.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,295 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/common/http/HTTPServer.cpp b/common/http/HTTPServer.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 455e52bdd..c91ac769f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/common/http/HTTPServer.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/common/http/HTTPServer.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -88,8 +88,8 @@ const char HTTPServer::CONTENT_TYPE_OCT[] = "application/octet-stream";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * @param key the header name
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * @param value the header value
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static int AddHeaders(void *cls, OLA_UNUSED enum MHD_ValueKind kind,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                      const char *key, const char *value) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static MHD_RESULT AddHeaders(void *cls, OLA_UNUSED enum MHD_ValueKind kind,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                             const char *key, const char *value) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   HTTPRequest *request = static_cast<HTTPRequest*>(cls);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   string key_string = key;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   string value_string = value;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -110,11 +110,12 @@ static int AddHeaders(void *cls, OLA_UNUSED enum MHD_ValueKind kind,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * @param off the offset of the data
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * @param size the number of bytes available
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int IteratePost(void *request_cls, OLA_UNUSED enum MHD_ValueKind kind,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                const char *key, OLA_UNUSED const char *filename,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                OLA_UNUSED const char *content_type,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                OLA_UNUSED const char *transfer_encoding, const char *data,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                OLA_UNUSED uint64_t off, OLA_UNUSED size_t size) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++MHD_RESULT IteratePost(void *request_cls, OLA_UNUSED enum MHD_ValueKind kind,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                       const char *key, OLA_UNUSED const char *filename,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                       OLA_UNUSED const char *content_type,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                       OLA_UNUSED const char *transfer_encoding,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                       const char *data,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                       OLA_UNUSED uint64_t off, OLA_UNUSED size_t size) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   // libmicrohttpd has a bug where the size isn't set correctly.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   HTTPRequest *request = static_cast<HTTPRequest*>(request_cls);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   string value(data);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -129,22 +130,23 @@ int IteratePost(void *request_cls, OLA_UNUSED enum MHD_ValueKind kind,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * This sets up HTTPRequest & HTTPResponse objects and then calls
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * DispatchRequest.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static int HandleRequest(void *http_server_ptr,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                         struct MHD_Connection *connection,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                         const char *url,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                         const char *method,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                         const char *version,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                         const char *upload_data,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                         size_t *upload_data_size,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                         void **ptr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static MHD_RESULT HandleRequest(void *http_server_ptr,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                struct MHD_Connection *connection,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                const char *url,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                const char *method,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                const char *version,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                const char *upload_data,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                size_t *upload_data_size,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                void **ptr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   HTTPServer *http_server = static_cast<HTTPServer*>(http_server_ptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   HTTPRequest *request;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   // on the first call ptr is null
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (*ptr == NULL) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     request = new HTTPRequest(url, method, version, connection);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (!request)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!request) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       return MHD_NO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (!request->Init()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       delete request;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -156,14 +158,16 @@ static int HandleRequest(void *http_server_ptr,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   request = static_cast<HTTPRequest*>(*ptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (request->InFlight())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (request->InFlight()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // don't dispatch more than once
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return MHD_YES;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (request->Method() == MHD_HTTP_METHOD_GET) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     HTTPResponse *response = new HTTPResponse(connection);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     request->SetInFlight();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    return http_server->DispatchRequest(request, response);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return static_cast<MHD_RESULT>(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      http_server->DispatchRequest(request, response));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } else if (request->Method() == MHD_HTTP_METHOD_POST) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (*upload_data_size != 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -173,7 +177,8 @@ static int HandleRequest(void *http_server_ptr,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     request->SetInFlight();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     HTTPResponse *response = new HTTPResponse(connection);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    return http_server->DispatchRequest(request, response);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return static_cast<MHD_RESULT>(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      http_server->DispatchRequest(request, response));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return MHD_NO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -188,8 +193,9 @@ void RequestCompleted(void*,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                       struct MHD_Connection*,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                       void **request_cls,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                       enum MHD_RequestTerminationCode) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (!request_cls)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (!request_cls) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   delete static_cast<HTTPRequest*>(*request_cls);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   *request_cls = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -235,8 +241,9 @@ bool HTTPRequest::Init() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * @brief Cleanup this request object
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HTTPRequest::~HTTPRequest() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (m_processor)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (m_processor) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     MHD_destroy_post_processor(m_processor);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -286,10 +293,11 @@ void HTTPRequest::ProcessPostData(const char *data, size_t *data_size) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const string HTTPRequest::GetHeader(const string &key) const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   map<string, string>::const_iterator iter = m_headers.find(key);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (iter == m_headers.end())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (iter == m_headers.end()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return "";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return iter->second;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -302,10 +310,11 @@ const string HTTPRequest::GetParameter(const string &key) const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   const char *value = MHD_lookup_connection_value(m_connection,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                                   MHD_GET_ARGUMENT_KIND,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                                   key.c_str());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (value)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (value) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return string(value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return string();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -339,10 +348,11 @@ bool HTTPRequest::CheckParameterExists(const string &key) const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const string HTTPRequest::GetPostParameter(const string &key) const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   map<string, string>::const_iterator iter = m_post_params.find(key);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (iter == m_post_params.end())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (iter == m_post_params.end()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return "";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return iter->second;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -386,10 +396,11 @@ int HTTPResponse::SendJson(const JsonValue &json) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       static_cast<void*>(const_cast<char*>(output.data())),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       output.length());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   HeadersMultiMap::const_iterator iter;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  for (iter = m_headers.begin(); iter != m_headers.end(); ++iter)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  for (iter = m_headers.begin(); iter != m_headers.end(); ++iter) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     MHD_add_response_header(response,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             iter->first.c_str(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             iter->second.c_str());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int ret = MHD_queue_response(m_connection, m_status_code, response);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   MHD_destroy_response(response);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -405,10 +416,11 @@ int HTTPResponse::Send() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   struct MHD_Response *response = HTTPServer::BuildResponse(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       static_cast<void*>(const_cast<char*>(m_data.data())),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       m_data.length());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  for (iter = m_headers.begin(); iter != m_headers.end(); ++iter)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  for (iter = m_headers.begin(); iter != m_headers.end(); ++iter) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     MHD_add_response_header(response,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             iter->first.c_str(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             iter->second.c_str());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int ret = MHD_queue_response(m_connection, m_status_code, response);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   MHD_destroy_response(response);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -443,8 +455,9 @@ HTTPServer::~HTTPServer() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     MHD_stop_daemon(m_httpd);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   map<string, BaseHTTPCallback*>::const_iterator iter;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  for (iter = m_handlers.begin(); iter != m_handlers.end(); ++iter)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  for (iter = m_handlers.begin(); iter != m_handlers.end(); ++iter) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     delete iter->second;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (m_default_handler) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     delete m_default_handler;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -617,17 +630,20 @@ int HTTPServer::DispatchRequest(const HTTPRequest *request,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   map<string, BaseHTTPCallback*>::iterator iter =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     m_handlers.find(request->Url());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (iter != m_handlers.end())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (iter != m_handlers.end()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return iter->second->Run(request, response);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   map<string, static_file_info>::iterator file_iter =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     m_static_content.find(request->Url());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (file_iter != m_static_content.end())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (file_iter != m_static_content.end()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return ServeStaticContent(&(file_iter->second), response);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (m_default_handler)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (m_default_handler) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return m_default_handler->Run(request, response);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return ServeNotFound(response);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -642,8 +658,9 @@ int HTTPServer::DispatchRequest(const HTTPRequest *request,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool HTTPServer::RegisterHandler(const string &path,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                  BaseHTTPCallback *handler) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   map<string, BaseHTTPCallback*>::const_iterator iter = m_handlers.find(path);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (iter != m_handlers.end())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (iter != m_handlers.end()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   pair<string, BaseHTTPCallback*> pair(path, handler);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   m_handlers.insert(pair);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -678,8 +695,9 @@ bool HTTPServer::RegisterFile(const std::string &path,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   map<string, static_file_info>::const_iterator file_iter = (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       m_static_content.find(path));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (file_iter != m_static_content.end())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (file_iter != m_static_content.end()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   static_file_info file_info;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   file_info.file_path = file;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -706,13 +724,15 @@ void HTTPServer::RegisterDefaultHandler(BaseHTTPCallback *handler) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void HTTPServer::Handlers(vector<string> *handlers) const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   map<string, BaseHTTPCallback*>::const_iterator iter;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  for (iter = m_handlers.begin(); iter != m_handlers.end(); ++iter)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  for (iter = m_handlers.begin(); iter != m_handlers.end(); ++iter) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     handlers->push_back(iter->first);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   map<string, static_file_info>::const_iterator file_iter;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   for (file_iter = m_static_content.begin();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       file_iter != m_static_content.end(); ++file_iter)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       file_iter != m_static_content.end(); ++file_iter) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     handlers->push_back(file_iter->first);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -806,10 +826,11 @@ int HTTPServer::ServeStaticContent(static_file_info *file_info,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   struct MHD_Response *mhd_response = BuildResponse(static_cast<void*>(data),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                                     length);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (!file_info->content_type.empty())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if (!file_info->content_type.empty()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     MHD_add_response_header(mhd_response,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             MHD_HTTP_HEADER_CONTENT_TYPE,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             file_info->content_type.c_str());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int ret = MHD_queue_response(response->Connection(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                MHD_HTTP_OK,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/include/ola/http/HTTPServer.h b/include/ola/http/HTTPServer.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 0ec37e3a5..560d30ca2 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/include/ola/http/HTTPServer.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/include/ola/http/HTTPServer.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -45,6 +45,17 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <string>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <vector>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Beginning with v0.9.71, libmicrohttpd changed the return type of most
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// functions from int to enum MHD_Result
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// https://git.gnunet.org/gnunet.git/tree/src/include/gnunet_mhd_compat.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// proposes to define a constant for the return type so it works well
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// with all versions of libmicrohttpd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if MHD_VERSION >= 0x00097002
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define MHD_RESULT enum MHD_Result
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define MHD_RESULT int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ namespace ola {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ namespace http {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/net/ola/files/patch-protobuf3.diff b/net/ola/files/patch-protobuf3.diff
</span><span style='display:block; white-space:pre;color:#808080;'>index ef48e96d32c..c8c5fac1a02 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/net/ola/files/patch-protobuf3.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/net/ola/files/patch-protobuf3.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -54,51 +54,3 @@ index 6080932e9..d3b8cc8f8 100644
</span>  AC_SUBST([libprotobuf_CFLAGS])
  
  AC_ARG_WITH([protoc],
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/protoc/CppFileGenerator.cpp b/protoc/CppFileGenerator.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 518c17879..e7dd95ccb 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/protoc/CppFileGenerator.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/protoc/CppFileGenerator.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -196,14 +196,6 @@ void FileGenerator::GenerateBuildDescriptors(Printer* printer) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       "assigndescriptorsname", GlobalAssignDescriptorsName(m_output_name));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     printer->Indent();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    // Make sure the file has found its way into the pool.  If a descriptor
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    // is requested *during* static init then AddDescriptors() may not have
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    // been called yet, so we call it manually.  Note that it's fine if
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    // AddDescriptors() is called multiple times.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    printer->Print(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--      "$adddescriptorsname$();\n",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--      "adddescriptorsname", GlobalAddDescriptorsName(m_file->name()));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     // Get the file's descriptor from the pool.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     printer->Print(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-       "const ::google::protobuf::FileDescriptor* file =\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/protoc/GeneratorHelpers.cpp b/protoc/GeneratorHelpers.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 19609181e..6f619b5c0 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/protoc/GeneratorHelpers.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/protoc/GeneratorHelpers.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -104,11 +104,6 @@ string FilenameIdentifier(const string& filename) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return result;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--// Return the name of the AddDescriptors() function for a given file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--string GlobalAddDescriptorsName(const string& filename) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  return "protobuf_AddDesc_" + FilenameIdentifier(filename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // Return the name of the AssignDescriptors() function for a given file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- string GlobalAssignDescriptorsName(const string& filename) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return "protobuf_AssignDesc_" + FilenameIdentifier(filename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/protoc/GeneratorHelpers.h b/protoc/GeneratorHelpers.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 35efdbb04..fa91a915d 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/protoc/GeneratorHelpers.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/protoc/GeneratorHelpers.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -67,9 +67,6 @@ string StripProto(const string& filename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // Convert a file name into a valid identifier.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- string FilenameIdentifier(const string& filename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--// Return the name of the AddDescriptors() function for a given file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--string GlobalAddDescriptorsName(const string& filename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // Return the name of the AssignDescriptors() function for a given file.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- string GlobalAssignDescriptorsName(const string& filename);
</span></pre><pre style='margin:0'>

</pre>