From a2c89d64dfb86d57d8b6dca91ef520f89b030a41 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Fri, 26 Jul 2024 13:14:05 -0400 Subject: [PATCH] MT#55283 add abstract dict_get_str() Change-Id: Ibb453a18913803042ee0074cbfd5d4c19c30418b --- daemon/call_interfaces.c | 35 ++++++++++++++++++----------------- daemon/control_ng.c | 8 +++++--- include/control_ng.h | 1 + 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index 9e9487102..f613c9e85 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -2298,11 +2298,11 @@ const char *call_delete_ng(ng_parser_ctx_t *ctx) { bencode_item_t *input = ctx->req; bencode_item_t *output = ctx->resp; - if (!bencode_dictionary_get_str(input, "call-id", &callid)) + if (!ctx->parser->dict_get_str(input, "call-id", &callid)) return "No call-id in message"; - bencode_dictionary_get_str(input, "from-tag", &fromtag); - bencode_dictionary_get_str(input, "to-tag", &totag); - bencode_dictionary_get_str(input, "via-branch", &viabranch); + ctx->parser->dict_get_str(input, "from-tag", &fromtag); + ctx->parser->dict_get_str(input, "to-tag", &totag); + ctx->parser->dict_get_str(input, "via-branch", &viabranch); flags = bencode_dictionary_get_expect(input, "flags", BENCODE_LIST); if (flags) { @@ -2761,13 +2761,13 @@ const char *call_query_ng(ng_parser_ctx_t *ctx) { bencode_item_t *input = ctx->req; bencode_item_t *output = ctx->resp; - if (!bencode_dictionary_get_str(input, "call-id", &callid)) + if (!ctx->parser->dict_get_str(input, "call-id", &callid)) return "No call-id in message"; call = call_get_opmode(&callid, OP_QUERY); if (!call) return "Unknown call-id"; - bencode_dictionary_get_str(input, "from-tag", &fromtag); - bencode_dictionary_get_str(input, "to-tag", &totag); + ctx->parser->dict_get_str(input, "from-tag", &fromtag); + ctx->parser->dict_get_str(input, "to-tag", &totag); ng_call_stats(call, &fromtag, &totag, output, NULL); rwlock_unlock_w(&call->master_lock); @@ -2798,7 +2798,7 @@ const char *call_list_ng(ng_parser_ctx_t *ctx) { static const char *call_recording_common_ng(ng_parser_ctx_t *ctx, enum call_opmode opmode, - void (*fn)(bencode_item_t *input, call_t *call)) + void (*fn)(ng_parser_ctx_t *, call_t *call)) { g_auto(sdp_ng_flags) flags; g_autoptr(call_t) call = NULL; @@ -2806,7 +2806,7 @@ static const char *call_recording_common_ng(ng_parser_ctx_t *ctx, call_ng_process_flags(&flags, ctx, opmode); - if (!bencode_dictionary_get_str(input, "call-id", &flags.call_id)) + if (!ctx->parser->dict_get_str(input, "call-id", &flags.call_id)) return "No call-id in message"; call = call_get_opmode(&flags.call_id, opmode); if (!call) @@ -2814,7 +2814,7 @@ static const char *call_recording_common_ng(ng_parser_ctx_t *ctx, struct call_monologue *ml = NULL; - if (bencode_dictionary_get_str(input, "from-tag", &flags.from_tag)) { + if (ctx->parser->dict_get_str(input, "from-tag", &flags.from_tag)) { if (flags.from_tag.s) { ml = call_get_monologue(call, &flags.from_tag); if (!ml) @@ -2828,13 +2828,13 @@ static const char *call_recording_common_ng(ng_parser_ctx_t *ctx, else update_metadata_call(call, &flags); - fn(input, call); + fn(ctx, call); return NULL; } -static void start_recording_fn(bencode_item_t *input, call_t *call) { +static void start_recording_fn(ng_parser_ctx_t *ctx, call_t *call) { recording_start(call); } const char *call_start_recording_ng(ng_parser_ctx_t *ctx) { @@ -2842,7 +2842,7 @@ const char *call_start_recording_ng(ng_parser_ctx_t *ctx) { } -static void pause_recording_fn(bencode_item_t *input, call_t *call) { +static void pause_recording_fn(ng_parser_ctx_t *ctx, call_t *call) { recording_pause(call); } const char *call_pause_recording_ng(ng_parser_ctx_t *ctx) { @@ -2850,12 +2850,13 @@ const char *call_pause_recording_ng(ng_parser_ctx_t *ctx) { } -static void stop_recording_fn(bencode_item_t *input, call_t *call) { +static void stop_recording_fn(ng_parser_ctx_t *ctx, call_t *call) { // support alternative usage for "pause" call: either `pause=yes` ... + bencode_item_t *input = ctx->req; str pause; - if (bencode_dictionary_get_str(input, "pause", &pause)) { + if (ctx->parser->dict_get_str(input, "pause", &pause)) { if (!str_cmp(&pause, "yes") || !str_cmp(&pause, "on") || !str_cmp(&pause, "true")) { - pause_recording_fn(input, call); + pause_recording_fn(ctx, call); return; } } @@ -2864,7 +2865,7 @@ static void stop_recording_fn(bencode_item_t *input, call_t *call) { if (item) { for (bencode_item_t *child = item->child; child; child = child->sibling) { if (bencode_strcmp(child, "pause") == 0) { - pause_recording_fn(input, call); + pause_recording_fn(ctx, call); return; } if (bencode_strcmp(child, "discard-recording") == 0) { diff --git a/daemon/control_ng.c b/daemon/control_ng.c index 891b79f15..436a3a7eb 100644 --- a/daemon/control_ng.c +++ b/daemon/control_ng.c @@ -141,6 +141,7 @@ const ng_parser_t ng_parser_native = { .is_int = bencode_is_int, .get_int = bencode_get_int, .dict = __bencode_dict, + .dict_get_str = bencode_dictionary_get_str, }; const ng_parser_t ng_parser_json = { .collapse = bencode_collapse_str_json, @@ -152,6 +153,7 @@ const ng_parser_t ng_parser_json = { .is_int = bencode_is_int, .get_int = bencode_get_int, .dict = __bencode_dict, + .dict_get_str = bencode_dictionary_get_str, }; @@ -294,7 +296,7 @@ static void control_ng_process_payload(ng_ctx *hctx, str *reply, str *data, cons str cmd = STR_NULL, callid; const char *errstr, *resultstr; GString *log_str; - struct timeval cmd_start, cmd_stop, cmd_process_time; + struct timeval cmd_start, cmd_stop, cmd_process_time = {0}; struct control_ng_stats* cur = get_control_ng_stats(&sin->address); enum ng_command command = -1; @@ -338,12 +340,12 @@ static void control_ng_process_payload(ng_ctx *hctx, str *reply, str *data, cons parser_ctx.resp = parser_ctx.parser->dict(&parser_ctx); assert(parser_ctx.resp != NULL); - bencode_dictionary_get_str(parser_ctx.req, "command", &cmd); + parser_ctx.parser->dict_get_str(parser_ctx.req, "command", &cmd); errstr = "Dictionary contains no key \"command\""; if (!cmd.s) goto err_send; - bencode_dictionary_get_str(parser_ctx.req, "call-id", &callid); + parser_ctx.parser->dict_get_str(parser_ctx.req, "call-id", &callid); log_info_str(&callid); ilogs(control, LOG_INFO, "Received command '"STR_FORMAT"' from %s", STR_FMT(&cmd), addr); diff --git a/include/control_ng.h b/include/control_ng.h index cecdf1906..27edc57b4 100644 --- a/include/control_ng.h +++ b/include/control_ng.h @@ -122,6 +122,7 @@ struct ng_parser { bool (*is_int)(bencode_item_t *); long long (*get_int)(bencode_item_t *); bencode_item_t *(*dict)(ng_parser_ctx_t *); + char *(*dict_get_str)(bencode_item_t *, const char *, str *); }; struct ng_parser_ctx { const ng_parser_t *parser;