[svn-commits] jpeeler: branch 1.6.0 r117660 - /branches/1.6.0/channels/chan_zap.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed May 21 17:01:10 CDT 2008


Author: jpeeler
Date: Wed May 21 17:01:10 2008
New Revision: 117660

URL: http://svn.digium.com/view/asterisk?view=rev&rev=117660
Log:
Merged revisions 117658 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/trunk

................
r117658 | jpeeler | 2008-05-21 16:31:17 -0500 (Wed, 21 May 2008) | 10 lines

Merged revisions 117582 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r117582 | jpeeler | 2008-05-21 15:11:14 -0500 (Wed, 21 May 2008) | 2 lines

Ensure that passed in zt_chan_conf structure is not modified in mkintf.

........

................

Modified:
    branches/1.6.0/channels/chan_zap.c

Modified: branches/1.6.0/channels/chan_zap.c
URL: http://svn.digium.com/view/asterisk/branches/1.6.0/channels/chan_zap.c?view=diff&rev=117660&r1=117659&r2=117660
==============================================================================
--- branches/1.6.0/channels/chan_zap.c (original)
+++ branches/1.6.0/channels/chan_zap.c Wed May 21 17:01:10 2008
@@ -8070,7 +8070,7 @@
         return sigtype;
 }
 
