gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libmicrohttpd] branch master updated (75dbfbc7 -> b6737ab3)


From: gnunet
Subject: [libmicrohttpd] branch master updated (75dbfbc7 -> b6737ab3)
Date: Sun, 12 Nov 2023 18:16:47 +0100

This is an automated email from the git hooks/post-receive script.

karlson2k pushed a change to branch master
in repository libmicrohttpd.

    from 75dbfbc7 Implemented and documented MHD_OPTION_LISTEN_SOCKET followed 
by MHD_INVALID_SOCKET
     new c7998d3a Fixed ignored daemon port when MHD_OPTION_LISTEN_SOCKET or 
MHD_OPTION_SOCK_ADDR are used as documented
     new bcdb5298 MHD_start_daemon(): further improved UNIX / IP socket 
detection
     new b6737ab3 Added check for signed socket type

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 configure.ac            | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
 src/microhttpd/daemon.c | 46 ++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 93 insertions(+), 2 deletions(-)

diff --git a/configure.ac b/configure.ac
index f2abfa43..e3cfba07 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2120,6 +2120,55 @@ AS_VAR_IF([mhd_cv_fd_setsize_overridable],["no"],
   [AC_DEFINE([HAS_FD_SETSIZE_OVERRIDABLE],[1],[Define to 1 i][f your system 
allow overriding the value of FD_SETSIZE macro])]
 )
 
+AC_CACHE_CHECK([whether socket value is a signed type],[mhd_cv_socket_signed],
+  [
+    AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_SOCKLIB_H
+#include <sockLib.h>
+#endif
+#if defined(_WIN32) && ! defined(__CYGWIN__)
+#include <winsock2.h>
+#endif
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+
+/* Keep in sync with microhttpd.h */
+#if ! defined(_WIN32) || defined(_SYS_TYPES_FD_SET)
+typedef int MHD_socket;
+#else /* defined(_WIN32) && ! defined(_SYS_TYPES_FD_SET) */
+typedef SOCKET MHD_socket;
+#endif /* defined(_WIN32) && ! defined(_SYS_TYPES_FD_SET) */
+
+int main(void)
+{
+  int test_arr[2 - 5*(!!(0 < ((MHD_socket)-1)))];
+  test_arr[1] = 0;
+  return test_arr[1];
+}
+          ]]
+        )
+      ],
+      [mhd_cv_socket_signed="yes"],
+      [mhd_cv_socket_signed="no"]
+    )
+  ]
+)
+AS_VAR_IF([mhd_cv_socket_signed],["yes"],
+  [AC_DEFINE([HAS_SIGNED_SOCKET],[1],[Define to 1 i][f your socket type is 
signed])]
+)
 
 MHD_CHECK_FUNC([writev],
   [[#include <sys/uio.h>]],
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index 644e134f..b2420ca8 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -7409,7 +7409,7 @@ process_interim_params (struct MHD_Daemon *d,
     {
       (void) 0; /* Use MHD-created socket */
     }
-#ifdef MHD_POSIX_SOCKETS
+#ifdef HAS_SIGNED_SOCKET
     else if (0 > params->listen_fd)
     {
 #ifdef HAVE_MESSAGES
@@ -7419,7 +7419,7 @@ process_interim_params (struct MHD_Daemon *d,
 #endif /* HAVE_MESSAGES */
       return false;
     }
-#endif /* MHD_POSIX_SOCKETS */
+#endif /* HAS_SIGNED_SOCKET */
     else if (0 != (d->options & MHD_USE_NO_LISTEN_SOCKET))
     {
 #ifdef HAVE_MESSAGES
@@ -7450,6 +7450,9 @@ process_interim_params (struct MHD_Daemon *d,
       d->listen_is_unix = _MHD_UNKNOWN;
 #endif /* ! SO_DOMAIN || ! AF_UNIX */
       d->listen_fd = params->listen_fd;
+#ifdef MHD_USE_GETSOCKNAME
+      d->port = 0;  /* Force use of autodetection */
+#endif /* MHD_USE_GETSOCKNAME */
     }
   }
   return true;
@@ -8032,6 +8035,43 @@ MHD_start_daemon_va (unsigned int flags,
         servaddr = (struct sockaddr *) &servaddr4;
       }
     }
+    else
+    {
+#ifdef MHD_USE_GETSOCKNAME
+      daemon->port = 0; /* Force use of autodetection */
+#else  /* ! MHD_USE_GETSOCKNAME */
+      switch (servaddr->sa_family)
+      {
+      case AF_INET:
+        {
+          struct sockaddr_in sa4;
+          memcpy (&sa4, servaddr, sizeof(sa4));  /* Required due to stronger 
alignment */
+          daemon->port = ntohs (sa4.sin_port);
+          break;
+        }
+#ifdef HAVE_INET6
+      case AF_INET6:
+        {
+          struct sockaddr_in6 sa6;
+          memcpy (&sa6, servaddr, sizeof(sa6));  /* Required due to stronger 
alignment */
+          daemon->port = ntohs (sa6.sin6_port);
+          mhd_assert (0 != (*pflags & MHD_USE_IPv6));
+          break;
+        }
+#endif /* HAVE_INET6 */
+#ifdef AF_UNIX
+      case AF_UNIX:
+        daemon->port = 0;     /* special value for UNIX domain sockets */
+        daemon->listen_is_unix = _MHD_YES;
+        break;
+#endif
+      default:
+        daemon->port = 0;     /* ugh */
+        daemon->listen_is_unix = _MHD_UNKNOWN;
+        break;
+      }
+#endif /* ! MHD_USE_GETSOCKNAME */
+    }
     daemon->listen_fd = listen_fd;
     if (0 != (*pflags & MHD_USE_IPv6))
     {
@@ -8157,6 +8197,7 @@ MHD_start_daemon_va (unsigned int flags,
           struct sockaddr_in *s4 = (struct sockaddr_in *) &bindaddr;
 
           daemon->port = ntohs (s4->sin_port);
+          daemon->listen_is_unix = _MHD_NO;
           break;
         }
 #ifdef HAVE_INET6
@@ -8165,6 +8206,7 @@ MHD_start_daemon_va (unsigned int flags,
           struct sockaddr_in6 *s6 = (struct sockaddr_in6 *) &bindaddr;
 
           daemon->port = ntohs (s6->sin6_port);
+          daemon->listen_is_unix = _MHD_NO;
           mhd_assert (0 != (*pflags & MHD_USE_IPv6));
           break;
         }

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]