added the new option MIO_JSON_PERMIT_WORD_KEY

This commit is contained in:
hyung-hwan 2021-07-14 05:22:03 +00:00
parent 72422be8b8
commit 3e0654e131
7 changed files with 18 additions and 17 deletions

View File

@ -119,7 +119,7 @@ int main (int argc, char* argv[])
for (i = 1; i < argc; i++) for (i = 1; i < argc; i++)
{ {
if (strcmp(argv[i], "--permit-word-key") == 0) o |= MIO_JSON_PERMITWORDKEY; if (strcmp(argv[i], "--permit-word-key") == 0) o |= MIO_JSON_PERMIT_WORD_KEY;
} }
mio = mio_open(MIO_NULL, 0, MIO_NULL, 512, MIO_NULL); mio = mio_open(MIO_NULL, 0, MIO_NULL, 512, MIO_NULL);

View File

@ -871,7 +871,7 @@ static MIO_INLINE int parse_initial_line_and_headers (mio_htrd_t* htrd, const mi
p = MIO_BECS_PTR(&htrd->fed.b.raw); p = MIO_BECS_PTR(&htrd->fed.b.raw);
#if 0 #if 0
if (htrd->option & MIO_HTRD_SKIPEMPTYLINES) if (htrd->option & MIO_HTRD_SKIP_EMPTY_LINES)
while (is_whspace_octet(*p)) p++; while (is_whspace_octet(*p)) p++;
else else
#endif #endif
@ -880,7 +880,7 @@ static MIO_INLINE int parse_initial_line_and_headers (mio_htrd_t* htrd, const mi
MIO_ASSERT (htrd->mio, *p != '\0'); MIO_ASSERT (htrd->mio, *p != '\0');
/* parse the initial line */ /* parse the initial line */
if (!(htrd->option & MIO_HTRD_SKIPINITIALLINE)) if (!(htrd->option & MIO_HTRD_SKIP_INITIAL_LINE))
{ {
p = parse_initial_line(htrd, p); p = parse_initial_line(htrd, p);
if (MIO_UNLIKELY(!p)) return -1; if (MIO_UNLIKELY(!p)) return -1;
@ -1100,7 +1100,7 @@ int mio_htrd_feed (mio_htrd_t* htrd, const mio_bch_t* req, mio_oow_t len, mio_oo
register mio_bch_t b = *ptr++; register mio_bch_t b = *ptr++;
#if 0 #if 0
if (htrd->option & MIO_HTRD_SKIPEMPTYLINES && if (htrd->option & MIO_HTRD_SKIP_EMPTY_LINES &&
htrd->fed.s.plen <= 0 && is_whspace_octet(b)) htrd->fed.s.plen <= 0 && is_whspace_octet(b))
{ {
/* let's drop leading whitespaces across multiple /* let's drop leading whitespaces across multiple
@ -1445,7 +1445,7 @@ mio_printf (MIO_T("CONTENT_LENGTH %d, RAW HEADER LENGTH %d\n"),
/* since there are more to handle, i mark that /* since there are more to handle, i mark that
* htrd is in need of some data. this may * htrd is in need of some data. this may
* not be really compatible with SKIPEMPTYLINES. * not be really compatible with SKIP_EMPTY_LINES.
* SHOULD I simply remove the option? */ * SHOULD I simply remove the option? */
htrd->clean = 0; htrd->clean = 0;
} }

View File

@ -963,7 +963,7 @@ int mio_svc_htts_docgi (mio_svc_htts_t* htts, mio_dev_sck_t* csck, mio_htre_t* r
cgi->peer_htrd = mio_htrd_open(mio, MIO_SIZEOF(*cgi_peer)); cgi->peer_htrd = mio_htrd_open(mio, MIO_SIZEOF(*cgi_peer));
if (MIO_UNLIKELY(!cgi->peer_htrd)) goto oops; if (MIO_UNLIKELY(!cgi->peer_htrd)) goto oops;
mio_htrd_setoption (cgi->peer_htrd, MIO_HTRD_SKIPINITIALLINE | MIO_HTRD_RESPONSE); mio_htrd_setoption (cgi->peer_htrd, MIO_HTRD_SKIP_INITIAL_LINE | MIO_HTRD_RESPONSE);
mio_htrd_setrecbs (cgi->peer_htrd, &cgi_peer_htrd_recbs); mio_htrd_setrecbs (cgi->peer_htrd, &cgi_peer_htrd_recbs);
cgi_peer = mio_htrd_getxtn(cgi->peer_htrd); cgi_peer = mio_htrd_getxtn(cgi->peer_htrd);

View File

@ -889,7 +889,7 @@ int mio_svc_htts_dothr (mio_svc_htts_t* htts, mio_dev_sck_t* csck, mio_htre_t* r
thr_state->peer_htrd = mio_htrd_open(mio, MIO_SIZEOF(*thr_peer)); thr_state->peer_htrd = mio_htrd_open(mio, MIO_SIZEOF(*thr_peer));
if (MIO_UNLIKELY(!thr_state->peer_htrd)) goto oops; if (MIO_UNLIKELY(!thr_state->peer_htrd)) goto oops;
mio_htrd_setoption (thr_state->peer_htrd, MIO_HTRD_SKIPINITIALLINE | MIO_HTRD_RESPONSE); mio_htrd_setoption (thr_state->peer_htrd, MIO_HTRD_SKIP_INITIAL_LINE | MIO_HTRD_RESPONSE);
mio_htrd_setrecbs (thr_state->peer_htrd, &thr_peer_htrd_recbs); mio_htrd_setrecbs (thr_state->peer_htrd, &thr_peer_htrd_recbs);
thr_peer = mio_htrd_getxtn(thr_state->peer_htrd); thr_peer = mio_htrd_getxtn(thr_state->peer_htrd);

View File

@ -403,7 +403,7 @@ static int handle_word_value_char (mio_json_t* json, mio_ooci_t c)
mio_json_inst_t inst; mio_json_inst_t inst;
int ok; int ok;
ok = (json->option & MIO_JSON_PERMITWORDKEY)? ok = (json->option & MIO_JSON_PERMIT_WORD_KEY)?
(mio_is_ooch_alpha(c) || mio_is_ooch_digit(c) || c == '_'): (mio_is_ooch_alpha(c) || mio_is_ooch_digit(c) || c == '_'):
mio_is_ooch_alpha(c); mio_is_ooch_alpha(c);
if (ok) if (ok)
@ -417,7 +417,7 @@ static int handle_word_value_char (mio_json_t* json, mio_ooci_t c)
if (mio_comp_oochars_bcstr(json->tok.ptr, json->tok.len, "null", 0) == 0) inst = MIO_JSON_INST_NIL; if (mio_comp_oochars_bcstr(json->tok.ptr, json->tok.len, "null", 0) == 0) inst = MIO_JSON_INST_NIL;
else if (mio_comp_oochars_bcstr(json->tok.ptr, json->tok.len, "true", 0) == 0) inst = MIO_JSON_INST_TRUE; else if (mio_comp_oochars_bcstr(json->tok.ptr, json->tok.len, "true", 0) == 0) inst = MIO_JSON_INST_TRUE;
else if (mio_comp_oochars_bcstr(json->tok.ptr, json->tok.len, "false", 0) == 0) inst = MIO_JSON_INST_FALSE; else if (mio_comp_oochars_bcstr(json->tok.ptr, json->tok.len, "false", 0) == 0) inst = MIO_JSON_INST_FALSE;
else if (json->option & MIO_JSON_PERMITWORDKEY) inst = __INST_WORD_STRING; /* internal only */ else if (json->option & MIO_JSON_PERMIT_WORD_KEY) inst = __INST_WORD_STRING; /* internal only */
else else
{ {
mio_seterrbfmt (json->mio, MIO_EINVAL, "invalid word value - %.*js", json->tok.len, json->tok.ptr); mio_seterrbfmt (json->mio, MIO_EINVAL, "invalid word value - %.*js", json->tok.len, json->tok.ptr);

View File

@ -52,8 +52,8 @@ typedef enum mio_htrd_errnum_t mio_htrd_errnum_t;
*/ */
enum mio_htrd_option_t enum mio_htrd_option_t
{ {
MIO_HTRD_SKIPEMPTYLINES = ((mio_bitmask_t)1 << 0), /**< skip leading empty lines before the initial line */ MIO_HTRD_SKIP_EMPTY_LINES = ((mio_bitmask_t)1 << 0), /**< skip leading empty lines before the initial line */
MIO_HTRD_SKIPINITIALLINE = ((mio_bitmask_t)1 << 1), /**< skip processing an initial line */ MIO_HTRD_SKIP_INITIAL_LINE = ((mio_bitmask_t)1 << 1), /**< skip processing an initial line */
MIO_HTRD_CANONQPATH = ((mio_bitmask_t)1 << 2), /**< canonicalize the query path */ MIO_HTRD_CANONQPATH = ((mio_bitmask_t)1 << 2), /**< canonicalize the query path */
MIO_HTRD_REQUEST = ((mio_bitmask_t)1 << 3), /**< parse input as a request */ MIO_HTRD_REQUEST = ((mio_bitmask_t)1 << 3), /**< parse input as a request */
MIO_HTRD_RESPONSE = ((mio_bitmask_t)1 << 4), /**< parse input as a response */ MIO_HTRD_RESPONSE = ((mio_bitmask_t)1 << 4), /**< parse input as a response */

View File

@ -123,7 +123,8 @@ struct mio_json_state_node_t
enum mio_json_option_t enum mio_json_option_t
{ {
/* allow an unquoted word as an object key */ /* allow an unquoted word as an object key */
MIO_JSON_PERMITWORDKEY = ((mio_bitmask_t)1 << 0), MIO_JSON_PERMIT_WORD_KEY = ((mio_bitmask_t)1 << 0),
MIO_JSON_OPTIONAL_COMMA = ((mio_bitmask_t)1 << 1)
}; };
typedef enum mio_json_option_t mio_json_option_t; typedef enum mio_json_option_t mio_json_option_t;