diff options
-rw-r--r-- | apps/app_meetme.c | 93 | ||||
-rw-r--r-- | configs/meetme.conf.sample | 5 |
2 files changed, 42 insertions, 56 deletions
diff --git a/apps/app_meetme.c b/apps/app_meetme.c index e8f9dd5bb..7b13e28c6 100644 --- a/apps/app_meetme.c +++ b/apps/app_meetme.c @@ -638,8 +638,7 @@ static void conf_play(struct ast_channel *chan, struct ast_conference *conf, enu * \return A pointer to the conference struct, or NULL if it wasn't found and * make or dynamic were not set. */ -static struct ast_conference *build_conf(const char *confno, const char *pin, - const char *pinadmin, int make, int dynamic, int refcount) +static struct ast_conference *build_conf(char *confno, char *pin, char *pinadmin, int make, int dynamic, int refcount) { struct ast_conference *cnf; struct zt_confinfo ztc; @@ -2088,55 +2087,6 @@ bailoutandtrynormal: return ret; } -static struct ast_conference *build_conf_from_config(struct ast_conference *conf, const char *confno, - int make, int dynamic, int refcount) -{ - struct ast_config *cfg; - struct ast_variable *var; - - if (!(cfg = ast_config_load(CONFIG_FILE_NAME))) { - ast_log(LOG_WARNING, "No %s file :(\n", CONFIG_FILE_NAME); - return NULL; - } - - var = ast_variable_browse(cfg, "rooms"); - for (; var; var = var->next) { - char *parse; - AST_DECLARE_APP_ARGS(args, - AST_APP_ARG(confno); - AST_APP_ARG(pin); - AST_APP_ARG(pinadmin); - ); - - if (strcasecmp(var->name, "conf")) - continue; - - parse = ast_strdupa(var->value); - AST_NONSTANDARD_APP_ARGS(args, parse, ','); - - if (strcasecmp(args.confno, confno)) - continue; - - if (!conf) { - conf = build_conf(args.confno, S_OR(args.pin, ""), - S_OR(args.pinadmin, ""), make, dynamic, refcount); - break; - } - - ast_copy_string(conf->pin, S_OR(args.pin, ""), sizeof(conf->pin)); - ast_copy_string(conf->pinadmin, S_OR(args.pinadmin, ""), sizeof(conf->pinadmin)); - - break; - } - - if (!var && !conf) - ast_log(LOG_DEBUG, "%s isn't a valid conference\n", confno); - - ast_config_destroy(cfg); - - return conf; -} - static struct ast_conference *find_conf_realtime(struct ast_channel *chan, char *confno, int make, int dynamic, char *dynamic_pin, size_t pin_buf_len, int refcount, struct ast_flags *confflags) { @@ -2193,10 +2143,19 @@ static struct ast_conference *find_conf_realtime(struct ast_channel *chan, char return cnf; } + static struct ast_conference *find_conf(struct ast_channel *chan, char *confno, int make, int dynamic, char *dynamic_pin, size_t pin_buf_len, int refcount, struct ast_flags *confflags) { + struct ast_config *cfg; + struct ast_variable *var; struct ast_conference *cnf; + char *parse; + AST_DECLARE_APP_ARGS(args, + AST_APP_ARG(confno); + AST_APP_ARG(pin); + AST_APP_ARG(pinadmin); + ); /* Check first in the conference list */ AST_LIST_LOCK(&confs); @@ -2224,7 +2183,33 @@ static struct ast_conference *find_conf(struct ast_channel *chan, char *confno, cnf = build_conf(confno, "", "", make, dynamic, refcount); } } else { - cnf = build_conf_from_config(NULL, confno, make, dynamic, refcount); + /* Check the config */ + cfg = ast_config_load(CONFIG_FILE_NAME); + if (!cfg) { + ast_log(LOG_WARNING, "No %s file :(\n", CONFIG_FILE_NAME); + return NULL; + } + for (var = ast_variable_browse(cfg, "rooms"); var; var = var->next) { + if (strcasecmp(var->name, "conf")) + continue; + + if (!(parse = ast_strdupa(var->value))) + return NULL; + + AST_NONSTANDARD_APP_ARGS(args, parse, ','); + if (!strcasecmp(args.confno, confno)) { + /* Bingo it's a valid conference */ + cnf = build_conf(args.confno, + S_OR(args.pin, ""), + S_OR(args.pinadmin, ""), + make, dynamic, refcount); + break; + } + } + if (!var) { + ast_log(LOG_DEBUG, "%s isn't a valid conference\n", confno); + } + ast_config_destroy(cfg); } } else if (dynamic_pin) { /* Correct for the user selecting 'D' instead of 'd' to have @@ -2232,10 +2217,6 @@ static struct ast_conference *find_conf(struct ast_channel *chan, char *confno, with a pin. */ if (dynamic_pin[0] == 'q') dynamic_pin[0] = '\0'; - } else if (!cnf->isdynamic) { - /* If the conference exists, check the config again, just in case - * the pin in the file has changed. */ - build_conf_from_config(cnf, confno, 0, 0, 0); } if (cnf) { diff --git a/configs/meetme.conf.sample b/configs/meetme.conf.sample index bcd47e0bc..62e52dca4 100644 --- a/configs/meetme.conf.sample +++ b/configs/meetme.conf.sample @@ -17,5 +17,10 @@ ; ; Usage is conf => confno[,pin][,adminpin] ; +; Note that once a participant has called the conference, a change to the pin +; number done in this file will not take effect until there are no more users +; in the conference and it goes away. When it is created again, it will have +; the new pin number. +; ;conf => 1234 ;conf => 2345,9938 |