MT#55283 use list_iter() where appropriate

Change-Id: I26fee0ece7c6dc8411140559d4c8801b9eb304fe
pull/1848/head
Richard Fuchs 1 year ago
parent 416f658088
commit b0d22ba770

@ -2283,11 +2283,17 @@ const char *call_answer_ng(ng_parser_ctx_t *ctx) {
return call_offer_answer_ng(ctx, OP_ANSWER, NULL, NULL);
}
static void call_delete_flags(ng_parser_ctx_t *ctx, str *key, helper_arg arg) {
bool *fatal_discard = arg.bools;
if (!str_cmp(key, "fatal"))
fatal_discard[0] = true;
else if (!str_cmp(key, "discard-recording"))
fatal_discard[1] = true;
}
const char *call_delete_ng(ng_parser_ctx_t *ctx) {
str fromtag, totag, viabranch, callid;
bencode_item_t *flags, *it;
bool fatal = false;
bool discard = false;
bencode_item_t *flags;
bool fatal_discard[2] = {0};
int delete_delay;
parser_arg input = ctx->req;
parser_arg output = ctx->resp;
@ -2299,14 +2305,8 @@ 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) {
for (it = flags->child; it; it = it->sibling) {
if (!ctx->parser->strcmp(it, "fatal"))
fatal = true;
else if (!ctx->parser->strcmp(it, "discard-recording"))
discard = true;
}
}
if (flags)
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)
delete_delay = ctx->parser->dict_get_int_str(input, "delete delay", -1);
@ -2315,7 +2315,7 @@ const char *call_delete_ng(ng_parser_ctx_t *ctx) {
if (!c)
goto err;
if (discard)
if (fatal_discard[1])
recording_discard(c);
if (call_delete_branch(c, &viabranch, &fromtag, &totag, ctx, delete_delay))
@ -2324,7 +2324,7 @@ const char *call_delete_ng(ng_parser_ctx_t *ctx) {
return NULL;
err:
if (fatal)
if (fatal_discard[0])
return "Call-ID not found or tags didn't match";
ctx->parser->dict_add_string(output, "warning", "Call-ID not found or tags didn't match");
return NULL;
@ -2852,6 +2852,16 @@ const char *call_pause_recording_ng(ng_parser_ctx_t *ctx) {
}
static void stop_recording_iter(ng_parser_ctx_t *ctx, str *key, helper_arg arg) {
if (str_cmp(key, "pause") == 0) {
pause_recording_fn(ctx, arg.call);
return;
}
if (str_cmp(key, "discard-recording") == 0) {
recording_discard(arg.call);
return;
}
}
static void stop_recording_fn(ng_parser_ctx_t *ctx, call_t *call) {
// support alternative usage for "pause" call: either `pause=yes` ...
parser_arg input = ctx->req;
@ -2864,18 +2874,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) {
for (bencode_item_t *child = item->child; child; child = child->sibling) {
if (bencode_strcmp(child, "pause") == 0) {
pause_recording_fn(ctx, call);
return;
}
if (bencode_strcmp(child, "discard-recording") == 0) {
recording_discard(call);
return;
}
}
}
if (item)
ctx->parser->list_iter(ctx, item, stop_recording_iter, NULL, call);
recording_stop(call);
}

@ -108,6 +108,8 @@ typedef union {
str_case_value_ht *svt;
int *i;
struct sdp_manipulations *sm;
struct call *call;
bool *bools;
void *generic;
} helper_arg __attribute__ ((__transparent_union__));

Loading…
Cancel
Save