diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index 2f343c622..89dd7b6e9 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -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); diff --git a/daemon/control_ng.c b/daemon/control_ng.c index c2e4040d9..e41ae47f9 100644 --- a/daemon/control_ng.c +++ b/daemon/control_ng.c @@ -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, diff --git a/include/control_ng.h b/include/control_ng.h index db5ce132f..6aafdf3be 100644 --- a/include/control_ng.h +++ b/include/control_ng.h @@ -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 *);