mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	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. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@331955 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -16715,7 +16715,7 @@ static int process_dahdi(struct dahdi_chan_conf *confp, const char *cat, struct | ||||
| 	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 @@ static int process_dahdi(struct dahdi_chan_conf *confp, const char *cat, struct | ||||
| 				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 @@ static int process_dahdi(struct dahdi_chan_conf *confp, const char *cat, struct | ||||
| 		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 @@ static int process_dahdi(struct dahdi_chan_conf *confp, const char *cat, struct | ||||
|  | ||||
| 	/*< \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 @@ static int setup_dahdi_int(int reload, struct dahdi_chan_conf *default_conf, str | ||||
| 	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 @@ static int setup_dahdi_int(int reload, struct dahdi_chan_conf *default_conf, str | ||||
| 	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 @@ static int setup_dahdi_int(int reload, struct dahdi_chan_conf *default_conf, str | ||||
| 			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 @@ static int setup_dahdi_int(int reload, struct dahdi_chan_conf *default_conf, str | ||||
| 	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 @@ static int setup_dahdi_int(int reload, struct dahdi_chan_conf *default_conf, str | ||||
| 			} | ||||
|  | ||||
| 			chans = ast_variable_retrieve(ucfg, cat, "dahdichan"); | ||||
|  | ||||
| 			if (ast_strlen_zero(chans)) { | ||||
| 				/* Section is useless without a dahdichan value present. */ | ||||
| 				continue; | ||||
| 			} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user