diff options
author | automerge <automerge@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-02-16 21:07:50 +0000 |
---|---|---|
committer | automerge <automerge@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-02-16 21:07:50 +0000 |
commit | a273bc321ee864c4f8e0781c1f3180c7335d2847 (patch) | |
tree | 17c22db3bafa3cc199f2561a35b1944dffbac327 /apps | |
parent | 9a8e978d34c452af26ed1a4e1ce71a8506977fc6 (diff) |
automerge commit
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2-netsec@54968 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps')
-rw-r--r-- | apps/app_meetme.c | 91 |
1 files changed, 51 insertions, 40 deletions
diff --git a/apps/app_meetme.c b/apps/app_meetme.c index 1efd4bbb4..9897e78b1 100644 --- a/apps/app_meetme.c +++ b/apps/app_meetme.c @@ -438,7 +438,8 @@ static void conf_play(struct ast_channel *chan, struct ast_conference *conf, int ast_autoservice_stop(chan); } -static struct ast_conference *build_conf(char *confno, char *pin, char *pinadmin, int make, int dynamic) +static struct ast_conference *build_conf(const char *confno, const char *pin, + const char *pinadmin, int make, int dynamic) { struct ast_conference *cnf; struct zt_confinfo ztc; @@ -1645,11 +1646,53 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c return ret; } -static struct ast_conference *find_conf(struct ast_channel *chan, char *confno, int make, int dynamic, char *dynamic_pin, - struct ast_flags *confflags) +static struct ast_conference *build_conf_from_config(struct ast_conference *conf, const char *confno, + int make, int dynamic) { 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) { + /* Separate the PIN */ + char *pin, *pinadmin, *conf_name; + if (strcasecmp(var->name, "conf")) + continue; + + pinadmin = ast_strdupa(var->value); + conf_name = strsep(&pinadmin, "|,"); + pin = strsep(&pinadmin, "|,"); + + if (strcasecmp(conf_name, confno)) + continue; + + if (!conf) { + conf = build_conf(confno, pin ? pin : "", pinadmin ? pinadmin : "", make, dynamic); + break; + } + + ast_copy_string(conf->pin, pin ? pin : "", sizeof(conf->pin)); + ast_copy_string(conf->pinadmin, pinadmin ? 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(struct ast_channel *chan, char *confno, int make, int dynamic, char *dynamic_pin, + struct ast_flags *confflags) +{ struct ast_conference *cnf; /* Check first in the conference list */ @@ -1675,43 +1718,7 @@ static struct ast_conference *find_conf(struct ast_channel *chan, char *confno, cnf = build_conf(confno, "", "", make, dynamic); } } else { - /* 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; - } - var = ast_variable_browse(cfg, "rooms"); - while (var) { - if (!strcasecmp(var->name, "conf")) { - /* Separate the PIN */ - char *pin, *pinadmin, *conf; - - if ((pinadmin = ast_strdupa(var->value))) { - conf = strsep(&pinadmin, "|,"); - pin = strsep(&pinadmin, "|,"); - if (!strcasecmp(conf, confno)) { - /* Bingo it's a valid conference */ - if (pin) - if (pinadmin) - cnf = build_conf(confno, pin, pinadmin, make, dynamic); - else - cnf = build_conf(confno, pin, "", make, dynamic); - else - if (pinadmin) - cnf = build_conf(confno, "", pinadmin, make, dynamic); - else - cnf = build_conf(confno, "", "", make, dynamic); - break; - } - } - } - var = var->next; - } - if (!var) { - ast_log(LOG_DEBUG, "%s isn't a valid conference\n", confno); - } - ast_config_destroy(cfg); + cnf = build_conf_from_config(NULL, confno, make, dynamic); } } else if (dynamic_pin) { /* Correct for the user selecting 'D' instead of 'd' to have @@ -1719,6 +1726,10 @@ 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); } if (cnf) { |