app_confbridge: ConfbridgeList event has standard channel shapshot headers.
* Made the AMI ConfbridgeList action's ConfbridgeList events output all the standard channel snapshot headers instead of a few hand-coded channel snapshot headers. The benefit is that the CallerIDName gets disruptive characters like CR, LF, Tab, and a few others escaped. However, an empty CallerIDName is now output as "<unknown>" instead of "<no name>". ASTERISK-27651 Change-Id: Iaf7d54a9d40194c2db060bc9b4979fab6720d977
This commit is contained in:
parent
f4b161440b
commit
67cd90f10d
6
CHANGES
6
CHANGES
|
@ -79,6 +79,12 @@ app_confbridge
|
||||||
* Added the Muted header to the ConfbridgeJoin AMI event to indicate the
|
* Added the Muted header to the ConfbridgeJoin AMI event to indicate the
|
||||||
participant's starting mute status.
|
participant's starting mute status.
|
||||||
|
|
||||||
|
* Made the AMI ConfbridgeList action's ConfbridgeList events output all
|
||||||
|
the standard channel snapshot headers instead of a few hand-coded channel
|
||||||
|
snapshot headers. The benefit is that the CallerIDName gets disruptive
|
||||||
|
characters like CR, LF, Tab, and a few others escaped. However, an empty
|
||||||
|
CallerIDName is now output as "<unknown>" instead of "<no name>".
|
||||||
|
|
||||||
app_followme
|
app_followme
|
||||||
------------------
|
------------------
|
||||||
* Added a new prompt, connecting-prompt, which will be played
|
* Added a new prompt, connecting-prompt, which will be played
|
||||||
|
|
|
@ -67,6 +67,7 @@
|
||||||
#include "asterisk/test.h"
|
#include "asterisk/test.h"
|
||||||
#include "asterisk/stasis.h"
|
#include "asterisk/stasis.h"
|
||||||
#include "asterisk/stasis_bridges.h"
|
#include "asterisk/stasis_bridges.h"
|
||||||
|
#include "asterisk/stasis_channels.h"
|
||||||
#include "asterisk/json.h"
|
#include "asterisk/json.h"
|
||||||
#include "asterisk/format_cache.h"
|
#include "asterisk/format_cache.h"
|
||||||
#include "asterisk/taskprocessor.h"
|
#include "asterisk/taskprocessor.h"
|
||||||
|
@ -226,6 +227,62 @@
|
||||||
ConfbridgeListComplete.</para>
|
ConfbridgeListComplete.</para>
|
||||||
</description>
|
</description>
|
||||||
</manager>
|
</manager>
|
||||||
|
<managerEvent language="en_US" name="ConfbridgeList">
|
||||||
|
<managerEventInstance class="EVENT_FLAG_REPORTING">
|
||||||
|
<synopsis>Raised as part of the ConfbridgeList action response list.</synopsis>
|
||||||
|
<syntax>
|
||||||
|
<parameter name="Conference">
|
||||||
|
<para>The name of the Confbridge conference.</para>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="Admin">
|
||||||
|
<para>Identifies this user as an admin user.</para>
|
||||||
|
<enumlist>
|
||||||
|
<enum name="Yes"/>
|
||||||
|
<enum name="No"/>
|
||||||
|
</enumlist>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="MarkedUser">
|
||||||
|
<para>Identifies this user as a marked user.</para>
|
||||||
|
<enumlist>
|
||||||
|
<enum name="Yes"/>
|
||||||
|
<enum name="No"/>
|
||||||
|
</enumlist>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="WaitMarked">
|
||||||
|
<para>Must this user wait for a marked user to join?</para>
|
||||||
|
<enumlist>
|
||||||
|
<enum name="Yes"/>
|
||||||
|
<enum name="No"/>
|
||||||
|
</enumlist>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="EndMarked">
|
||||||
|
<para>Does this user get kicked after the last marked user leaves?</para>
|
||||||
|
<enumlist>
|
||||||
|
<enum name="Yes"/>
|
||||||
|
<enum name="No"/>
|
||||||
|
</enumlist>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="Waiting">
|
||||||
|
<para>Is this user waiting for a marked user to join?</para>
|
||||||
|
<enumlist>
|
||||||
|
<enum name="Yes"/>
|
||||||
|
<enum name="No"/>
|
||||||
|
</enumlist>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="Muted">
|
||||||
|
<para>The current mute status.</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>
|
||||||
|
<channel_snapshot/>
|
||||||
|
</syntax>
|
||||||
|
</managerEventInstance>
|
||||||
|
</managerEvent>
|
||||||
<manager name="ConfbridgeListRooms" language="en_US">
|
<manager name="ConfbridgeListRooms" language="en_US">
|
||||||
<synopsis>
|
<synopsis>
|
||||||
List active conferences.
|
List active conferences.
|
||||||
|
@ -3471,15 +3528,26 @@ static struct ast_custom_function confbridge_info_function = {
|
||||||
.read = func_confbridge_info,
|
.read = func_confbridge_info,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void action_confbridgelist_item(struct mansession *s, const char *id_text, struct confbridge_conference *conference, struct confbridge_user *user, int waiting)
|
static int action_confbridgelist_item(struct mansession *s, const char *id_text, struct confbridge_conference *conference, struct confbridge_user *user, int waiting)
|
||||||
{
|
{
|
||||||
|
struct ast_channel_snapshot *snapshot;
|
||||||
|
struct ast_str *snap_str;
|
||||||
|
|
||||||
|
snapshot = ast_channel_snapshot_get_latest(ast_channel_uniqueid(user->chan));
|
||||||
|
if (!snapshot) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
snap_str = ast_manager_build_channel_state_string(snapshot);
|
||||||
|
if (!snap_str) {
|
||||||
|
ao2_ref(snapshot, -1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
astman_append(s,
|
astman_append(s,
|
||||||
"Event: ConfbridgeList\r\n"
|
"Event: ConfbridgeList\r\n"
|
||||||
"%s"
|
"%s"
|
||||||
"Conference: %s\r\n"
|
"Conference: %s\r\n"
|
||||||
"CallerIDNum: %s\r\n"
|
|
||||||
"CallerIDName: %s\r\n"
|
|
||||||
"Channel: %s\r\n"
|
|
||||||
"Admin: %s\r\n"
|
"Admin: %s\r\n"
|
||||||
"MarkedUser: %s\r\n"
|
"MarkedUser: %s\r\n"
|
||||||
"WaitMarked: %s\r\n"
|
"WaitMarked: %s\r\n"
|
||||||
|
@ -3487,19 +3555,23 @@ static void action_confbridgelist_item(struct mansession *s, const char *id_text
|
||||||
"Waiting: %s\r\n"
|
"Waiting: %s\r\n"
|
||||||
"Muted: %s\r\n"
|
"Muted: %s\r\n"
|
||||||
"AnsweredTime: %d\r\n"
|
"AnsweredTime: %d\r\n"
|
||||||
|
"%s"
|
||||||
"\r\n",
|
"\r\n",
|
||||||
id_text,
|
id_text,
|
||||||
conference->name,
|
conference->name,
|
||||||
S_COR(ast_channel_caller(user->chan)->id.number.valid, ast_channel_caller(user->chan)->id.number.str, "<unknown>"),
|
AST_YESNO(ast_test_flag(&user->u_profile, USER_OPT_ADMIN)),
|
||||||
S_COR(ast_channel_caller(user->chan)->id.name.valid, ast_channel_caller(user->chan)->id.name.str, "<no name>"),
|
AST_YESNO(ast_test_flag(&user->u_profile, USER_OPT_MARKEDUSER)),
|
||||||
ast_channel_name(user->chan),
|
AST_YESNO(ast_test_flag(&user->u_profile, USER_OPT_WAITMARKED)),
|
||||||
ast_test_flag(&user->u_profile, USER_OPT_ADMIN) ? "Yes" : "No",
|
AST_YESNO(ast_test_flag(&user->u_profile, USER_OPT_ENDMARKED)),
|
||||||
ast_test_flag(&user->u_profile, USER_OPT_MARKEDUSER) ? "Yes" : "No",
|
AST_YESNO(waiting),
|
||||||
ast_test_flag(&user->u_profile, USER_OPT_WAITMARKED) ? "Yes" : "No",
|
AST_YESNO(user->muted),
|
||||||
ast_test_flag(&user->u_profile, USER_OPT_ENDMARKED) ? "Yes" : "No",
|
ast_channel_get_up_time(user->chan),
|
||||||
waiting ? "Yes" : "No",
|
ast_str_buffer(snap_str));
|
||||||
user->muted ? "Yes" : "No",
|
|
||||||
ast_channel_get_up_time(user->chan));
|
ast_free(snap_str);
|
||||||
|
ao2_ref(snapshot, -1);
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int action_confbridgelist(struct mansession *s, const struct message *m)
|
static int action_confbridgelist(struct mansession *s, const struct message *m)
|
||||||
|
@ -3533,12 +3605,10 @@ static int action_confbridgelist(struct mansession *s, const struct message *m)
|
||||||
|
|
||||||
ao2_lock(conference);
|
ao2_lock(conference);
|
||||||
AST_LIST_TRAVERSE(&conference->active_list, user, list) {
|
AST_LIST_TRAVERSE(&conference->active_list, user, list) {
|
||||||
total++;
|
total += action_confbridgelist_item(s, id_text, conference, user, 0);
|
||||||
action_confbridgelist_item(s, id_text, conference, user, 0);
|
|
||||||
}
|
}
|
||||||
AST_LIST_TRAVERSE(&conference->waiting_list, user, list) {
|
AST_LIST_TRAVERSE(&conference->waiting_list, user, list) {
|
||||||
total++;
|
total += action_confbridgelist_item(s, id_text, conference, user, 1);
|
||||||
action_confbridgelist_item(s, id_text, conference, user, 1);
|
|
||||||
}
|
}
|
||||||
ao2_unlock(conference);
|
ao2_unlock(conference);
|
||||||
ao2_ref(conference, -1);
|
ao2_ref(conference, -1);
|
||||||
|
|
Loading…
Reference in New Issue