gnunet-svn
[Top][All Lists]
Advanced

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

[libmicrohttpd2] 13/21: parse_http_std_method(): optimised


From: Admin
Subject: [libmicrohttpd2] 13/21: parse_http_std_method(): optimised
Date: Fri, 13 Jun 2025 23:38:21 +0200

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

karlson2k pushed a commit to branch master
in repository libmicrohttpd2.

commit 33c06771bdf2b357c0659c6cec35813d3a515db1
Author: Evgeny Grin (Karlson2k) <k2k@drgrin.dev>
AuthorDate: Fri Jun 13 14:04:55 2025 +0200

    parse_http_std_method(): optimised
---
 src/mhd2/stream_process_request.c | 120 +++++++++++++++++++++++++++++---------
 1 file changed, 91 insertions(+), 29 deletions(-)

diff --git a/src/mhd2/stream_process_request.c 
b/src/mhd2/stream_process_request.c
index 5bdf8d3..baf5afa 100644
--- a/src/mhd2/stream_process_request.c
+++ b/src/mhd2/stream_process_request.c
@@ -461,35 +461,97 @@ parse_http_std_method (struct MHD_Connection *restrict 
connection)
   mhd_assert (NULL != m);
   mhd_assert (0 != len);
 
-  if ((mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_GET) == len) &&
-      (0 == memcmp (m, MHD_HTTP_METHOD_STR_GET, len)))
-    connection->rq.http_mthd = mhd_HTTP_METHOD_GET;
-  else if ((mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_HEAD) == len) &&
-           (0 == memcmp (m, MHD_HTTP_METHOD_STR_HEAD, len)))
-    connection->rq.http_mthd = mhd_HTTP_METHOD_HEAD;
-  else if ((mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_POST) == len) &&
-           (0 == memcmp (m, MHD_HTTP_METHOD_STR_POST, len)))
-    connection->rq.http_mthd = mhd_HTTP_METHOD_POST;
-  else if ((mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_PUT) == len) &&
-           (0 == memcmp (m, MHD_HTTP_METHOD_STR_PUT, len)))
-    connection->rq.http_mthd = mhd_HTTP_METHOD_PUT;
-  else if ((mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_DELETE) == len) &&
-           (0 == memcmp (m, MHD_HTTP_METHOD_STR_DELETE, len)))
-    connection->rq.http_mthd = mhd_HTTP_METHOD_DELETE;
-  else if ((mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_CONNECT) == len) &&
-           (0 == memcmp (m, MHD_HTTP_METHOD_STR_CONNECT, len)))
-    connection->rq.http_mthd = mhd_HTTP_METHOD_CONNECT;
-  else if ((mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_OPTIONS) == len) &&
-           (0 == memcmp (m, MHD_HTTP_METHOD_STR_OPTIONS, len)))
-    connection->rq.http_mthd = mhd_HTTP_METHOD_OPTIONS;
-  else if ((mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_TRACE) == len) &&
-           (0 == memcmp (m, MHD_HTTP_METHOD_STR_TRACE, len)))
-    connection->rq.http_mthd = mhd_HTTP_METHOD_TRACE;
-  else if ((mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_ASTERISK) == len) &&
-           (0 == memcmp (m, MHD_HTTP_METHOD_STR_ASTERISK, len)))
-    connection->rq.http_mthd = mhd_HTTP_METHOD_ASTERISK;
-  else
-    connection->rq.http_mthd = mhd_HTTP_METHOD_OTHER;
+  switch (len)
+  {
+  case 3: /* mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_GET) */
+          /* mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_PUT) */
+    mhd_assert (len == mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_GET));
+    mhd_assert (len == mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_PUT));
+    if (0 == memcmp (m,
+                     MHD_HTTP_METHOD_STR_GET,
+                     mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_GET)))
+    {
+      connection->rq.http_mthd = mhd_HTTP_METHOD_GET;
+      return;
+    }
+    else if (0 == memcmp (m,
+                          MHD_HTTP_METHOD_STR_PUT,
+                          mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_PUT)))
+    {
+      connection->rq.http_mthd = mhd_HTTP_METHOD_PUT;
+      return;
+    }
+    break;
+  case 4: /* mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_HEAD) */
+          /* mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_POST) */
+    mhd_assert (len == mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_HEAD));
+    mhd_assert (len == mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_POST));
+    if (0 == memcmp (m,
+                     MHD_HTTP_METHOD_STR_HEAD,
+                     mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_HEAD)))
+    {
+      connection->rq.http_mthd = mhd_HTTP_METHOD_HEAD;
+      return;
+    }
+    else if (0 == memcmp (m,
+                          MHD_HTTP_METHOD_STR_POST,
+                          mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_POST)))
+    {
+      connection->rq.http_mthd = mhd_HTTP_METHOD_POST;
+      return;
+    }
+    break;
+  case 6: /* mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_DELETE) */
+    mhd_assert (len == mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_DELETE));
+    if (0 == memcmp (m,
+                     MHD_HTTP_METHOD_STR_DELETE,
+                     mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_DELETE)))
+    {
+      connection->rq.http_mthd = mhd_HTTP_METHOD_DELETE;
+      return;
+    }
+    break;
+  case 7: /* mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_CONNECT) */
+          /* mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_OPTIONS) */
+    mhd_assert (len == mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_CONNECT));
+    mhd_assert (len == mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_OPTIONS));
+    if (0 == memcmp (m,
+                     MHD_HTTP_METHOD_STR_CONNECT,
+                     mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_CONNECT)))
+    {
+      connection->rq.http_mthd = mhd_HTTP_METHOD_CONNECT;
+      return;
+    }
+    else if (0 == memcmp (m,
+                          MHD_HTTP_METHOD_STR_OPTIONS,
+                          mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_OPTIONS)))
+    {
+      connection->rq.http_mthd = mhd_HTTP_METHOD_OPTIONS;
+      return;
+    }
+    break;
+  case 5: /* mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_TRACE) */
+    mhd_assert (len == mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_TRACE));
+    if (0 == memcmp (m,
+                     MHD_HTTP_METHOD_STR_TRACE,
+                     mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_TRACE)))
+    {
+      connection->rq.http_mthd = mhd_HTTP_METHOD_TRACE;
+      return;
+    }
+    break;
+  case 1: /* mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_ASTERISK) */
+    mhd_assert (len == mhd_SSTR_LEN (MHD_HTTP_METHOD_STR_ASTERISK));
+    if ('*' == m[0])
+    {
+      connection->rq.http_mthd = mhd_HTTP_METHOD_ASTERISK;
+      return;
+    }
+    break;
+  default:
+    break; /* Handled after the "switch()" body */
+  }
+  connection->rq.http_mthd = mhd_HTTP_METHOD_OTHER;
 }
 
 

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