Lines Matching refs:pr
10 static int _process_tokenize(mcp_parser_t *pr, const size_t max) { in _process_tokenize() argument
11 const char *s = pr->request; in _process_tokenize()
12 int len = pr->endlen; in _process_tokenize()
28 pr->tokens[curtoken] = s - pr->request; in _process_tokenize()
60 pr->tokens[curtoken] = s - pr->request; in _process_tokenize()
61 pr->ntokens = curtoken; in _process_tokenize()
67 static int _process_token_len(mcp_parser_t *pr, size_t token) { in _process_token_len() argument
68 const char *s = pr->request + pr->tokens[token]; in _process_token_len()
69 const char *e = pr->request + pr->tokens[token+1]; in _process_token_len()
77 static int _process_request_key(mcp_parser_t *pr) { in _process_request_key() argument
78 pr->klen = _process_token_len(pr, pr->keytoken); in _process_request_key()
80 pr->parsed = pr->tokens[pr->keytoken] + pr->klen + 1; in _process_request_key()
82 if (pr->request[pr->parsed-1] == ' ') { in _process_request_key()
84 pr->has_space = true; in _process_request_key()
86 pr->has_space = false; in _process_request_key()
94 size_t _process_request_next_key(mcp_parser_t *pr) { in _process_request_next_key() argument
95 const char *cur = pr->request + pr->parsed; in _process_request_next_key()
96 int remain = pr->endlen - pr->parsed; in _process_request_next_key()
103 pr->parsed++; in _process_request_next_key()
111 pr->klen = s - cur; in _process_request_next_key()
112 pr->parsed += s - cur; in _process_request_next_key()
114 pr->klen = remain; in _process_request_next_key()
115 pr->parsed += remain; in _process_request_next_key()
118 return cur - pr->request; in _process_request_next_key()
123 static int _process_request_metaflags(mcp_parser_t *pr, int token) { in _process_request_metaflags() argument
124 if (pr->ntokens <= token) { in _process_request_metaflags()
125 pr->t.meta.flags = 0; // no flags found. in _process_request_metaflags()
128 const char *cur = pr->request + pr->tokens[token]; in _process_request_metaflags()
129 const char *end = pr->request + pr->endlen; in _process_request_metaflags()
144 pr->t.meta.flags |= (uint64_t)1 << (*cur - 65); in _process_request_metaflags()
161 if (pr->t.meta.flags & ((uint64_t)1 << 48)) { in _process_request_metaflags()
162 pr->noreply = true; in _process_request_metaflags()
169 static int _process_request_meta(mcp_parser_t *pr) { in _process_request_meta() argument
170 _process_tokenize(pr, PARSER_MAX_TOKENS); in _process_request_meta()
171 if (pr->ntokens < 2) { in _process_request_meta()
172 P_DEBUG("%s: not enough tokens for meta command: %d\n", __func__, pr->ntokens); in _process_request_meta()
175 pr->keytoken = 1; in _process_request_meta()
176 _process_request_key(pr); in _process_request_meta()
179 return _process_request_metaflags(pr, 2); in _process_request_meta()
183 static int _process_request_mset(mcp_parser_t *pr) { in _process_request_mset() argument
184 _process_tokenize(pr, PARSER_MAX_TOKENS); in _process_request_mset()
185 if (pr->ntokens < 3) { in _process_request_mset()
186 P_DEBUG("%s: not enough tokens for meta set command: %d\n", __func__, pr->ntokens); in _process_request_mset()
189 pr->keytoken = 1; in _process_request_mset()
190 _process_request_key(pr); in _process_request_mset()
192 const char *cur = pr->request + pr->tokens[2]; in _process_request_mset()
206 pr->vlen = vlen; in _process_request_mset()
209 return _process_request_metaflags(pr, 3); in _process_request_mset()
213 static int _process_request_gat(mcp_parser_t *pr) { in _process_request_gat() argument
214 _process_tokenize(pr, 3); in _process_request_gat()
215 if (pr->ntokens < 3) { in _process_request_gat()
216 P_DEBUG("%s: not enough tokens for GAT: %d\n", __func__, pr->ntokens); in _process_request_gat()
220 pr->keytoken = 2; in _process_request_gat()
221 _process_request_key(pr); in _process_request_gat()
229 static int _process_request_noreply(mcp_parser_t *pr) { in _process_request_noreply() argument
230 if (pr->tokens[pr->ntokens] - pr->tokens[pr->ntokens-1] >= NOREPLYLEN in _process_request_noreply()
231 && strncmp(NOREPLYSTR, pr->request + pr->tokens[pr->ntokens-1], NOREPLYLEN) == 0) { in _process_request_noreply()
232 pr->noreply = true; in _process_request_noreply()
240 static int _process_request_storage(mcp_parser_t *pr, size_t max) { in _process_request_storage() argument
241 _process_tokenize(pr, max); in _process_request_storage()
242 if (pr->ntokens < 5) { in _process_request_storage()
243 P_DEBUG("%s: not enough tokens to storage command: %d\n", __func__, pr->ntokens); in _process_request_storage()
246 pr->keytoken = 1; in _process_request_storage()
247 _process_request_key(pr); in _process_request_storage()
251 const char *cur = pr->request + pr->tokens[4]; in _process_request_storage()
263 pr->vlen = vlen; in _process_request_storage()
265 return _process_request_noreply(pr); in _process_request_storage()
269 static int _process_request_simple(mcp_parser_t *pr, const int min, const int max) { in _process_request_simple() argument
270 _process_tokenize(pr, max); in _process_request_simple()
271 if (pr->ntokens < min) { in _process_request_simple()
272 P_DEBUG("%s: not enough tokens for simple request: %d\n", __func__, pr->ntokens); in _process_request_simple()
275 pr->keytoken = 1; // second token is usually the key... stupid GAT. in _process_request_simple()
277 _process_request_key(pr); in _process_request_simple()
278 return _process_request_noreply(pr); in _process_request_simple()
286 int process_request(mcp_parser_t *pr, const char *command, size_t cmdlen) { in process_request() argument
302 pr->endlen = cmdlen - 2; in process_request()
304 pr->endlen = cmdlen - 1; in process_request()
307 const char *s = memchr(command, ' ', pr->endlen); in process_request()
311 cl = pr->endlen; in process_request()
313 pr->keytoken = 0; in process_request()
314 pr->has_space = false; in process_request()
315 pr->parsed = cl; in process_request()
316 pr->request = command; in process_request()
317 pr->reqlen = cmdlen; in process_request()
335 ret = _process_request_meta(pr); in process_request()
339 ret = _process_request_mset(pr); in process_request()
343 ret = _process_request_meta(pr); in process_request()
352 ret = _process_request_meta(pr); in process_request()
357 ret = _process_request_meta(pr); in process_request()
368 ret = _process_request_simple(pr, 2, 2); in process_request()
374 ret = _process_request_gat(pr); in process_request()
378 ret = _process_request_storage(pr, token_max); in process_request()
381 ret = _process_request_storage(pr, token_max); in process_request()
384 ret = _process_request_storage(pr, token_max); in process_request()
392 ret = _process_request_simple(pr, 2, 2); in process_request()
395 ret = _process_request_simple(pr, 3, 4); in process_request()
398 ret = _process_request_simple(pr, 3, 4); in process_request()
402 ret = _process_request_gat(pr); in process_request()
410 ret = _process_request_simple(pr, 3, 4); in process_request()
414 _process_tokenize(pr, token_max); in process_request()
417 _process_tokenize(pr, token_max); in process_request()
423 ret = _process_request_simple(pr, 2, 4); in process_request()
426 ret = _process_request_storage(pr, token_max); in process_request()
432 ret = _process_request_storage(pr, token_max); in process_request()
435 ret = _process_request_storage(pr, token_max); in process_request()
438 _process_tokenize(pr, token_max); in process_request()
448 pr->command = cmd; in process_request()
449 pr->cmd_type = type; in process_request()
455 mcp_request_t *mcp_new_request(lua_State *L, mcp_parser_t *pr, const char *command, size_t cmdlen) { in mcp_new_request() argument
461 memcpy(&rq->pr, pr, sizeof(*pr)); in mcp_new_request()
464 rq->pr.request = rq->request; in mcp_new_request()
465 rq->pr.reqlen = cmdlen; in mcp_new_request()
476 void mcp_set_request(mcp_parser_t *pr, mcp_request_t *rq, const char *command, size_t cmdlen) { in mcp_set_request() argument
478 memcpy(&rq->pr, pr, sizeof(*pr)); in mcp_set_request()
481 rq->pr.request = rq->request; in mcp_set_request()
482 rq->pr.reqlen = cmdlen; in mcp_set_request()
494 mcp_parser_t *pr = &rq->pr; in mcp_request_render() local
496 if (pr->reqlen + len + 2 > MCP_REQUEST_MAXLEN) { in mcp_request_render()
500 if (idx >= pr->ntokens) { in mcp_request_render()
504 memcpy(p, pr->request, pr->tokens[idx]); in mcp_request_render()
505 p += pr->tokens[idx]; in mcp_request_render()
517 if (idx+1 < pr->ntokens) { in mcp_request_render()
523 memcpy(p, &pr->request[pr->tokens[idx+1]], pr->tokens[pr->ntokens] - pr->tokens[idx+1]); in mcp_request_render()
524 p += pr->tokens[pr->ntokens] - pr->tokens[idx+1]; in mcp_request_render()
540 void *vbuf = pr->vbuf; in mcp_request_render()
541 int vlen = pr->vlen; in mcp_request_render()
543 memset(pr, 0, sizeof(mcp_parser_t)); // TODO: required? in mcp_request_render()
544 int ret = process_request(pr, rq->request, p - temp); in mcp_request_render()
548 pr->vbuf = vbuf; in mcp_request_render()
549 pr->vlen = vlen; in mcp_request_render()
554 mcp_parser_t *pr = &rq->pr; in mcp_request_append() local
555 const char *start = pr->request; in mcp_request_append()
556 char *p = (char *)pr->request + pr->reqlen - 2; // start at the \r in mcp_request_append()
559 if (pr->reqlen + len + 2 > MCP_REQUEST_MAXLEN) { in mcp_request_append()
579 void *vbuf = pr->vbuf; in mcp_request_append()
580 int vlen = pr->vlen; in mcp_request_append()
582 memset(pr, 0, sizeof(mcp_parser_t)); // TODO: required? in mcp_request_append()
583 int ret = process_request(pr, rq->request, p - start); in mcp_request_append()
587 pr->vbuf = vbuf; in mcp_request_append()
588 pr->vlen = vlen; in mcp_request_append()
594 mcp_parser_t *pr = &rq->pr; in mcp_request_attach() local
595 char *r = (char *) pr->request; in mcp_request_attach()
596 size_t len = pr->reqlen; in mcp_request_attach()
604 if (pr->vlen != 0) { in mcp_request_attach()
605 p->iov[1].iov_base = pr->vbuf; in mcp_request_attach()
606 p->iov[1].iov_len = pr->vlen; in mcp_request_attach()
608 p->iovbytes += pr->vlen; in mcp_request_attach()
618 mcp_parser_t pr = {0}; in mcplib_request() local
637 if (rq->pr.vbuf) { in mcplib_request()
638 val = rq->pr.vbuf; in mcplib_request()
639 vlen = rq->pr.vlen; in mcplib_request()
646 if (process_request(&pr, cmd, len) != 0) { in mcplib_request()
650 mcp_request_t *rq = mcp_new_request(L, &pr, cmd, len); in mcplib_request()
653 rq->pr.vlen = vlen; in mcplib_request()
654 rq->pr.vbuf = malloc(vlen); in mcplib_request()
655 if (rq->pr.vbuf == NULL) { in mcplib_request()
663 memcpy(rq->pr.vbuf, val, vlen); in mcplib_request()
669 t->proxy_buffer_memory_used += rq->pr.vlen; in mcplib_request()
679 lua_pushlstring(L, MCP_PARSER_KEY(rq->pr), rq->pr.klen); in mcplib_request_key()
691 char *key = (char *) MCP_PARSER_KEY(rq->pr); in mcplib_request_ltrimkey()
693 if (totrim > rq->pr.klen) { in mcplib_request_ltrimkey()
698 rq->pr.klen -= totrim; in mcplib_request_ltrimkey()
699 rq->pr.tokens[rq->pr.keytoken] += totrim; in mcplib_request_ltrimkey()
707 char *key = (char *) MCP_PARSER_KEY(rq->pr); in mcplib_request_rtrimkey()
709 if (totrim > rq->pr.klen) { in mcplib_request_rtrimkey()
713 memset(key + (rq->pr.klen - totrim), ' ', totrim); in mcplib_request_rtrimkey()
714 rq->pr.klen -= totrim; in mcplib_request_rtrimkey()
732 if (token < 1 || token > rq->pr.ntokens) { in mcplib_request_token()
750 const char *start = rq->pr.request + rq->pr.tokens[token-1]; in mcplib_request_token()
751 vlen = _process_token_len(&rq->pr, token-1); in mcplib_request_token()
773 if (x < 1 || x > rq->pr.ntokens) { in mcplib_request_token_int()
781 const char *s = rq->pr.request + rq->pr.tokens[x-1]; in mcplib_request_token_int()
782 vlen = _process_token_len(&rq->pr, x-1); in mcplib_request_token_int()
801 lua_pushinteger(L, rq->pr.ntokens); in mcplib_request_ntokens()
807 lua_pushinteger(L, rq->pr.command); in mcplib_request_command()
824 if (rq->pr.t.meta.flags & flagbit) { in mcplib_request_has_flag()
855 if (rq->pr.t.meta.flags & flagbit) { in mcplib_request_flag_token()
859 for (int x = rq->pr.keytoken+1; x < rq->pr.ntokens; x++) { in mcplib_request_flag_token()
860 const char *s = rq->pr.request + rq->pr.tokens[x]; in mcplib_request_flag_token()
862 size_t vlen = _process_token_len(&rq->pr, x); in mcplib_request_flag_token()
907 if (rq->pr.t.meta.flags & flagbit) { in mcplib_request_flag_token_int()
909 for (int x = rq->pr.keytoken+1; x < rq->pr.ntokens; x++) { in mcplib_request_flag_token_int()
910 const char *s = rq->pr.request + rq->pr.tokens[x]; in mcplib_request_flag_token_int()
912 size_t vlen = _process_token_len(&rq->pr, x); in mcplib_request_flag_token_int()
992 if (rq->pr.t.meta.flags & flagbit) { in mcplib_request_flag_add()
1129 rq_token = MCP_PARSER_KEY(rq->pr); in mcplib_request_match_res()
1130 rq_len = rq->pr.klen; in mcplib_request_match_res()
1175 if (rq->pr.vbuf != NULL) { in mcp_request_cleanup()
1177 t->proxy_buffer_memory_used -= rq->pr.vlen; in mcp_request_cleanup()
1179 free(rq->pr.vbuf); in mcp_request_cleanup()
1182 rq->pr.vbuf = NULL; in mcp_request_cleanup()
1196 if (rq->pr.t.meta.flags & flagbit) { in _mcp_request_find_flag()
1197 for (int x = rq->pr.keytoken+1; x < rq->pr.ntokens; x++) { in _mcp_request_find_flag()
1198 const char *s = rq->pr.request + rq->pr.tokens[x]; in _mcp_request_find_flag()
1215 size_t tlen = _process_token_len(&rq->pr, x); in mcp_request_find_flag_token()
1217 *token = rq->pr.request + rq->pr.tokens[x] +1; in mcp_request_find_flag_token()
1229 for (int x = rq->pr.keytoken+1; x < rq->pr.ntokens; x++) { in mcp_request_find_flag_tokenint64()
1230 const char *s = rq->pr.request + rq->pr.tokens[x]; in mcp_request_find_flag_tokenint64()
1232 size_t vlen = _process_token_len(&rq->pr, x); in mcp_request_find_flag_tokenint64()