Procházet zdrojové kódy

MHD_daemon_get_info_fixed(): added information about used TLS backend

Evgeny Grin (Karlson2k) před 1 rokem
rodič
revize
13b4ea85ea

+ 14 - 0
src/include/microhttpd2.h

@@ -9204,6 +9204,15 @@ enum MHD_DaemonInfoFixedType
    */
    */
   MHD_DAEMON_INFO_FIXED_AGGREAGATE_FD = 3
   MHD_DAEMON_INFO_FIXED_AGGREAGATE_FD = 3
   ,
   ,
+  /**
+   * Get the TLS backend used by the daemon.
+   * The value #MHD_TLS_BACKEND_ANY is never set in the returned data.
+   * The value #MHD_TLS_BACKEND_NONE is set if the daemon does not use TLS.
+   * If MHD built without TLS support then #MHD_TLS_BACKEND_NONE is always set.
+   * The result is placed in @a v_tls_backend member.
+   */
+  MHD_DAEMON_INFO_FIXED_TLS_TYPE = 100
+  ,
 
 
   /* * Sentinel * */
   /* * Sentinel * */
   /**
   /**
@@ -9237,6 +9246,11 @@ union MHD_DaemonInfoFixedData
    */
    */
   uint_least16_t v_port;
   uint_least16_t v_port;
 
 
+  /**
+   * The TLS backend
+   */
+  enum MHD_TlsBackend v_tls_backend;
+
   /**
   /**
    * Unused member.
    * Unused member.
    * Help enforcing future-proof alignment of the union.
    * Help enforcing future-proof alignment of the union.

+ 14 - 0
src/include/microhttpd2_main.h.in

@@ -4582,6 +4582,15 @@ enum MHD_DaemonInfoFixedType
    */
    */
   MHD_DAEMON_INFO_FIXED_AGGREAGATE_FD = 3
   MHD_DAEMON_INFO_FIXED_AGGREAGATE_FD = 3
   ,
   ,
+  /**
+   * Get the TLS backend used by the daemon.
+   * The value #MHD_TLS_BACKEND_ANY is never set in the returned data.
+   * The value #MHD_TLS_BACKEND_NONE is set if the daemon does not use TLS.
+   * If MHD built without TLS support then #MHD_TLS_BACKEND_NONE is always set.
+   * The result is placed in @a v_tls_backend member.
+   */
+  MHD_DAEMON_INFO_FIXED_TLS_TYPE = 100
+  ,
 
 
   /* * Sentinel * */
   /* * Sentinel * */
   /**
   /**
@@ -4615,6 +4624,11 @@ union MHD_DaemonInfoFixedData
    */
    */
   uint_least16_t v_port;
   uint_least16_t v_port;
 
 
+  /**
+   * The TLS backend
+   */
+  enum MHD_TlsBackend v_tls_backend;
+
   /**
   /**
    * Unused member.
    * Unused member.
    * Help enforcing future-proof alignment of the union.
    * Help enforcing future-proof alignment of the union.

+ 46 - 0
src/mhd2/daemon_get_info.c

@@ -26,12 +26,20 @@
 
 
 #include "mhd_sys_options.h"
 #include "mhd_sys_options.h"
 
 
+#include "mhd_unreachable.h"
+
 #include "sys_base_types.h"
 #include "sys_base_types.h"
 #include "sys_sockets_types.h"
 #include "sys_sockets_types.h"
 
 
 #include "mhd_socket_type.h"
 #include "mhd_socket_type.h"
 #include "mhd_daemon.h"
 #include "mhd_daemon.h"
 #include "events_process.h"
 #include "events_process.h"
+#ifdef MHD_SUPPORT_HTTPS
+#  include "mhd_tls_choice.h"
+#  ifdef MHD_USE_MULTITLS
+#    include "tls_multi_daemon_data.h"
+#  endif
+#endif
 
 
 #include "mhd_public_api.h"
 #include "mhd_public_api.h"
 
 
@@ -84,6 +92,44 @@ MHD_daemon_get_info_fixed_sz (struct MHD_Daemon *daemon,
     return MHD_SC_INFO_GET_TYPE_NOT_SUPP_BY_BUILD;
     return MHD_SC_INFO_GET_TYPE_NOT_SUPP_BY_BUILD;
 #endif
 #endif
     break;
     break;
+  case MHD_DAEMON_INFO_FIXED_TLS_TYPE:
+    if (sizeof(output_buf->v_tls_backend) > output_buf_size)
+      return MHD_SC_INFO_GET_BUFF_TOO_SMALL;
+    if (! mhd_D_HAS_TLS (daemon))
+      output_buf->v_tls_backend = MHD_TLS_BACKEND_NONE;
+    else
+    {
+#if ! defined(MHD_SUPPORT_HTTPS)
+      mhd_UNREACHABLE ();
+#elif defined(MHD_USE_MULTITLS)
+      switch (daemon->tls->choice)
+      {
+#  ifdef MHD_SUPPORT_GNUTLS
+      case mhd_TLS_MULTI_ROUTE_GNU:
+        output_buf->v_tls_backend = MHD_TLS_BACKEND_GNUTLS;
+        break;
+#  endif
+#  ifdef MHD_SUPPORT_OPENSSL
+      case mhd_TLS_MULTI_ROUTE_OPEN:
+        output_buf->v_tls_backend = MHD_TLS_BACKEND_OPENSSL;
+        break;
+#  endif
+      case mhd_TLS_MULTI_ROUTE_NONE:
+      default:
+        mhd_UNREACHABLE ();
+        break;
+      }
+#elif defined(MHD_SUPPORT_GNUTLS)
+      output_buf->v_tls_backend = MHD_TLS_BACKEND_GNUTLS;
+#elif defined(MHD_SUPPORT_OPENSSL)
+      output_buf->v_tls_backend = MHD_TLS_BACKEND_OPENSSL;
+#else
+#error No TLS backends enabled, while TLS support is enabled
+#endif
+    }
+    break;
+    return MHD_SC_OK;
+
   case MHD_DAEMON_INFO_FIXED_SENTINEL:
   case MHD_DAEMON_INFO_FIXED_SENTINEL:
   default:
   default:
     break;
     break;