From: Naveen Albert Date: Wed, 15 Sep 2021 18:21:13 +0000 (+0000) Subject: func_channel: Add CHANNEL_EXISTS function. X-Git-Tag: 19.0.0-rc1~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f38c7d67d321cfd87268d89ef8ad09effcc955e5;p=thirdparty%2Fasterisk.git func_channel: Add CHANNEL_EXISTS function. Adds a function to check for the existence of a channel by name or by UNIQUEID. ASTERISK-29656 #close Change-Id: Ib464e9eb6e13dc683a846286798fecff4fd943cb --- diff --git a/doc/CHANGES-staging/func_channel.txt b/doc/CHANGES-staging/func_channel.txt new file mode 100644 index 0000000000..7f92c3e014 --- /dev/null +++ b/doc/CHANGES-staging/func_channel.txt @@ -0,0 +1,4 @@ +Subject: func_channel + +Adds the CHANNEL_EXISTS function to check for the existence +of a channel by name or unique ID. diff --git a/funcs/func_channel.c b/funcs/func_channel.c index d143fdcb06..312806d966 100644 --- a/funcs/func_channel.c +++ b/funcs/func_channel.c @@ -20,6 +20,7 @@ * * \author Kevin P. Fleming * \author Ben Winslow + * \author Naveen Albert * * \ingroup functions */ @@ -62,6 +63,19 @@ will be space-delimited. + + + Checks if the specified channel exists. + + + + The name or unique ID of the channel to check. + + + + Returns 1 if the channel name_or_uid exists, 0 if not. + + Gets or sets variables on the master channel @@ -711,6 +725,28 @@ static struct ast_custom_function channels_function = { .read = func_channels_read, }; +static int func_chan_exists_read(struct ast_channel *chan, const char *function, char *data, char *buf, size_t maxlen) +{ + struct ast_channel *chan_found = NULL; + + if (ast_strlen_zero(data)) { + ast_log(LOG_WARNING, "%s: Channel name or unique ID required\n", function); + return -1; + } + + chan_found = ast_channel_get_by_name(data); + snprintf(buf, maxlen, "%d", (chan_found ? 1 : 0)); + if (chan_found) { + ast_channel_unref(chan_found); + } + return 0; +} + +static struct ast_custom_function chan_exists_function = { + .name = "CHANNEL_EXISTS", + .read = func_chan_exists_read, +}; + static int func_mchan_read(struct ast_channel *chan, const char *function, char *data, struct ast_str **buf, ssize_t len) { @@ -761,6 +797,7 @@ static int unload_module(void) res |= ast_custom_function_unregister(&channel_function); res |= ast_custom_function_unregister(&channels_function); + res |= ast_custom_function_unregister(&chan_exists_function); res |= ast_custom_function_unregister(&mchan_function); return res; @@ -772,6 +809,7 @@ static int load_module(void) res |= ast_custom_function_register(&channel_function); res |= ast_custom_function_register(&channels_function); + res |= ast_custom_function_register(&chan_exists_function); res |= ast_custom_function_register(&mchan_function); return res;