|
|
|
|
@ -1406,6 +1406,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
|
|
|
|
|
ZT_BUFFERINFO bi;
|
|
|
|
|
char __buf[CONF_SIZE + AST_FRIENDLY_OFFSET];
|
|
|
|
|
char *buf = __buf + AST_FRIENDLY_OFFSET;
|
|
|
|
|
int setusercount = 0;
|
|
|
|
|
|
|
|
|
|
if (!(user = ast_calloc(1, sizeof(*user))))
|
|
|
|
|
return ret;
|
|
|
|
|
@ -1464,9 +1465,6 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
|
|
|
|
|
goto outrun;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (confflags & CONFFLAG_MARKEDUSER)
|
|
|
|
|
conf->markedusers++;
|
|
|
|
|
|
|
|
|
|
ast_mutex_lock(&conf->playlock);
|
|
|
|
|
|
|
|
|
|
if (AST_LIST_EMPTY(&conf->userlist))
|
|
|
|
|
@ -1480,10 +1478,30 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
|
|
|
|
|
user->userflags = confflags;
|
|
|
|
|
user->adminflags = (confflags & CONFFLAG_STARTMUTED) ? ADMINFLAG_SELFMUTED : 0;
|
|
|
|
|
user->talking = -1;
|
|
|
|
|
|
|
|
|
|
ast_mutex_unlock(&conf->playlock);
|
|
|
|
|
|
|
|
|
|
if (!(confflags & CONFFLAG_QUIET) && ((confflags & CONFFLAG_INTROUSER) || (confflags & CONFFLAG_INTROUSERNOREVIEW))) {
|
|
|
|
|
snprintf(user->namerecloc, sizeof(user->namerecloc),
|
|
|
|
|
"%s/meetme/meetme-username-%s-%d", ast_config_AST_SPOOL_DIR,
|
|
|
|
|
conf->confno, user->user_no);
|
|
|
|
|
if (confflags & CONFFLAG_INTROUSERNOREVIEW)
|
|
|
|
|
res = ast_play_and_record(chan, "vm-rec-name", user->namerecloc, 10, "sln", &duration, 128, 0, NULL);
|
|
|
|
|
else
|
|
|
|
|
res = ast_record_review(chan, "vm-rec-name", user->namerecloc, 10, "sln", &duration, NULL);
|
|
|
|
|
if (res == -1)
|
|
|
|
|
goto outrun;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ast_mutex_lock(&conf->playlock);
|
|
|
|
|
|
|
|
|
|
if (confflags & CONFFLAG_MARKEDUSER)
|
|
|
|
|
conf->markedusers++;
|
|
|
|
|
conf->users++;
|
|
|
|
|
/* Update table */
|
|
|
|
|
snprintf(members, sizeof(members), "%d", conf->users);
|
|
|
|
|
ast_update_realtime("meetme", "confno", conf->confno, "members", members , NULL);
|
|
|
|
|
setusercount = 1;
|
|
|
|
|
|
|
|
|
|
/* This device changed state now - if this is the first user */
|
|
|
|
|
if (conf->users == 1)
|
|
|
|
|
@ -1500,18 +1518,6 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
|
|
|
|
|
ast_copy_string(exitcontext, chan->context, sizeof(exitcontext));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!(confflags & CONFFLAG_QUIET) && ((confflags & CONFFLAG_INTROUSER) || (confflags & CONFFLAG_INTROUSERNOREVIEW))) {
|
|
|
|
|
snprintf(user->namerecloc, sizeof(user->namerecloc),
|
|
|
|
|
"%s/meetme/meetme-username-%s-%d", ast_config_AST_SPOOL_DIR,
|
|
|
|
|
conf->confno, user->user_no);
|
|
|
|
|
if (confflags & CONFFLAG_INTROUSERNOREVIEW)
|
|
|
|
|
res = ast_play_and_record(chan, "vm-rec-name", user->namerecloc, 10, "sln", &duration, 128, 0, NULL);
|
|
|
|
|
else
|
|
|
|
|
res = ast_record_review(chan, "vm-rec-name", user->namerecloc, 10, "sln", &duration, NULL);
|
|
|
|
|
if (res == -1)
|
|
|
|
|
goto outrun;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( !(confflags & (CONFFLAG_QUIET | CONFFLAG_NOONLYPERSON)) ) {
|
|
|
|
|
if (conf->users == 1 && !(confflags & CONFFLAG_WAITMARKED))
|
|
|
|
|
if (!ast_streamfile(chan, "conf-onlyperson", chan->language))
|
|
|
|
|
@ -2274,12 +2280,14 @@ bailoutandtrynormal:
|
|
|
|
|
(long)(now - user->jointime));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
conf->users--;
|
|
|
|
|
/* Update table */
|
|
|
|
|
snprintf(members, sizeof(members), "%d", conf->users);
|
|
|
|
|
ast_update_realtime("meetme", "confno", conf->confno, "members", members, NULL);
|
|
|
|
|
if (confflags & CONFFLAG_MARKEDUSER)
|
|
|
|
|
conf->markedusers--;
|
|
|
|
|
if (setusercount) {
|
|
|
|
|
conf->users--;
|
|
|
|
|
/* Update table */
|
|
|
|
|
snprintf(members, sizeof(members), "%d", conf->users);
|
|
|
|
|
ast_update_realtime("meetme", "confno", conf->confno, "members", members, NULL);
|
|
|
|
|
if (confflags & CONFFLAG_MARKEDUSER)
|
|
|
|
|
conf->markedusers--;
|
|
|
|
|
}
|
|
|
|
|
/* Remove ourselves from the list */
|
|
|
|
|
AST_LIST_REMOVE(&conf->userlist, user, list);
|
|
|
|
|
|
|
|
|
|
|