[asterisk-commits] russell: branch 1.2 r54955 - /branches/1.2/apps/app_meetme.c

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Fri Feb 16 13:56:58 MST 2007


Author: russell
Date: Fri Feb 16 14:56:58 2007
New Revision: 54955

URL: http://svn.digium.com/view/asterisk?view=rev&rev=54955
Log:
For conferences that are configured in meetme.conf, check the configuration
file every time someone joins the conference instead of only when the
conference is first created.  This is to ensure that changes to the pin
numbers in the config file are always honored.  (issue #9073)

Modified:
    branches/1.2/apps/app_meetme.c

Modified: branches/1.2/apps/app_meetme.c
URL: http://svn.digium.com/view/asterisk/branches/1.2/apps/app_meetme.c?view=diff&rev=54955&r1=54954&r2=54955
==============================================================================
--- branches/1.2/apps/app_meetme.c (original)
+++ branches/1.2/apps/app_meetme.c Fri Feb 16 14:56:58 2007
@@ -438,7 +438,8 @@
 		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 @@
 	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 */
@@ -1675,43 +1718,7 @@
 				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 @@
 		   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) {



More information about the asterisk-commits mailing list