From: Naveen Albert Date: Sun, 26 Feb 2023 13:15:50 +0000 (+0000) Subject: app_senddtmf: Add SendFlash AMI action. X-Git-Tag: 21.0.0-pre1~131 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cec0c5cd39a1fb6689899650077936b2ba0fa39a;p=thirdparty%2Fasterisk.git app_senddtmf: Add SendFlash AMI action. Adds an AMI action to send a flash event on a channel. ASTERISK-30440 #close Change-Id: I4707aeecb3cd8f3e63fd0c3fe009798943c369c9 --- diff --git a/apps/app_senddtmf.c b/apps/app_senddtmf.c index c119d8c477..ed548094db 100644 --- a/apps/app_senddtmf.c +++ b/apps/app_senddtmf.c @@ -97,6 +97,23 @@ Plays a dtmf digit on the specified channel. + + + Send a hook flash on a specific channel. + + + + + Channel name to send hook flash to. + + + Emulate receiving a hook flash on this channel instead of sending it out. + + + + Sends a hook flash on the specified channel. + + ***/ enum read_option_flags { @@ -218,12 +235,41 @@ static int manager_play_dtmf(struct mansession *s, const struct message *m) return 0; } +static int manager_send_flash(struct mansession *s, const struct message *m) +{ + const char *channel = astman_get_header(m, "Channel"); + const char *receive_s = astman_get_header(m, "Receive"); + struct ast_channel *chan; + + if (!(chan = ast_channel_get_by_name(channel))) { + astman_send_error(s, m, "Channel not found"); + return 0; + } + + if (ast_true(receive_s)) { + struct ast_frame f = { AST_FRAME_CONTROL, }; + f.subclass.integer = AST_CONTROL_FLASH; + ast_queue_frame(chan, &f); + } else { + struct ast_frame f = { AST_FRAME_CONTROL, }; + f.subclass.integer = AST_CONTROL_FLASH; + ast_channel_lock(chan); + ast_write(chan, &f); + ast_channel_unlock(chan); + } + + chan = ast_channel_unref(chan); + astman_send_ack(s, m, "Flash successfully queued"); + return 0; +} + static int unload_module(void) { int res; res = ast_unregister_application(senddtmf_name); res |= ast_manager_unregister("PlayDTMF"); + res |= ast_manager_unregister("SendFlash"); return res; } @@ -233,6 +279,7 @@ static int load_module(void) int res; res = ast_manager_register_xml("PlayDTMF", EVENT_FLAG_CALL, manager_play_dtmf); + res |= ast_manager_register_xml("SendFlash", EVENT_FLAG_CALL, manager_send_flash); res |= ast_register_application_xml(senddtmf_name, senddtmf_exec); return res; diff --git a/doc/CHANGES-staging/ami_hook_flash.txt b/doc/CHANGES-staging/ami_hook_flash.txt new file mode 100644 index 0000000000..5bf1e3455e --- /dev/null +++ b/doc/CHANGES-staging/ami_hook_flash.txt @@ -0,0 +1,4 @@ +Subject: app_senddtmf + +The SendFlash AMI action now allows sending +a hook flash event on a channel.