]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
automerge commit
authorAutomerge Script <automerge@asterisk.org>
Fri, 16 Feb 2007 23:21:15 +0000 (23:21 +0000)
committerAutomerge Script <automerge@asterisk.org>
Fri, 16 Feb 2007 23:21:15 +0000 (23:21 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@55049 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_meetme.c
configs/meetme.conf.sample

index 9897e78b11c5abb5a67610ec6da48db925c3432e..1efd4bbb4d346f20afcd98624870153780a523e5 100644 (file)
@@ -438,8 +438,7 @@ static void conf_play(struct ast_channel *chan, struct ast_conference *conf, int
                ast_autoservice_stop(chan);
 }
 
-static struct ast_conference *build_conf(const char *confno, const char *pin, 
-       const char *pinadmin, int make, int dynamic)
+static struct ast_conference *build_conf(char *confno, char *pin, char *pinadmin, int make, int dynamic)
 {
        struct ast_conference *cnf;
        struct zt_confinfo ztc;
@@ -1646,53 +1645,11 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
        return ret;
 }
 
-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_config *cfg;
+       struct ast_variable *var;
        struct ast_conference *cnf;
 
        /* Check first in the conference list */
@@ -1718,7 +1675,43 @@ static struct ast_conference *find_conf(struct ast_channel *chan, char *confno,
                                cnf = build_conf(confno, "", "", make, dynamic);
                        }
                } else {
-                       cnf = build_conf_from_config(NULL, confno, make, dynamic);
+                       /* 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);
                }
        } else if (dynamic_pin) {
                /* Correct for the user selecting 'D' instead of 'd' to have
@@ -1726,10 +1719,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);
        }
 
        if (cnf) {
index 308ec07726d45b4c2eb4e8da18ca6ad06f2ad759..92561e565e94fbc4d1f9aa522c2d9ddaf3e129a3 100644 (file)
 ;
 ; 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