app_confbridge: Add talking indicator for ConfBridgeList AMI response

When an AMI client connects, it cannot determine if a user was talking
prior to a transition in the user speaking state (which would generate
a ConfbridgeTalking event). This patch causes app_confbridge to track the
talking state and make this state available via ConfBridgeList.

ASTERISK-27877 #close

Change-Id: I19b5284f34966c3fda94f5b99a7e40e6b89767c6
This commit is contained in:
William McCall
2018-05-29 00:17:52 +00:00
parent 7f318c3ab5
commit 9ff4779f03
3 changed files with 21 additions and 1 deletions

View File

@@ -278,6 +278,13 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
<enum name="No"/>
</enumlist>
</parameter>
<parameter name="Talking">
<para>Is this user talking?</para>
<enumlist>
<enum name="Yes"/>
<enum name="No"/>
</enumlist>
</parameter>
<parameter name="AnsweredTime">
<para>The number of seconds the channel has been up.</para>
</parameter>
@@ -2085,7 +2092,7 @@ static int play_sound_number(struct confbridge_conference *conference, int say_n
static int conf_handle_talker_cb(struct ast_bridge_channel *bridge_channel, void *hook_pvt, int talking)
{
const struct confbridge_user *user = hook_pvt;
struct confbridge_user *user = hook_pvt;
RAII_VAR(struct confbridge_conference *, conference, NULL, ao2_cleanup);
struct ast_json *talking_extras;
@@ -2095,6 +2102,10 @@ static int conf_handle_talker_cb(struct ast_bridge_channel *bridge_channel, void
return -1;
}
ao2_lock(conference);
user->talking = talking;
ao2_unlock(conference);
talking_extras = ast_json_pack("{s: s, s: b}",
"talking_status", talking ? "on" : "off",
"admin", ast_test_flag(&user->u_profile, USER_OPT_ADMIN));
@@ -3526,6 +3537,7 @@ static int action_confbridgelist_item(struct mansession *s, const char *id_text,
"EndMarked: %s\r\n"
"Waiting: %s\r\n"
"Muted: %s\r\n"
"Talking: %s\r\n"
"AnsweredTime: %d\r\n"
"%s"
"\r\n",
@@ -3537,6 +3549,7 @@ static int action_confbridgelist_item(struct mansession *s, const char *id_text,
AST_YESNO(ast_test_flag(&user->u_profile, USER_OPT_ENDMARKED)),
AST_YESNO(waiting),
AST_YESNO(user->muted),
AST_YESNO(user->talking),
ast_channel_get_up_time(user->chan),
ast_str_buffer(snap_str));