From b826dbddd6b9eed2ba630baa8c94d7a37c5f3e34 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Fri, 26 Jul 2024 11:13:28 -0400 Subject: [PATCH] MT#55283 use list iterator for direction= Change-Id: I797f1f7926eb177ff2d6ab3659415b91ead2d95f --- daemon/call_interfaces.c | 15 ++++++++++----- daemon/control_ng_flags_parser.c | 2 +- include/call_interfaces.h | 2 +- include/control_ng.h | 1 + 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index af2f678a0..16066d03a 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -1305,13 +1305,18 @@ void call_ng_flags_init(sdp_ng_flags *out, enum call_opmode opmode) { out->frequencies = g_array_new(false, false, sizeof(int)); } -void call_ng_direction_flag(sdp_ng_flags *out, bencode_item_t *value) +static void call_ng_direction_flag_iter(ng_parser_ctx_t *ctx, str *s, helper_arg arg) { + if (*arg.i >= 2) + return; + ctx->flags->direction[*arg.i] = *s; + (*arg.i)++; +} +void call_ng_direction_flag(ng_parser_ctx_t *ctx, bencode_item_t *value) { - if (value->type != BENCODE_LIST) + if (!ctx->parser->is_list(value)) return; int diridx = 0; - for (bencode_item_t *cit = value->child; cit && diridx < 2; cit = cit->sibling) - bencode_get_str(cit, &out->direction[diridx++]); + ctx->parser->list_iter(ctx, value, call_ng_direction_flag_iter, NULL, &diridx); } void call_ng_codec_flags(ng_parser_ctx_t *ctx, str *key, bencode_item_t *value) { sdp_ng_flags *out = ctx->flags; @@ -1515,7 +1520,7 @@ void call_ng_main_flags(ng_parser_ctx_t *ctx, str *key, bencode_item_t *value) { out->db_id = parser->get_int_str(value, out->db_id); break; case CSH_LOOKUP("direction"): - call_ng_direction_flag(out, value); + call_ng_direction_flag(ctx, value); break; case CSH_LOOKUP("drop-traffic"): case CSH_LOOKUP("drop traffic"): diff --git a/daemon/control_ng_flags_parser.c b/daemon/control_ng_flags_parser.c index 0bacbf319..cd328d1f9 100644 --- a/daemon/control_ng_flags_parser.c +++ b/daemon/control_ng_flags_parser.c @@ -329,5 +329,5 @@ next:; /* add directions to the root dict */ if (direction && direction->child) - call_ng_direction_flag(ctx->flags, direction); + call_ng_direction_flag(ctx, direction); } diff --git a/include/call_interfaces.h b/include/call_interfaces.h index c15c7854a..9228678af 100644 --- a/include/call_interfaces.h +++ b/include/call_interfaces.h @@ -288,7 +288,7 @@ void call_interfaces_timer(void); void call_ng_flags_flags(ng_parser_ctx_t *, str *s, helper_arg dummy); void call_ng_main_flags(ng_parser_ctx_t *, str *key, bencode_item_t *value); void call_ng_codec_flags(ng_parser_ctx_t *, str *key, bencode_item_t *value); -void call_ng_direction_flag(sdp_ng_flags *out, bencode_item_t *value); +void call_ng_direction_flag(ng_parser_ctx_t *, bencode_item_t *value); INLINE struct sdp_manipulations *sdp_manipulations_get_by_id(const sdp_ng_flags *f, enum media_type id) { if (id < 0 || id >= G_N_ELEMENTS(f->sdp_manipulations)) diff --git a/include/control_ng.h b/include/control_ng.h index 29fe3809b..cfb77f905 100644 --- a/include/control_ng.h +++ b/include/control_ng.h @@ -102,6 +102,7 @@ typedef union { str_q *q; str_case_ht *sct; str_case_value_ht *svt; + int *i; void *generic; } helper_arg __attribute__ ((__transparent_union__));