From fbfb514194368254243f4b32d6bd39d18bf273cc Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Thu, 25 Jun 2026 08:02:58 -0400 Subject: [PATCH] MT#65392 add "fast" flag for delete processing Change-Id: I16d4cdd9ecc8dbe612eac2ff002283b606f0f082 (cherry picked from commit 6391c6bf9525aa296736cb3e0a5f43f349d52c09) --- daemon/call.c | 9 +++++---- daemon/call_flags.c | 3 +++ daemon/call_interfaces.c | 3 ++- docs/ng_control_protocol.md | 6 ++++++ include/call.h | 3 ++- include/call_flags.h | 1 + utils/rtpengine-ng-client | 2 ++ 7 files changed, 21 insertions(+), 6 deletions(-) diff --git a/daemon/call.c b/daemon/call.c index 5be931485..a02559405 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -6444,7 +6444,8 @@ static void monologue_stop(struct call_monologue *ml, bool stop_media_subscriber // call must be locked in W. // unlocks the call and releases the reference prior to returning, even on error. int call_delete_branch(call_t *c, const str *branch, - const str *fromtag, const str *totag, ng_command_ctx_t *ctx, int64_t delete_delay) + const str *fromtag, const str *totag, ng_command_ctx_t *ctx, int64_t delete_delay, + bool stats) { struct call_monologue *ml; int ret; @@ -6527,13 +6528,13 @@ do_delete: if (!del_stop) goto del_all; - if (ctx) + if (ctx && stats) ng_call_stats(ctx, c, fromtag, totag, NULL); goto success_unlock; del_all: - if (ctx) + if (ctx && stats) ng_call_stats(ctx, c, NULL, NULL, NULL); for (__auto_type i = c->monologues.head; i; i = i->next) { @@ -6584,7 +6585,7 @@ int call_delete_branch_by_id(const str *callid, const str *branch, ilog(LOG_INFO, "Call-ID to delete not found"); return -1; } - return call_delete_branch(c, branch, fromtag, totag, ctx, delete_delay); + return call_delete_branch(c, branch, fromtag, totag, ctx, delete_delay, false); } struct call_media *call_make_transform_media(struct call_monologue *ml, const str *type, enum media_type type_id, diff --git a/daemon/call_flags.c b/daemon/call_flags.c index a02669871..584e95baf 100644 --- a/daemon/call_flags.c +++ b/daemon/call_flags.c @@ -750,6 +750,9 @@ const char *call_ng_flags_flags(str *s, unsigned int idx, helper_arg arg) { case CSH_LOOKUP("fatal"): out->fatal = true; break; + case CSH_LOOKUP("fast"): + out->fast = true; + break; case CSH_LOOKUP("fragment"): out->fragment = true; break; diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index 5144db7ed..cccf80867 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -754,7 +754,8 @@ const char *call_delete_ng(ng_command_ctx_t *ctx) { if (call_delete_branch(c, &rtpp_flags.via_branch, &rtpp_flags.from_tag, (rtpp_flags.to_tag_flag ? &rtpp_flags.to_tag : NULL), - ctx, rtpp_flags.delete_delay)) + ctx, rtpp_flags.delete_delay, + !rtpp_flags.fast)) { goto err; } diff --git a/docs/ng_control_protocol.md b/docs/ng_control_protocol.md index 1b39fbd7a..d7c2717b4 100644 --- a/docs/ng_control_protocol.md +++ b/docs/ng_control_protocol.md @@ -1851,6 +1851,12 @@ of zero or more strings. The following flags are defined: result in an error reply (i.e. `"result": "error"`). The default is to reply with a warning only (i.e. `"result": "ok", "warning": ...`). +* `fast` + + Omit adding statistics to the response message. This makes processing of + the delete message more light-weight and produces a smaller response + message, which is beneficial if the statistics aren't needed. + * `to-tag` This flag controls whether the `"To"` tag's value is honoured or ignored when handling diff --git a/include/call.h b/include/call.h index 681448794..659327060 100644 --- a/include/call.h +++ b/include/call.h @@ -930,7 +930,8 @@ void monologue_destroy(struct call_monologue *ml); int call_delete_branch_by_id(const str *callid, const str *branch, const str *fromtag, const str *totag, ng_command_ctx_t *, int64_t delete_delay); int call_delete_branch(call_t *, const str *branch, - const str *fromtag, const str *totag, ng_command_ctx_t *, int64_t delete_delay); + const str *fromtag, const str *totag, ng_command_ctx_t *, int64_t delete_delay, + bool stats); void call_destroy(call_t *); struct call_media *call_media_new(call_t *call); void call_media_free(struct call_media **mdp); diff --git a/include/call_flags.h b/include/call_flags.h index fd431ce6f..be9694bd8 100644 --- a/include/call_flags.h +++ b/include/call_flags.h @@ -313,6 +313,7 @@ RTPE_NG_FLAGS_STR_CASE_HT_PARAMS bidirectional:1, unsubscribe:1, fatal:1, + fast:1, new_branch:1, provisional:1, /* to_tag is used especially by delete handling */ diff --git a/utils/rtpengine-ng-client b/utils/rtpengine-ng-client index b9378965d..01e108f9a 100755 --- a/utils/rtpengine-ng-client +++ b/utils/rtpengine-ng-client @@ -60,6 +60,8 @@ my @flags = qw( mix unsubscribe strip-extmap + fatal + fast ); my @string_opts = qw(