confbridge: Add support for disabling text messaging.

When in a conference bridge it may be necessary to have
text messages disabled for specific participants or for
all. This change adds a configuration option, "text_messaging",
which can be used to enable or disable this on the
user profile. By default existing behavior is preserved
as it defaults to "yes".

ASTERISK-28841

Change-Id: I30b5d9ae6f4803881d1ed9300590d405e392bc13
This commit is contained in:
Joshua C. Colp
2020-04-16 10:15:42 -03:00
committed by Friendly Automation
parent c4c259c3af
commit 21f0759b2c
8 changed files with 41 additions and 1 deletions

View File

@@ -2628,6 +2628,13 @@ static int confbridge_exec(struct ast_channel *chan, const char *data)
user.features.dtmf_passthrough = 0;
}
/* Set if text messaging is enabled for this user or not */
if (ast_test_flag(&user.u_profile, USER_OPT_TEXT_MESSAGING)) {
user.features.text_messaging = 1;
} else {
user.features.text_messaging = 0;
}
/* Set dsp threshold values if present */
if (user.u_profile.talking_threshold) {
user.tech_args.talking_threshold = user.u_profile.talking_threshold;

View File

@@ -240,6 +240,13 @@
<configOption name="timeout">
<synopsis>Kick the user out of the conference after this many seconds. 0 means there is no timeout for the user.</synopsis>
</configOption>
<configOption name="text_messaging" default="yes">
<synopsis>Sets if text messages are sent to the user.</synopsis>
<description><para>If text messaging is enabled for this user then
text messages will be sent to it. These may be events or from other
participants in the conference bridge. If disabled then no text
messages are sent to the user.</para></description>
</configOption>
</configObject>
<configObject name="bridge_profile">
<synopsis>A named profile to apply to specific bridges.</synopsis>
@@ -1588,7 +1595,10 @@ static char *handle_cli_confbridge_show_user_profile(struct ast_cli_entry *e, in
ast_cli(a->fd,"Announce User Count all: %s\n",
u_profile.flags & USER_OPT_ANNOUNCEUSERCOUNTALL ?
"enabled" : "disabled");
ast_cli(a->fd,"\n");
ast_cli(a->fd,"Text Messaging: %s\n",
u_profile.flags & USER_OPT_TEXT_MESSAGING ?
"enabled" : "disabled");
ast_cli(a->fd, "\n");
return CLI_SUCCESS;
}
@@ -2381,6 +2391,7 @@ int conf_load_config(void)
aco_option_register(&cfg_info, "dsp_talking_threshold", ACO_EXACT, user_types, __stringify(DEFAULT_TALKING_THRESHOLD), OPT_UINT_T, 0, FLDSET(struct user_profile, talking_threshold));
aco_option_register(&cfg_info, "jitterbuffer", ACO_EXACT, user_types, "no", OPT_BOOLFLAG_T, 1, FLDSET(struct user_profile, flags), USER_OPT_JITTERBUFFER);
aco_option_register(&cfg_info, "timeout", ACO_EXACT, user_types, "0", OPT_UINT_T, 0, FLDSET(struct user_profile, timeout));
aco_option_register(&cfg_info, "text_messaging", ACO_EXACT, user_types, "yes", OPT_BOOLFLAG_T, 1, FLDSET(struct user_profile, flags), USER_OPT_TEXT_MESSAGING);
/* This option should only be used with the CONFBRIDGE dialplan function */
aco_option_register_custom(&cfg_info, "template", ACO_EXACT, user_types, NULL, user_template_handler, 0);

View File

@@ -68,6 +68,7 @@ enum user_profile_flags {
USER_OPT_ANNOUNCE_JOIN_LEAVE_REVIEW = (1 << 16), /*!< modifies ANNOUNCE_JOIN_LEAVE - user reviews the recording before continuing */
USER_OPT_SEND_EVENTS = (1 << 17), /*!< Send text message events to users */
USER_OPT_ECHO_EVENTS = (1 << 18), /*!< Send events only to the admin(s) */
USER_OPT_TEXT_MESSAGING = (1 << 19), /*!< Send text messages to the user */
};
enum bridge_profile_flags {

View File

@@ -162,6 +162,9 @@ type=user
; is ejected from the conference, the user's channel will have the CONFBRIDGE_RESULT
; variable set to "TIMEOUT". A value of 0 indicates that there is no timeout.
; Default: 0
;text_messaging=yes ; When set to yes text messages will be sent to this user. Text messages
; may occur as a result of events or can be received from other participants.
; When set to no text messages will not be sent to this user.
; --- ConfBridge Bridge Profile Options ---
[default_bridge]

View File

@@ -0,0 +1,7 @@
Subject: app_confbridge
A new option, "text_messaging", has been added to the user profile
which allows control over whether text messaging is enabled or
disabled for a user. If enabled (the default) text messages
will be sent to the user. If disabled no text messages will be
sent to the user.

View File

@@ -277,6 +277,8 @@ struct ast_bridge_features {
unsigned int mute:1;
/*! TRUE if DTMF should be passed into the bridge tech. */
unsigned int dtmf_passthrough:1;
/*! TRUE if text messaging is permitted. */
unsigned int text_messaging:1;
};
/*!

View File

@@ -3699,6 +3699,7 @@ int ast_bridge_features_init(struct ast_bridge_features *features)
}
features->dtmf_passthrough = 1;
features->text_messaging = 1;
return 0;
}

View File

@@ -1056,6 +1056,14 @@ int ast_bridge_channel_queue_frame(struct ast_bridge_channel *bridge_channel, st
return 0;
}
if ((fr->frametype == AST_FRAME_TEXT || fr->frametype == AST_FRAME_TEXT_DATA) &&
!bridge_channel->features->text_messaging) {
/* This channel is not accepting text messages. */
ast_bridge_channel_unlock(bridge_channel);
bridge_frame_free(dup);
return 0;
}
if (DEBUG_ATLEAST(1)) {
if (fr->frametype == AST_FRAME_TEXT) {
ast_log(LOG_DEBUG, "Queuing TEXT frame to '%s': %*.s\n", ast_channel_name(bridge_channel->chan),