diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2003-10-29 22:52:20 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2003-10-29 22:52:20 +0000 |
commit | efda1263020b1096b06c600130f49b0d087f78da (patch) | |
tree | 821ea2ce274efaedfe153838233d90ebd7d00504 /apps/app_meetme.c | |
parent | 88a7d3c942ec15d0d3d69b96309553a64df3fcf3 (diff) |
Add "dynamic" option to create conference rooms on demand
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1680 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_meetme.c')
-rwxr-xr-x | apps/app_meetme.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/apps/app_meetme.c b/apps/app_meetme.c index fa77ba309..99cc472ab 100755 --- a/apps/app_meetme.c +++ b/apps/app_meetme.c @@ -51,6 +51,7 @@ static char *descrip = " 'p' -- allow user to exit the conference by pressing '#'\n" " 's' -- send user to admin/user menu if '*' is received\n" " 't' -- set talk only mode\n" +" 'd' -- dynamically add conference\n" " 'v' -- video mode\n" " 'q' -- quiet mode (don't play enter/leave sounds)\n" " 'b' -- run AGI script specified in ${MEETME_AGI_BACKGROUND} (Zap channels only)\n" @@ -494,7 +495,7 @@ outrun: return ret; } -static struct conf *find_conf(char *confno, int make) +static struct conf *find_conf(char *confno, int make, int dynamic) { struct ast_config *cfg; struct ast_variable *var; @@ -515,7 +516,11 @@ static struct conf *find_conf(char *confno, int make) var = var->next; } if (!var) { - ast_log(LOG_DEBUG, "%s isn't a valid conference\n", confno); + if (dynamic) { + ast_log(LOG_DEBUG, "Using dynamic conference '%s'\n", confno); + cnf = build_conf(confno, make); + } else + ast_log(LOG_DEBUG, "%s isn't a valid conference\n", confno); } ast_destroy(cfg); return cnf; @@ -539,7 +544,7 @@ static int count_exec(struct ast_channel *chan, void *data) LOCAL_USER_ADD(u); strcpy(localdata,data); confnum = strsep(&localdata,"|"); - conf = find_conf(confnum, 0); + conf = find_conf(confnum, 0, 1); if (conf) cnt = conf->users; else @@ -567,6 +572,7 @@ static int conf_exec(struct ast_channel *chan, void *data) int retrycnt = 0; struct conf *cnf; int confflags = 0; + int dynamic = 0; char info[256], *ptr, *inflags, *inpin; @@ -600,6 +606,8 @@ static int conf_exec(struct ast_channel *chan, void *data) confflags |= CONFFLAG_QUIET; if (strchr(inflags, 'b')) confflags |= CONFFLAG_AGI; + if (strchr(inflags, 'd')) + dynamic = 1; inpin = strchr(inflags, '|'); @@ -622,7 +630,7 @@ retry: } if (strlen(confno)) { /* Check the validity of the conference */ - cnf = find_conf(confno, 1); + cnf = find_conf(confno, 1, dynamic); if (!cnf) { res = ast_streamfile(chan, "conf-invalid", chan->language); if (res < 0) |