[Freeswitch-svn] [commit] r13442 - freeswitch/trunk/src/mod/applications/mod_conference
FreeSWITCH SVN
brian at freeswitch.org
Tue May 26 16:52:11 PDT 2009
Author: brian
Date: Tue May 26 18:52:10 2009
New Revision: 13442
Log:
add conference wait-mod flags and member moderator flag to delay starting a conference until someone with a moderator flag has joined
Modified:
freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c
Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c (original)
+++ freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c Tue May 26 18:52:10 2009
@@ -627,13 +627,14 @@
switch_clear_flag(conference, CFLAG_WAIT_MOD);
}
- if (conference->count > 1 && (!switch_test_flag(conference, CFLAG_WAIT_MOD))) {
- if (conference->moh_sound) {
+ if (conference->count > 1) {
+ if (conference->moh_sound && !switch_test_flag(conference, CFLAG_WAIT_MOD)) {
/* stop MoH if any */
conference_stop_file(conference, FILE_STOP_ASYNC);
}
if (conference->enter_sound) {
- conference_play_file(conference, conference->enter_sound, CONF_DEFAULT_LEADIN, switch_core_session_get_channel(member->session), 1);
+ conference_play_file(conference, conference->enter_sound, CONF_DEFAULT_LEADIN, switch_core_session_get_channel(member->session),
+ switch_test_flag(conference, CFLAG_WAIT_MOD) ? 0 : 1);
}
}
@@ -650,7 +651,7 @@
if (conference->count >= conference->announce_count && conference->announce_count > 1) {
switch_snprintf(msg, sizeof(msg), "There are %d callers", conference->count);
conference_member_say(member, msg, CONF_DEFAULT_LEADIN);
- } else if (conference->count == 1 && !conference->perpetual_sound) {
+ } else if (conference->count == 1 && !conference->perpetual_sound && !switch_test_flag(conference, CFLAG_WAIT_MOD)) {
/* as long as its not a bridge_to conference, announce if person is alone */
if (!switch_test_flag(conference, CFLAG_BRIDGE_TO)) {
if (conference->alone_sound) {
@@ -788,7 +789,7 @@
if (conference->exit_sound) {
conference_play_file(conference, conference->exit_sound, 0, switch_core_session_get_channel(member->session), 0);
}
- if (conference->count == 1 && conference->alone_sound) {
+ if (conference->count == 1 && conference->alone_sound && !switch_test_flag(conference, CFLAG_WAIT_MOD)) {
conference_stop_file(conference, FILE_STOP_ASYNC);
conference_play_file(conference, conference->alone_sound, 0, switch_core_session_get_channel(member->session), 1);
}
@@ -4558,7 +4559,7 @@
return status;
}
-static void set_mflags(char *flags, member_flag_t *f)
+static void set_mflags(const char *flags, member_flag_t *f)
{
if (flags) {
char *dup = strdup(flags);
@@ -4600,7 +4601,7 @@
-static void set_cflags(char *flags, member_flag_t *f)
+static void set_cflags(const char *flags, member_flag_t *f)
{
if (flags) {
char *dup = strdup(flags);
@@ -4844,7 +4845,7 @@
char *bridgeto = NULL;
char *profile_name = NULL;
switch_xml_t cxml = NULL, cfg = NULL, profiles = NULL;
- char *flags_str;
+ const char *flags_str;
member_flag_t mflags = 0;
switch_core_session_message_t msg = { 0 };
uint8_t rl = 0, isbr = 0;
@@ -4874,12 +4875,13 @@
if ((flags_str = strstr(mydata, flags_prefix))) {
char *p;
-
- *flags_str = '\0';
+ *((char *)flags_str) = '\0';
flags_str += strlen(flags_prefix);
if ((p = strchr(flags_str, '}'))) {
*p = '\0';
}
+ } else {
+ flags_str = switch_channel_get_variable(channel, "conference_member_flags");
}
/* is this a bridging conference ? */
More information about the Freeswitch-svn
mailing list