[svn-commits] rmudgett: branch 1.8 r331955 - /branches/1.8/channels/chan_dahdi.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Mon Aug 15 12:24:12 CDT 2011


Author: rmudgett
Date: Mon Aug 15 12:24:08 2011
New Revision: 331955

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=331955
Log:
Fix some minor chan_dahdi config load issues.

* Address chan_dahdi.conf dahdichan option todo item about needing line
number.

* Make ignore_failed_channels option also apply to dahdichan option.

* Don't attempt to create a default pseudo channel if the chan_dahdi.conf
channel/channels option is not allowed.

* Add a similar check for dahdichan in normal chan_dahdi.conf sections as
is done in users.conf.

Modified:
    branches/1.8/channels/chan_dahdi.c

Modified: branches/1.8/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/channels/chan_dahdi.c?view=diff&rev=331955&r1=331954&r2=331955
==============================================================================
--- branches/1.8/channels/chan_dahdi.c (original)
+++ branches/1.8/channels/chan_dahdi.c Mon Aug 15 12:24:08 2011
@@ -16715,7 +16715,7 @@
 	struct dahdi_pvt *tmp;
 	int y;
 	int found_pseudo = 0;
-	char dahdichan[MAX_CHANLIST_LEN] = {};
+	struct ast_variable *dahdichan = NULL;
 
 	for (; v; v = v->next) {
 		if (!ast_jb_read_conf(&global_jbconf, v->name, v->value))
@@ -16749,7 +16749,8 @@
 				confp->chan.usefaxbuffers = 1;
 			}
  		} else if (!strcasecmp(v->name, "dahdichan")) {
- 			ast_copy_string(dahdichan, v->value, sizeof(dahdichan));
+			/* Only process the last dahdichan value. */
+			dahdichan = v;
 		} else if (!strcasecmp(v->name, "usedistinctiveringdetection")) {
 			usedistinctiveringdetection = ast_true(v->value);
 		} else if (!strcasecmp(v->name, "distinctiveringaftercid")) {
@@ -17746,11 +17747,17 @@
 		confp->chan.vars = NULL;
 	}
 
-	if (dahdichan[0]) {
-		/* The user has set 'dahdichan' */
-		/*< \todo pass proper line number instead of 0 */
-		if (build_channels(confp, dahdichan, reload, 0, &found_pseudo)) {
-			return -1;
+	if (dahdichan) {
+		/* Process the deferred dahdichan value. */
+		if (build_channels(confp, dahdichan->value, reload, dahdichan->lineno,
+			&found_pseudo)) {
+			if (confp->ignore_failed_channels) {
+				ast_log(LOG_WARNING,
+					"Dahdichan '%s' failure ignored: ignore_failed_channels.\n",
+					dahdichan->value);
+			} else {
+				return -1;
+			}
 		}
 	}
 
@@ -17766,7 +17773,7 @@
 
 	/*< \todo why check for the pseudo in the per-channel section.
 	 * Any actual use for manual setup of the pseudo channel? */
-	if (!found_pseudo && reload != 1) {
+	if (!found_pseudo && reload != 1 && !(options & PROC_DAHDI_OPT_NOCHAN)) {
 		/* use the default configuration for a channel, so
 		   that any settings from real configured channels
 		   don't "leak" into the pseudo channel config
@@ -17826,6 +17833,7 @@
 	struct ast_config *ucfg;
 	struct ast_variable *v;
 	struct ast_flags config_flags = { reload == 1 ? CONFIG_FLAG_FILEUNCHANGED : 0 };
+	const char *chans;
 	const char *cat;
 	int res;
 
@@ -17939,7 +17947,9 @@
 	mwimonitornotify[0] = '\0';
 
 	v = ast_variable_browse(cfg, "channels");
-	if ((res = process_dahdi(base_conf, "", v, reload, 0))) {
+	if ((res = process_dahdi(base_conf,
+		"" /* Must be empty for the channels category.  Silly voicemail mailbox. */,
+		v, reload, 0))) {
 		ast_mutex_unlock(&iflock);
 		ast_config_destroy(cfg);
 		if (ucfg) {
@@ -17960,6 +17970,12 @@
 			continue;
 		}
 
+		chans = ast_variable_retrieve(ucfg, cat, "dahdichan");
+		if (ast_strlen_zero(chans)) {
+			/* Section is useless without a dahdichan value present. */
+			continue;
+		}
+
 		/* Copy base_conf to conf. */
 		deep_copy_dahdi_chan_conf(conf, base_conf);
 
@@ -17976,11 +17992,11 @@
 	ast_config_destroy(cfg);
 
 	if (ucfg) {
-		const char *chans;
-
-		/* Reset base_conf, so things don't leak from dahdi_chan.conf */
+		/* Reset base_conf, so things don't leak from chan_dahdi.conf */
 		deep_copy_dahdi_chan_conf(base_conf, default_conf);
-		process_dahdi(base_conf, "", ast_variable_browse(ucfg, "general"), 1, 0);
+		process_dahdi(base_conf,
+			"" /* Must be empty for the general category.  Silly voicemail mailbox. */,
+			ast_variable_browse(ucfg, "general"), 1, 0);
 
 		for (cat = ast_category_browse(ucfg, NULL); cat ; cat = ast_category_browse(ucfg, cat)) {
 			if (!strcasecmp(cat, "general")) {
@@ -17988,8 +18004,8 @@
 			}
 
 			chans = ast_variable_retrieve(ucfg, cat, "dahdichan");
-
 			if (ast_strlen_zero(chans)) {
+				/* Section is useless without a dahdichan value present. */
 				continue;
 			}
 




More information about the svn-commits mailing list