[Asterisk-cvs] asterisk/apps app_meetme.c,1.86,1.87
markster at lists.digium.com
markster at lists.digium.com
Thu Mar 17 14:34:30 CST 2005
- Previous message: [Asterisk-cvs] asterisk sounds.txt,1.46,1.47
- Next message: [Asterisk-cvs] asterisk/sounds conf-leaderhasleft.gsm, NONE,
1.1 conf-placeintoconf.gsm, NONE, 1.1 conf-userswilljoin.gsm,
NONE, 1.1 conf-userwilljoin.gsm, NONE,
1.1 conf-waitforleader.gsm, NONE, 1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv567/apps
Modified Files:
app_meetme.c
Log Message:
Merge improved announcements for conferences with leader (bug #2382)
Index: app_meetme.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_meetme.c,v
retrieving revision 1.86
retrieving revision 1.87
diff -u -d -r1.86 -r1.87
--- app_meetme.c 12 Mar 2005 05:37:32 -0000 1.86
+++ app_meetme.c 17 Mar 2005 20:29:51 -0000 1.87
@@ -555,16 +555,6 @@
{ "meetme", NULL, NULL }, conf_cmd,
"Execute a command on a conference or conferee", conf_usage, complete_confcmd };
-static int confnonzero(void *ptr)
-{
- struct ast_conference *conf = ptr;
- int res;
- ast_mutex_lock(&conflock);
- res = (conf->markedusers == 0);
- ast_mutex_unlock(&conflock);
- return res;
-}
-
static void conf_flush(int fd)
{
int x;
@@ -593,6 +583,8 @@
int musiconhold = 0;
int firstpass = 0;
int origquiet;
+ int lastmarked = 0;
+ int currentmarked = 0;
int ret = -1;
int x;
int menu_active = 0;
@@ -692,35 +684,13 @@
ast_record_review(chan,"vm-rec-name",user->namerecloc, 10,"sln", &duration, NULL);
}
- while((confflags & CONFFLAG_WAITMARKED) && (conf->markedusers == 0)) {
- confflags &= ~CONFFLAG_QUIET;
- confflags |= origquiet;
- /* XXX Announce that we're waiting on the conference lead to join */
- if (!(confflags & CONFFLAG_QUIET)) {
- res = ast_streamfile(chan, "vm-dialout", chan->language);
- if (!res)
- res = ast_waitstream(chan, "");
- } else
- res = 0;
- /* If we're waiting with hold music, set to silent mode */
- if (!res) {
- confflags |= CONFFLAG_QUIET;
- ast_moh_start(chan, NULL);
- res = ast_safe_sleep_conditional(chan, 60000, confnonzero, conf);
- ast_moh_stop(chan);
- }
- if (res < 0) {
- ast_log(LOG_DEBUG, "Got hangup on '%s' already\n", chan->name);
- goto outrun;
- }
- }
-
- if (!(confflags & CONFFLAG_QUIET) && conf->users == 1) {
- if (!ast_streamfile(chan, "conf-onlyperson", chan->language)) {
- if (ast_waitstream(chan, "") < 0)
- goto outrun;
- } else
- goto outrun;
+ if (!(confflags & CONFFLAG_QUIET)) {
+ if (conf->users == 1 && !(confflags & CONFFLAG_WAITMARKED))
+ if (!ast_streamfile(chan, "conf-onlyperson", chan->language))
+ ast_waitstream(chan, "");
+ if ((confflags & CONFFLAG_WAITMARKED) && conf->markedusers == 0)
+ if (!ast_streamfile(chan, "conf-waitforleader", chan->language))
+ ast_waitstream(chan, "");
}
/* Set it into linear mode (write) */
@@ -835,7 +805,8 @@
if (!firstpass && !(confflags & CONFFLAG_MONITOR) && !(confflags & CONFFLAG_ADMIN)) {
firstpass = 1;
if (!(confflags & CONFFLAG_QUIET))
- conf_play(chan, conf, ENTER);
+ if ((confflags & CONFFLAG_WAITMARKED) && conf->markedusers >= 1)
+ conf_play(chan, conf, ENTER);
}
conf_flush(fd);
ast_mutex_unlock(&conflock);
@@ -879,13 +850,82 @@
for(;;) {
outfd = -1;
ms = -1;
+ currentmarked = conf->markedusers;
+ if (!(confflags & CONFFLAG_QUIET) && (confflags & CONFFLAG_MARKEDUSER) && (confflags & CONFFLAG_WAITMARKED) && lastmarked == 0) {
+ if (currentmarked == 1 && conf->users > 1) {
+ ast_say_number(chan, conf->users - 1, AST_DIGIT_ANY, chan->language, (char *) NULL);
+ if (conf->users - 1 == 1) {
+ if (!ast_streamfile(chan, "conf-userwilljoin", chan->language))
+ ast_waitstream(chan, "");
+ } else {
+ if (!ast_streamfile(chan, "conf-userswilljoin", chan->language))
+ ast_waitstream(chan, "");
+ }
+ }
+ if (conf->users == 1 && ! (confflags & CONFFLAG_MARKEDUSER))
+ if (!ast_streamfile(chan, "conf-onlyperson", chan->language))
+ ast_waitstream(chan, "");
+ }
+
c = ast_waitfor_nandfds(&chan, 1, &fd, nfds, NULL, &outfd, &ms);
/* Update the struct with the actual confflags */
user->userflags = confflags;
+ if (confflags & CONFFLAG_WAITMARKED) {
+ if(currentmarked == 0) {
+ if (lastmarked != 0) {
+ if (!(confflags & CONFFLAG_QUIET))
+ if (!ast_streamfile(chan, "conf-leaderhasleft", chan->language))
+ ast_waitstream(chan, "");
+ if(confflags & CONFFLAG_MARKEDEXIT)
+ break;
+ else {
+ ztc.confmode = ZT_CONF_CONF;
+ if (ioctl(fd, ZT_SETCONF, &ztc)) {
+ ast_log(LOG_WARNING, "Error setting conference\n");
+ close(fd);
+ goto outrun;
+ }
+ }
+ }
+ if (musiconhold == 0 && (confflags & CONFFLAG_MOH)) {
+ ast_moh_start(chan, NULL);
+ musiconhold = 1;
+ } else {
+ ztc.confmode = ZT_CONF_CONF;
+ if (ioctl(fd, ZT_SETCONF, &ztc)) {
+ ast_log(LOG_WARNING, "Error setting conference\n");
+ close(fd);
+ goto outrun;
+ }
+ }
+ } else if(currentmarked >= 1 && lastmarked == 0) {
+ if (confflags & CONFFLAG_MONITOR)
+ ztc.confmode = ZT_CONF_CONFMON | ZT_CONF_LISTENER;
+ else if (confflags & CONFFLAG_TALKER)
+ ztc.confmode = ZT_CONF_CONF | ZT_CONF_TALKER;
+ else
+ ztc.confmode = ZT_CONF_CONF | ZT_CONF_TALKER | ZT_CONF_LISTENER;
+ if (ioctl(fd, ZT_SETCONF, &ztc)) {
+ ast_log(LOG_WARNING, "Error setting conference\n");
+ close(fd);
+ goto outrun;
+ }
+ if (musiconhold && (confflags & CONFFLAG_MOH)) {
+ ast_moh_stop(chan);
+ musiconhold = 0;
+ }
+ if ( !(confflags & CONFFLAG_QUIET) && !(confflags & CONFFLAG_MARKEDUSER)) {
+ if (!ast_streamfile(chan, "conf-placeintoconf", chan->language))
+ ast_waitstream(chan, "");
+ conf_play(chan, conf, ENTER);
+ }
+ }
+ }
+
/* trying to add moh for single person conf */
- if (confflags & CONFFLAG_MOH) {
+ if ((confflags & CONFFLAG_MOH) && !( confflags & CONFFLAG_WAITMARKED)) {
if (conf->users == 1) {
if (musiconhold == 0) {
ast_moh_start(chan, NULL);
@@ -900,7 +940,7 @@
}
/* Leave if the last marked user left */
- if (conf->markedusers == 0 && confflags & CONFFLAG_MARKEDEXIT) {
+ if (currentmarked == 0 && (confflags & CONFFLAG_MARKEDEXIT)) {
ret = -1;
break;
}
@@ -1152,6 +1192,7 @@
} else
ast_log(LOG_WARNING, "Failed to read frame: %s\n", strerror(errno));
}
+ lastmarked = currentmarked;
}
}
if (using_pseudo)
- Previous message: [Asterisk-cvs] asterisk sounds.txt,1.46,1.47
- Next message: [Asterisk-cvs] asterisk/sounds conf-leaderhasleft.gsm, NONE,
1.1 conf-placeintoconf.gsm, NONE, 1.1 conf-userswilljoin.gsm,
NONE, 1.1 conf-userwilljoin.gsm, NONE,
1.1 conf-waitforleader.gsm, NONE, 1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the svn-commits
mailing list