[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.
- [libmicrohttpd2] branch master updated (cdd4c1f -> a71f9db), Admin, 2025/06/13
- [libmicrohttpd2] 09/21: mhd_str: added 8 bit -> 2 xdigits one-pass encoding, Admin, 2025/06/13
- [libmicrohttpd2] 11/21: mhd_str: optimised caseless comparisons and case transformations, Admin, 2025/06/13
- [libmicrohttpd2] 13/21: parse_http_std_method(): optimised,
Admin <=
- [libmicrohttpd2] 21/21: perf_replies: added response sizes 8 MiB and 101 MiB, Admin, 2025/06/13
- [libmicrohttpd2] 02/21: bootstrap: make sure that pre-commit hook really used, Admin, 2025/06/13
- [libmicrohttpd2] 01/21: conn_data_send.c: fixed large sending, added some asserts, Admin, 2025/06/13
- [libmicrohttpd2] 04/21: xdigittovalue(): optimised., Admin, 2025/06/13
- [libmicrohttpd2] 18/21: Renamed test_postprocessor -> test_postparser to match API naming, Admin, 2025/06/13
- [libmicrohttpd2] 16/21: configure: minor check improvement, Admin, 2025/06/13
- [libmicrohttpd2] 12/21: mhd_locks: added W32 implementation based on SRW locks (and minor improvements), Admin, 2025/06/13
- [libmicrohttpd2] 10/21: configure: added release build linker flags, Admin, 2025/06/13
- [libmicrohttpd2] 15/21: POST parser: improved parsing performance by storing complete delimiter instead of boundary, Admin, 2025/06/13
- [libmicrohttpd2] 14/21: POST parser: optimised large upload processing, Admin, 2025/06/13