MT#55283 refactor call_ng_flags_freqs()

using new parsing abstraction

Change-Id: I5cbda4da089b061780d28524b9efa66128e58de0
pull/1848/head
Richard Fuchs 1 year ago
parent ad1e051cb3
commit d29368c6ab

@ -1398,27 +1398,26 @@ static void call_ng_parse_block_mode(str *s, enum block_dtmf_mode *output) {
}
#endif
static void call_ng_flags_freqs(sdp_ng_flags *out, bencode_item_t *value) {
static void call_ng_flags_freqs(ng_parser_ctx_t *ctx, bencode_item_t *value);
static void call_ng_flags_freqs_iter(ng_parser_ctx_t *ctx, bencode_item_t *item, helper_arg arg) {
call_ng_flags_freqs(ctx, item);
}
static void call_ng_flags_freqs(ng_parser_ctx_t *ctx, bencode_item_t *value) {
sdp_ng_flags *out = ctx->flags;
const ng_parser_t *parser = ctx->parser;
unsigned int val;
switch (value->type) {
case BENCODE_INTEGER:;
val = value->value;
if (parser->is_int(value)) {
val = parser->get_int(value);
g_array_append_val(out->frequencies, val);
}
else if (parser->is_list(value))
parser->list_iter(ctx, value, NULL, call_ng_flags_freqs_iter, NULL);
else {
val = parser->get_int_str(value, 0);
if (val)
g_array_append_val(out->frequencies, val);
break;
case BENCODE_LIST:
for (bencode_item_t *it = value->child; it; it = it->sibling)
call_ng_flags_freqs(out, it);
break;
case BENCODE_STRING:;
str s, token;
bencode_get_str(value, &s);
while (str_token_sep(&token, &s, ',')) {
val = str_to_i(&token, 0);
g_array_append_val(out->frequencies, val);
}
break;
default:
else
ilog(LOG_WARN, "Invalid content type in `frequencies` list");
}
}
@ -1629,7 +1628,7 @@ void call_ng_main_flags(ng_parser_ctx_t *ctx, str *key, bencode_item_t *value) {
break;
case CSH_LOOKUP("frequency"):
case CSH_LOOKUP("frequencies"):
call_ng_flags_freqs(out, value);
call_ng_flags_freqs(ctx, value);
break;
case CSH_LOOKUP("from-interface"):
out->direction[0] = s;

Loading…
Cancel
Save