diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-03-20 03:04:46 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-03-20 03:04:46 +0000 |
commit | 90b64b076b8cff28c609f6e719e54b5e0974f826 (patch) | |
tree | 1959d9304ac53615988bf2da8ae8d93cd4cd4fd2 /apps | |
parent | 2a9118c19c41576aa2761a48aaf77adc15c1baac (diff) |
Add count of users in conference (bug #3215)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5212 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps')
-rwxr-xr-x | apps/app_meetme.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/apps/app_meetme.c b/apps/app_meetme.c index a656c024d..203d8b46c 100755 --- a/apps/app_meetme.c +++ b/apps/app_meetme.c @@ -76,6 +76,7 @@ static char *descrip = " using format ${MEETME_RECORDINGFORMAT}). Default filename is\n" " meetme-conf-rec-${CONFNO}-${UNIQUEID} and the default format is wav.\n" " 'q' -- quiet mode (don't play enter/leave sounds)\n" +" 'c' -- announce user(s) count on joining a conference\n" " 'M' -- enable music on hold when the conference has a single caller\n" " 'x' -- close the conference when last marked user exits\n" " 'w' -- wait until the marked user enters the conference\n" @@ -189,10 +190,12 @@ static void *recordthread(void *args); #define CONFFLAG_EMPTY (1 << 19) #define CONFFLAG_EMPTYNOPIN (1 << 20) #define CONFFLAG_ALWAYSPROMPT (1 << 21) +#define CONFFLAG_ANNOUNCEUSERCOUNT (1 << 22) /* If set, when user joins the conference, they will be told the number of users that are already in */ AST_DECLARE_OPTIONS(meetme_opts,{ ['a'] = { CONFFLAG_ADMIN }, + ['c'] = { CONFFLAG_ANNOUNCEUSERCOUNT }, ['T'] = { CONFFLAG_MONITORTALKER }, ['i'] = { CONFFLAG_INTROUSER }, ['m'] = { CONFFLAG_MONITOR }, @@ -693,6 +696,42 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c ast_waitstream(chan, ""); } + if (!(confflags & CONFFLAG_QUIET) && (confflags & CONFFLAG_ANNOUNCEUSERCOUNT) && conf->users > 1) { + int keepplaying=1; + + if (conf->users == 2) { + if (!ast_streamfile(chan,"conf-onlyone",chan->language)) { + res = ast_waitstream(chan, AST_DIGIT_ANY); + if (res > 0) + keepplaying=0; + else if (res == -1) + goto outrun; + } + } else { + if (!ast_streamfile(chan, "conf-thereare", chan->language)) { + res = ast_waitstream(chan, AST_DIGIT_ANY); + if (res > 0) + keepplaying=0; + else if (res == -1) + goto outrun; + } + if (keepplaying) { + res = ast_say_number(chan, conf->users - 1, AST_DIGIT_ANY, chan->language, (char *) NULL); + if (res > 0) + keepplaying=0; + else if (res == -1) + goto outrun; + } + if (keepplaying && !ast_streamfile(chan, "conf-otherinparty", chan->language)) { + res = ast_waitstream(chan, AST_DIGIT_ANY); + if (res > 0) + keepplaying=0; + else if (res == -1) + goto outrun; + } + } + } + /* Set it into linear mode (write) */ if (ast_set_write_format(chan, AST_FORMAT_SLINEAR) < 0) { ast_log(LOG_WARNING, "Unable to set '%s' to write linear mode\n", chan->name); |