<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>