MT#55283 extend use of parser_arg

Change-Id: I4e5b1fbb4d921fd75c50d5ffd8ec81afe200962c
pull/1848/head
Richard Fuchs 1 year ago
parent b0d22ba770
commit baf3cc97f2

@ -2292,7 +2292,7 @@ static void call_delete_flags(ng_parser_ctx_t *ctx, str *key, helper_arg arg) {
}
const char *call_delete_ng(ng_parser_ctx_t *ctx) {
str fromtag, totag, viabranch, callid;
bencode_item_t *flags;
parser_arg flags;
bool fatal_discard[2] = {0};
int delete_delay;
parser_arg input = ctx->req;
@ -2305,7 +2305,7 @@ const char *call_delete_ng(ng_parser_ctx_t *ctx) {
ctx->parser->dict_get_str(input, "via-branch", &viabranch);
flags = ctx->parser->dict_get_expect(input, "flags", BENCODE_LIST);
if (flags)
if (flags.gen)
ctx->parser->list_iter(ctx, flags, call_delete_flags, NULL, fatal_discard);
delete_delay = ctx->parser->dict_get_int_str(input, "delete-delay", -1);
if (delete_delay == -1)
@ -2873,8 +2873,8 @@ static void stop_recording_fn(ng_parser_ctx_t *ctx, call_t *call) {
}
}
// ... or `flags=[pause]`
bencode_item_t *item = ctx->parser->dict_get_expect(input, "flags", BENCODE_LIST);
if (item)
parser_arg item = ctx->parser->dict_get_expect(input, "flags", BENCODE_LIST);
if (item.gen)
ctx->parser->list_iter(ctx, item, stop_recording_iter, NULL, call);
recording_stop(call);

@ -139,6 +139,10 @@ static parser_arg __bencode_list(ng_parser_ctx_t *ctx) {
static void bencode_pretty_print(bencode_item_t *el, GString *s);
static parser_arg __bencode_dictionary_get_expect(bencode_item_t *arg, const char *ele, bencode_type_t type) {
return (parser_arg) bencode_dictionary_get_expect(arg, ele, type);
}
const ng_parser_t ng_parser_native = {
.collapse = bencode_collapse_str,
.dict_iter = bencode_dict_iter,
@ -153,7 +157,7 @@ const ng_parser_t ng_parser_native = {
.dict = __bencode_dict,
.dict_get_str = bencode_dictionary_get_str,
.dict_get_int_str = bencode_dictionary_get_int_str,
.dict_get_expect = bencode_dictionary_get_expect,
.dict_get_expect = __bencode_dictionary_get_expect,
.dict_add = bencode_dictionary_add,
.dict_add_string = bencode_dictionary_add_string,
.dict_add_str = bencode_dictionary_add_str,
@ -181,7 +185,7 @@ const ng_parser_t ng_parser_json = {
.dict = __bencode_dict,
.dict_get_str = bencode_dictionary_get_str,
.dict_get_int_str = bencode_dictionary_get_int_str,
.dict_get_expect = bencode_dictionary_get_expect,
.dict_get_expect = __bencode_dictionary_get_expect,
.dict_add = bencode_dictionary_add,
.dict_add_string = bencode_dictionary_add_string,
.dict_add_str = bencode_dictionary_add_str,

@ -119,20 +119,20 @@ struct ng_parser {
void (*callback)(ng_parser_ctx_t *, str *, parser_arg, helper_arg),
helper_arg);
bool (*is_list)(parser_arg);
void (*list_iter)(ng_parser_ctx_t *, bencode_item_t *input,
void (*list_iter)(ng_parser_ctx_t *, parser_arg input,
void (*str_callback)(ng_parser_ctx_t *, str *key, helper_arg),
void (*item_callback)(ng_parser_ctx_t *, bencode_item_t *, helper_arg),
void (*item_callback)(ng_parser_ctx_t *, parser_arg, helper_arg),
helper_arg);
str *(*get_str)(bencode_item_t *, str *s);
int (*strcmp)(bencode_item_t *, const char *);
long long (*get_int_str)(bencode_item_t *, long long def);
bool (*is_int)(bencode_item_t *);
long long (*get_int)(bencode_item_t *);
str *(*get_str)(parser_arg, str *s);
int (*strcmp)(parser_arg, const char *);
long long (*get_int_str)(parser_arg, long long def);
bool (*is_int)(parser_arg);
long long (*get_int)(parser_arg);
bool (*is_dict)(parser_arg);
parser_arg (*dict)(ng_parser_ctx_t *);
char *(*dict_get_str)(parser_arg, const char *, str *);
long long (*dict_get_int_str)(parser_arg, const char *, long long def);
bencode_item_t *(*dict_get_expect)(parser_arg, const char *, bencode_type_t);
parser_arg (*dict_get_expect)(parser_arg, const char *, bencode_type_t);
bencode_item_t *(*dict_add)(parser_arg, const char *, parser_arg);
void (*dict_add_string)(parser_arg, const char *, const char *);
void (*dict_add_str)(parser_arg, const char *, const str *);

Loading…
Cancel
Save