-static struct zt_pvt *mkintf(int channel, struct zt_chan_conf *conf, struct zt_pri *pri, int reloading)
+static struct zt_pvt *mkintf(int channel, const struct zt_chan_conf *conf, struct zt_pri *pri, int reloading)
 {
 	/* Make a zt_pvt structure for this interface (or CRV if "pri" is specified) */
 	struct zt_pvt *tmp = NULL, *tmp2,  *prev = NULL;
@@ -8080,7 +8080,7 @@
 #endif
 	struct zt_spaninfo si;
 	int res;
-	int span=0;
+	int span = 0;
 	int here = 0;
 	int x;
 	struct zt_pvt **wlist;
@@ -8128,6 +8128,7 @@
 	}
 
 	if (tmp) {
+		int chan_sig = conf->chan.sig;
 		if (!here) {
 			if ((channel != CHAN_PSEUDO) && !pri) {
 				snprintf(fn, sizeof(fn), "%d", channel);
@@ -8148,7 +8149,7 @@
 					return NULL;
 				}
 				if (conf->is_sig_auto)
-					conf->chan.sig = sigtype_to_signalling(p.sigtype);
+					chan_sig = sigtype_to_signalling(p.sigtype);
 				if (p.sigtype != (conf->chan.sig & 0x3ffff)) {
 					ast_log(LOG_ERROR, "Signalling requested on channel %d is %s but line is in %s signalling\n", channel, sig2str(conf->chan.sig), sig2str(p.sigtype));
 					destroy_zt_pvt(&tmp);
@@ -8159,8 +8160,8 @@
 				span = p.spanno - 1;
 			} else {
 				if (channel == CHAN_PSEUDO)
-					conf->chan.sig = 0;
-				else if ((conf->chan.sig != SIG_FXOKS) && (conf->chan.sig != SIG_FXSKS)) {
+					chan_sig = 0;
+				else if ((chan_sig != SIG_FXOKS) && (chan_sig != SIG_FXSKS)) {
 					ast_log(LOG_ERROR, "CRV's must use FXO/FXS Kewl Start (fxo_ks/fxs_ks) signalling only.\n");
 					return NULL;
 				}
@@ -8331,23 +8332,35 @@
 			}
 #endif
 		} else {
-			conf->chan.sig = tmp->sig;
-			conf->chan.radio = tmp->radio;
+			chan_sig = tmp->sig;
 			memset(&p, 0, sizeof(p));
 			if (tmp->subs[SUB_REAL].zfd > -1)
 				res = ioctl(tmp->subs[SUB_REAL].zfd, ZT_GET_PARAMS, &p);
 		}
 		/* Adjust starttime on loopstart and kewlstart trunks to reasonable values */
-		if ((conf->chan.sig == SIG_FXSKS) || (conf->chan.sig == SIG_FXSLS) ||
-		    (conf->chan.sig == SIG_EM) || (conf->chan.sig == SIG_EM_E1) ||  (conf->chan.sig == SIG_EMWINK) ||
-			(conf->chan.sig == SIG_FEATD) || (conf->chan.sig == SIG_FEATDMF) || (conf->chan.sig == SIG_FEATDMF_TA) ||
-			  (conf->chan.sig == SIG_FEATB) || (conf->chan.sig == SIG_E911) ||
-		    (conf->chan.sig == SIG_SF) || (conf->chan.sig == SIG_SFWINK) || (conf->chan.sig == SIG_FGC_CAMA) || (conf->chan.sig == SIG_FGC_CAMAMF) ||
-			(conf->chan.sig == SIG_SF_FEATD) || (conf->chan.sig == SIG_SF_FEATDMF) ||
-			  (conf->chan.sig == SIG_SF_FEATB)) {
+		switch (chan_sig) {
+		case SIG_FXSKS:
+		case SIG_FXSLS:
+		case SIG_EM:
+		case SIG_EM_E1:
+		case SIG_EMWINK:
+		case SIG_FEATD:
+		case SIG_FEATDMF:
+		case SIG_FEATDMF_TA:
+		case SIG_FEATB:
+		case SIG_E911:
+		case SIG_SF:
+		case SIG_SFWINK:
+		case SIG_FGC_CAMA:
+		case SIG_FGC_CAMAMF:
+		case SIG_SF_FEATD:
+		case SIG_SF_FEATDMF:
+		case SIG_SF_FEATB:
 			p.starttime = 250;
-		}
-		if (conf->chan.radio) {
+			break;
+		}
+
+		if (tmp->radio) {
 			/* XXX Waiting to hear back from Jim if these should be adjustable XXX */
 			p.channo = channel;
 			p.rxwinktime = 1;
@@ -8355,7 +8368,7 @@
 			p.starttime = 1;
 			p.debouncetime = 5;
 		}
-		if (!conf->chan.radio) {
+		if (!tmp->radio) {
 			p.channo = channel;
 			/* Override timing settings based on config file */
 			if (conf->timing.prewinktime >= 0)
@@ -8376,14 +8389,6 @@
 				p.debouncetime = conf->timing.debouncetime;
 		}
 
-		/* 10 is a nice default. */
-		if (conf->chan.drings.ringnum[0].range == 0)
-			conf->chan.drings.ringnum[0].range = 10;
-		if (conf->chan.drings.ringnum[1].range == 0)
-			conf->chan.drings.ringnum[1].range = 10;
-		if (conf->chan.drings.ringnum[2].range == 0)
-			conf->chan.drings.ringnum[2].range = 10;
-
 		/* dont set parms on a pseudo-channel (or CRV) */
 		if (tmp->subs[SUB_REAL].zfd >= 0)
 		{
@@ -8416,18 +8421,26 @@
 			tmp->mwimonitor_fsk = conf->chan.mwimonitor_fsk;
 			tmp->mwimonitor_neon = conf->chan.mwimonitor_neon;
 		}
-		tmp->sig = conf->chan.sig;
+		tmp->sig = chan_sig;
 		tmp->outsigmod = conf->chan.outsigmod;
-		tmp->radio = conf->chan.radio;
 		tmp->ringt_base = ringt_base;
 		tmp->firstradio = 0;
-		if ((conf->chan.sig == SIG_FXOKS) || (conf->chan.sig == SIG_FXOLS) || (conf->chan.sig == SIG_FXOGS))
+		if ((chan_sig == SIG_FXOKS) || (chan_sig == SIG_FXOLS) || (chan_sig == SIG_FXOGS))
 			tmp->permcallwaiting = conf->chan.callwaiting;
 		else
 			tmp->permcallwaiting = 0;
 		/* Flag to destroy the channel must be cleared on new mkif.  Part of changes for reload to work */
 		tmp->destroy = 0;
 		tmp->drings = conf->chan.drings;
+
+		/* 10 is a nice default. */
+		if (tmp->drings.ringnum[0].range == 0)
+			tmp->drings.ringnum[0].range = 10;
+		if (tmp->drings.ringnum[1].range == 0)
+			tmp->drings.ringnum[1].range = 10;
+		if (tmp->drings.ringnum[2].range == 0)
+			tmp->drings.ringnum[2].range = 10;
+
 		tmp->usedistinctiveringdetection = usedistinctiveringdetection;
 		tmp->callwaitingcallerid = conf->chan.callwaitingcallerid;
 		tmp->threewaycalling = conf->chan.threewaycalling;
@@ -8524,7 +8537,6 @@
 		tmp->pickupgroup= conf->chan.pickupgroup;
 		if (conf->chan.vars) {
 			tmp->vars = conf->chan.vars;
-			conf->chan.vars = NULL;
 		}
 		tmp->cid_rxgain = conf->chan.cid_rxgain;
 		tmp->rxgain = conf->chan.rxgain;
@@ -8537,7 +8549,7 @@
 				ast_dsp_digitmode(tmp->dsp, DSP_DIGITMODE_DTMF | tmp->dtmfrelax);
 			update_conf(tmp);
 			if (!here) {
-				if ((conf->chan.sig != SIG_BRI) && (conf->chan.sig != SIG_BRI_PTMP) && (conf->chan.sig != SIG_PRI) && (conf->chan.sig != SIG_SS7))
+				if ((chan_sig != SIG_BRI) && (chan_sig != SIG_BRI_PTMP) && (chan_sig != SIG_PRI) && (chan_sig != SIG_SS7))
 					/* Hang it up to be sure it's good */
 					zt_set_hook(tmp->subs[SUB_REAL].zfd, ZT_ONHOOK);
 			}




More information about the svn-commits mailing list