diff --git a/configs/samples/asterisk.conf.sample b/configs/samples/asterisk.conf.sample index 5f33abbfe278bb053c9f56759c351252fc2d2e06..bf0bdba092ff5991ccaffe442a0b74c9a42cfe5e 100644 --- a/configs/samples/asterisk.conf.sample +++ b/configs/samples/asterisk.conf.sample @@ -118,6 +118,11 @@ documentation_language = en_US ; Set the language you want documentation ; calls are not accepted by a remote ; implementation, please report this and go ; back to value 96. +;hide_messaging_ami_events = no; This option, if enabled, will + ; suppress all of the Message/ast_msg_queue channel's + ; housekeeping AMI and ARI channel events. This can + ; reduce the load on the manager and ARI applications + ; when the Digium Phone Module for Asterisk is in use. ; Changing the following lines may compromise your security. ;[files] diff --git a/doc/CHANGES-staging/hide_messaging_ami_events b/doc/CHANGES-staging/hide_messaging_ami_events new file mode 100644 index 0000000000000000000000000000000000000000..0afbeecdf74790725771ad568be2fcfcf893e38d --- /dev/null +++ b/doc/CHANGES-staging/hide_messaging_ami_events @@ -0,0 +1,11 @@ +Subject: Messaging + +In order to reduce the amount of AMI and ARI events generated, +the global "Message/ast_msg_queue" channel can be set to suppress +it's normal channel housekeeping events such as "Newexten", +"VarSet", etc. This can greatly reduce load on the manager +and ARI applications when the Digium Phone Module for Asterisk +is in use. To enable, set "hide_messaging_ami_events" in +asterisk.conf to "yes" In Asterisk versions <18, the default +is "no" preserving existing behavior. Beginning with +Asterisk 18, the option will default to "yes". diff --git a/include/asterisk/options.h b/include/asterisk/options.h index 6c4e5529583e9759de37a2ac5b2e4f36ab48160e..f8c813f19ab2b05a199b59077e3e2c80f081772a 100644 --- a/include/asterisk/options.h +++ b/include/asterisk/options.h @@ -84,6 +84,8 @@ enum ast_option_flags { AST_OPT_FLAG_DEBUG_MODULE = (1 << 23), /*! Terminal colors should be adjusted for a light-colored background */ AST_OPT_FLAG_LIGHT_BACKGROUND = (1 << 25), + /*! Make the global Message channel an internal channel to suppress AMI events */ + AST_OPT_FLAG_HIDE_MESSAGING_AMI_EVENTS = (1 << 26), /*! Force black background */ AST_OPT_FLAG_FORCE_BLACK_BACKGROUND = (1 << 27), /*! Hide remote console connect messages on console */ @@ -129,6 +131,7 @@ enum ast_option_flags { #define ast_opt_generic_plc ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC) #define ast_opt_ref_debug ast_test_flag(&ast_options, AST_OPT_FLAG_REF_DEBUG) #define ast_opt_generic_plc_on_equal_codecs ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC_ON_EQUAL_CODECS) +#define ast_opt_hide_messaging_ami_events ast_test_flag(&ast_options, AST_OPT_FLAG_HIDE_MESSAGING_AMI_EVENTS) /*! Maximum log level defined by PJPROJECT. */ #define MAX_PJ_LOG_MAX_LEVEL 6 diff --git a/main/asterisk.c b/main/asterisk.c index dd2ae6f2614385fd4684fd1860cf5e05c3590443..6ae921941df7f458bb2085efab0dcc1683db825b 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -509,6 +509,7 @@ static char *handle_show_settings(struct ast_cli_entry *e, int cmd, struct ast_c ast_cli(a->fd, " Transmit silence during rec: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_TRANSMIT_SILENCE) ? "Enabled" : "Disabled"); ast_cli(a->fd, " Generic PLC: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC) ? "Enabled" : "Disabled"); ast_cli(a->fd, " Generic PLC on equal codecs: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC_ON_EQUAL_CODECS) ? "Enabled" : "Disabled"); + ast_cli(a->fd, " Hide Msg Chan AMI events: %s\n", ast_opt_hide_messaging_ami_events ? "Enabled" : "Disabled"); ast_cli(a->fd, " Min DTMF duration:: %u\n", option_dtmfminduration); #if !defined(LOW_MEMORY) ast_cli(a->fd, " Cache media frames: %s\n", ast_opt_cache_media_frames ? "Enabled" : "Disabled"); diff --git a/main/message.c b/main/message.c index 487416277781fd286152f09d6f36b27e259bb37e..39b8d873e02ac0ffee9666077754567a790f6a6f 100644 --- a/main/message.c +++ b/main/message.c @@ -283,7 +283,7 @@ static int chan_msg_send_digit_end(struct ast_channel *chan, char digit, * This will not be registered as we never want anything to try * to create Message channels other than internally in this file. */ -static const struct ast_channel_tech msg_chan_tech_hack = { +static struct ast_channel_tech msg_chan_tech_hack = { .type = "Message", .description = "Internal Text Message Processing", .read = chan_msg_read, @@ -685,6 +685,10 @@ static struct ast_channel *create_msg_q_chan(void) return NULL; } + if (ast_opt_hide_messaging_ami_events) { + msg_chan_tech_hack.properties |= AST_CHAN_TP_INTERNAL; + } + ast_channel_tech_set(chan, &msg_chan_tech_hack); ast_channel_unlock(chan); ast_channel_unlink(chan); diff --git a/main/options.c b/main/options.c index ea97a6a0ac4b32ddd31511dd75af14e279d4fef0..38a646e1781927607cbdf5cfa3577901f572e9ee 100644 --- a/main/options.c +++ b/main/options.c @@ -457,6 +457,8 @@ void load_asterisk_conf(void) } } else if (!strcasecmp(v->name, "live_dangerously")) { live_dangerously = ast_true(v->value); + } else if (!strcasecmp(v->name, "hide_messaging_ami_events")) { + ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_HIDE_MESSAGING_AMI_EVENTS); } } if (!ast_opt_remote) {