From: William McCall Date: Tue, 29 May 2018 00:17:52 +0000 (+0000) Subject: app_confbridge: Add talking indicator for ConfBridgeList AMI response X-Git-Tag: 13.22.0-rc1~40^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9ff4779f03bbb4c99ee0cf529ff4ab8bf0a52ab2;p=thirdparty%2Fasterisk.git 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 --- diff --git a/CHANGES b/CHANGES index 4bb273790f..a02cd8aeba 100644 --- a/CHANGES +++ b/CHANGES @@ -28,6 +28,12 @@ app_sendtext Content-Type of a message. Since you can now set Content-Type, other text/* content types are now valid. +app_confbridge +------------------ + * ConfbridgeList now shows talking status. This utilizes the same voice + detection as the ConfbridgeTalking event, so bridges must be configured + with "talk_detection_events=yes" for this flag to have meaning. + ------------------------------------------------------------------------------ --- Functionality changes from Asterisk 13.20.0 to Asterisk 13.21.0 ---------- ------------------------------------------------------------------------------ diff --git a/apps/app_confbridge.c b/apps/app_confbridge.c index df932151e7..ebeef92019 100644 --- a/apps/app_confbridge.c +++ b/apps/app_confbridge.c @@ -278,6 +278,13 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") + + Is this user talking? + + + + + The number of seconds the channel has been up. @@ -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)); diff --git a/apps/confbridge/include/confbridge.h b/apps/confbridge/include/confbridge.h index e59400c3ec..a1f9f4a087 100644 --- a/apps/confbridge/include/confbridge.h +++ b/apps/confbridge/include/confbridge.h @@ -254,6 +254,7 @@ struct confbridge_user { unsigned int muted:1; /*!< Has the user requested to be muted? */ unsigned int kicked:1; /*!< User has been kicked from the conference */ unsigned int playing_moh:1; /*!< MOH is currently being played to the user */ + unsigned int talking:1; /*!< User is currently talking */ AST_LIST_HEAD_NOLOCK(, post_join_action) post_join_list; /*!< List of sounds to play after joining */; AST_LIST_ENTRY(confbridge_user) list; /*!< Linked list information */ };