[svn-commits] dhubbard: branch group/issue3450 r139207 - in /team/group/issue3450: ./ apps/...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Aug 20 16:45:02 CDT 2008


Author: dhubbard
Date: Wed Aug 20 16:45:01 2008
New Revision: 139207

URL: http://svn.digium.com/view/asterisk?view=rev&rev=139207
Log:
Merged revisions 138775,138778-138780,138814-138815,138845,138851,138887,138939,138943,138951,139016,139020,139083,139146,139153-139154 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/trunk

................
r138775 | seanbright | 2008-08-18 18:42:36 -0500 (Mon, 18 Aug 2008) | 3 lines

Change event header to RegistrationTime to be more consistent (and avoid
breaking existing frameworks).  Pointed out by Laureano on #asterisk-dev.

................
r138778 | seanbright | 2008-08-18 19:08:27 -0500 (Mon, 18 Aug 2008) | 1 line

While we're at it, make this machine parseable too.
................
r138779 | seanbright | 2008-08-18 19:09:38 -0500 (Mon, 18 Aug 2008) | 1 line

And remove code we don't need anymore.
................
r138780 | seanbright | 2008-08-18 19:10:56 -0500 (Mon, 18 Aug 2008) | 1 line

Let it compile now, too (woops)
................
r138814 | phsultan | 2008-08-19 10:58:39 -0500 (Tue, 19 Aug 2008) | 1 line

Mention JID rather than SreenName in help messages
................
r138815 | murf | 2008-08-19 10:59:12 -0500 (Tue, 19 Aug 2008) | 19 lines

These changes are in regards to bug 13249, where users are being surprised by the changes made
to the Set app in trunk/1.6.x, as they come from the 1.4 world. They are only bitten if
they write their AEL dialplan in the 1.4 world, and then carry it over to a trunk/1.6.x 
installation where a "make samples" was executed, or where they hand-edited the 
asterisk.conf file and added the [compat] category with app_set = 1.6 (or higher).

(this commit does not totally solve 13249, at least not yet)

The change involves issueing a single warning while the AEL file is loading, if:
 1. app_set is present in the config file, and set to 1.6 or higher.
 2. there are double quotes in an assignment statement (eg x = "hi there";)
 3. the warning was not already issued.

The standalone app, aelparse, does not (yet) issue this warning. I'd have to
have it read in the asterisk.conf file, and that's a bit of hassle. I'll add
it if users request it, tho.



................
r138845 | murf | 2008-08-19 11:31:24 -0500 (Tue, 19 Aug 2008) | 1 line

Oops. put a decl in a generated file. My bad, but fixed now.
................
r138851 | mvanbaak | 2008-08-19 11:56:50 -0500 (Tue, 19 Aug 2008) | 8 lines

chan_skinny now respects callwaiting=no

(closes issue #12691)
Reported by: sbisker
Patches:
      callwaitingv1.diff uploaded by wedhorn (license 30)
Tested by: wedhorn on old skinny phones, mvanbaak on 7960 and 7905 with latest firmware

................
r138887 | mmichelson | 2008-08-19 13:52:04 -0500 (Tue, 19 Aug 2008) | 31 lines

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

........
r138886 | mmichelson | 2008-08-19 13:50:53 -0500 (Tue, 19 Aug 2008) | 23 lines

Add a lock and unlock prior to the destruction of the chanspy_ds
lock to ensure that no other threads still have it locked. While
this should not happen under normal circumstances, it appears that
if the spyer and spyee hang up at nearly the same time, the following
may occur.

1. ast_channel_free is called on the spyee's channel.
2. The chanspy datastore is removed from the spyee's channel in 
   ast_channel_free.
3. In the spyer's thread, the spyer attempts to remove and destroy the datastore
   from the spyee channel, but the datastore has already been removed in step 2, 
   so the spyer continues in the code.
4. The spyee's thread continues and calls the datastore's destroy callback, 
   chanspy_ds_destroy. This involves locking the chanspy_ds.
5. Now the spyer attempts to destroy the chanspy_ds lock. The problem is that in step 4, 
   the spyee has locked this lock, meaning that the spyer is attempting to destroy a lock 
   which is currently locked by another thread.

The backtrace provided in issue #12969 supports the idea that this is possible
(and has even occurred). This commit does not close the issue, but should help
in preventing one type of crash associated with the use of app_chanspy.


........

................
r138939 | jpeeler | 2008-08-19 17:56:42 -0500 (Tue, 19 Aug 2008) | 14 lines

Blocked revisions 138938 via svnmerge

........
r138938 | jpeeler | 2008-08-19 17:56:07 -0500 (Tue, 19 Aug 2008) | 7 lines

Add configuration option to chan_dahdi.conf to allow buffering policy and number of buffers to be configured per channel. Syntax:

buffers=<num of buffers>,<policy>

Where the number of buffers is some non-negative integer and the policy is either "full", "half", or "immediate".


........

................
r138943 | mmichelson | 2008-08-19 18:19:40 -0500 (Tue, 19 Aug 2008) | 19 lines

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

........
r138942 | mmichelson | 2008-08-19 18:17:17 -0500 (Tue, 19 Aug 2008) | 11 lines

Reset agent_pvt variables back to the values in agents.conf
(from what the corresponding channel variables were set to)
when the agent logs out.

(closes issue #13098)
Reported by: davidw
Patches:
      20080731__issue13098_agent_ackcall_not_reset.diff uploaded by bbryant (license 36)
Tested by: davidw


........

................
r138951 | jpeeler | 2008-08-19 18:23:02 -0500 (Tue, 19 Aug 2008) | 8 lines

Blocked revisions 138949 via svnmerge

........
r138949 | jpeeler | 2008-08-19 18:22:39 -0500 (Tue, 19 Aug 2008) | 1 line

add DAHDI_POLICY_WHEN_FULL compatability define for Zaptel
........

................
r139016 | mmichelson | 2008-08-20 10:38:47 -0500 (Wed, 20 Aug 2008) | 14 lines

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

........
r139015 | mmichelson | 2008-08-20 10:37:56 -0500 (Wed, 20 Aug 2008) | 6 lines

sip_read should properly handle a NULL return from sip_rtp_read.

(closes issue #13257)
Reported by: travishein


........

................
r139020 | mvanbaak | 2008-08-20 11:16:53 -0500 (Wed, 20 Aug 2008) | 4 lines

fix unholding phones after hangup on older cisco phones.

Patch by wedhorn.

................
r139083 | murf | 2008-08-20 12:25:07 -0500 (Wed, 20 Aug 2008) | 20 lines

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

........
r139074 | murf | 2008-08-20 11:14:55 -0600 (Wed, 20 Aug 2008) | 12 lines


(closes issue #13263)
Reported by: brainy
Tested by: murf

The specialized reset routine is tromping on the
flags field of the CDR. I made a change to not
reset the DISABLED bit. This should get rid of this
problem.



........

................
r139146 | kpfleming | 2008-08-20 14:36:27 -0500 (Wed, 20 Aug 2008) | 15 lines

Blocked revisions 139145 via svnmerge

........
r139145 | kpfleming | 2008-08-20 14:35:59 -0500 (Wed, 20 Aug 2008) | 8 lines

Backport support for Zaptel/DAHDI channel-level alarms from trunk/1.6, because not doing so just makes it difficult for people with channels that are in alarm when Asterisk starts up to get them going once the alarm is cleared

(closes issue #12160)
Reported by: tzafrir
Patches:
      asterisk-chanalarms_14.patch uploaded by tzafrir (license 46)
Tested by: tzafrir

........

................
r139153 | sruffell | 2008-08-20 14:57:22 -0500 (Wed, 20 Aug 2008) | 3 lines

Fix bug where the samples were not accurate when in G723 mode, which would
cause the timestamp field of the RTP header to be invalid.

................
r139154 | sruffell | 2008-08-20 15:03:28 -0500 (Wed, 20 Aug 2008) | 2 lines

Remove extraneous debugging messages.

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

Modified:
    team/group/issue3450/   (props changed)
    team/group/issue3450/apps/app_chanspy.c
    team/group/issue3450/channels/chan_agent.c
    team/group/issue3450/channels/chan_sip.c
    team/group/issue3450/channels/chan_skinny.c
    team/group/issue3450/codecs/codec_dahdi.c
    team/group/issue3450/main/cdr.c
    team/group/issue3450/main/pbx.c
    team/group/issue3450/res/ael/ael.tab.c
    team/group/issue3450/res/ael/ael.tab.h
    team/group/issue3450/res/ael/ael.y
    team/group/issue3450/res/res_jabber.c
    team/group/issue3450/utils/ael_main.c
    team/group/issue3450/utils/conf2ael.c

Propchange: team/group/issue3450/
------------------------------------------------------------------------------
Binary property 'branch-1.4-blocked' - no diff available.

Propchange: team/group/issue3450/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Propchange: team/group/issue3450/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Wed Aug 20 16:45:01 2008
@@ -1,1 +1,1 @@
-/trunk:1-138769
+/trunk:1-139205

Modified: team/group/issue3450/apps/app_chanspy.c
URL: http://svn.digium.com/view/asterisk/team/group/issue3450/apps/app_chanspy.c?view=diff&rev=139207&r1=139206&r2=139207
==============================================================================
--- team/group/issue3450/apps/app_chanspy.c (original)
+++ team/group/issue3450/apps/app_chanspy.c Wed Aug 20 16:45:01 2008
@@ -893,6 +893,8 @@
 
 	ast_channel_setoption(chan, AST_OPTION_TXGAIN, &zero_volume, sizeof(zero_volume), 0);
 
+	ast_mutex_lock(&chanspy_ds.lock);
+	ast_mutex_unlock(&chanspy_ds.lock);
 	ast_mutex_destroy(&chanspy_ds.lock);
 
 	return res;

Modified: team/group/issue3450/channels/chan_agent.c
URL: http://svn.digium.com/view/asterisk/team/group/issue3450/channels/chan_agent.c?view=diff&rev=139207&r1=139206&r2=139207
==============================================================================
--- team/group/issue3450/channels/chan_agent.c (original)
+++ team/group/issue3450/channels/chan_agent.c Wed Aug 20 16:45:01 2008
@@ -2001,6 +2001,8 @@
 						p->ackcall = 0;
 					tmpoptions=pbx_builtin_getvar_helper(chan, "AGENTACKCALL");
 					ast_verb(3, "Saw variable AGENTACKCALL=%s, setting ackcall to: %d for Agent '%s'.\n", tmpoptions, p->ackcall, p->agent);
+				} else {
+					p->ackcall = ackcall;
 				}
 				if (!ast_strlen_zero(pbx_builtin_getvar_helper(chan, "AGENTAUTOLOGOFF"))) {
 					p->autologoff = atoi(pbx_builtin_getvar_helper(chan, "AGENTAUTOLOGOFF"));
@@ -2008,6 +2010,8 @@
 						p->autologoff = 0;
 					tmpoptions=pbx_builtin_getvar_helper(chan, "AGENTAUTOLOGOFF");
 					ast_verb(3, "Saw variable AGENTAUTOLOGOFF=%s, setting autologff to: %d for Agent '%s'.\n", tmpoptions, p->autologoff, p->agent);
+				} else {
+					p->autologoff = autologoff;
 				}
 				if (!ast_strlen_zero(pbx_builtin_getvar_helper(chan, "AGENTWRAPUPTIME"))) {
 					p->wrapuptime = atoi(pbx_builtin_getvar_helper(chan, "AGENTWRAPUPTIME"));
@@ -2015,6 +2019,8 @@
 						p->wrapuptime = 0;
 					tmpoptions=pbx_builtin_getvar_helper(chan, "AGENTWRAPUPTIME");
 					ast_verb(3, "Saw variable AGENTWRAPUPTIME=%s, setting wrapuptime to: %d for Agent '%s'.\n", tmpoptions, p->wrapuptime, p->agent);
+				} else {
+					p->wrapuptime = wrapuptime;
 				}
 				tmpoptions = pbx_builtin_getvar_helper(chan, "AGENTACCEPTDMTF");
 				if (!ast_strlen_zero(tmpoptions)) {

Modified: team/group/issue3450/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/group/issue3450/channels/chan_sip.c?view=diff&rev=139207&r1=139206&r2=139207
==============================================================================
--- team/group/issue3450/channels/chan_sip.c (original)
+++ team/group/issue3450/channels/chan_sip.c Wed Aug 20 16:45:01 2008
@@ -5912,7 +5912,7 @@
 	}
 
 	/* Only allow audio through if they sent progress with SDP, or if the channel is actually answered */
-	if (fr->frametype == AST_FRAME_VOICE && p->invitestate != INV_EARLY_MEDIA && ast->_state != AST_STATE_UP) {
+	if (fr && fr->frametype == AST_FRAME_VOICE && p->invitestate != INV_EARLY_MEDIA && ast->_state != AST_STATE_UP) {
 		fr = &ast_null_frame;
 	}
 
@@ -12268,9 +12268,7 @@
 {
 	const char *id = astman_get_header(m, "ActionID");
 	char idtext[256] = "";
-	char tmpdat[256] = "";
 	int total = 0;
-	struct ast_tm tm;
 
 	if (!ast_strlen_zero(id))
 		snprintf(idtext, sizeof(idtext), "ActionID: %s\r\n", id);
@@ -12279,11 +12277,6 @@
 
 	ASTOBJ_CONTAINER_TRAVERSE(&regl, 1, do {
 		ASTOBJ_RDLOCK(iterator);
-		if (iterator->regtime.tv_sec) {
-			ast_localtime(&iterator->regtime, &tm, NULL);
-			ast_strftime(tmpdat, sizeof(tmpdat), "%a, %d %b %Y %T", &tm);
-		} else
-			tmpdat[0] = '\0';
 		astman_append(s,
 			"Event: RegistryEntry\r\n"
 			"Host: %s\r\n"
@@ -12291,9 +12284,9 @@
 			"Username: %s\r\n"
 			"Refresh: %d\r\n"
 			"State: %s\r\n"
-			"Reg.Time: %s\r\n"
+			"RegistrationTime: %ld\r\n"
 			"\r\n", iterator->hostname, iterator->portno ? iterator->portno : STANDARD_SIP_PORT,
-			iterator->username, iterator->refresh, regstate2str(iterator->regstate), tmpdat);
+					  iterator->username, iterator->refresh, regstate2str(iterator->regstate), (long) iterator->regtime.tv_sec);
 		ASTOBJ_UNLOCK(iterator);
 		total++;
 	} while(0));

Modified: team/group/issue3450/channels/chan_skinny.c
URL: http://svn.digium.com/view/asterisk/team/group/issue3450/channels/chan_skinny.c?view=diff&rev=139207&r1=139206&r2=139207
==============================================================================
--- team/group/issue3450/channels/chan_skinny.c (original)
+++ team/group/issue3450/channels/chan_skinny.c Wed Aug 20 16:45:01 2008
@@ -3418,12 +3418,18 @@
 		return -1;
 	}
 
+	if (AST_LIST_NEXT(sub,list) && !l->callwaiting) {
+		ast_queue_control(ast, AST_CONTROL_BUSY);
+		return -1;
+	}
+	
 	switch (l->hookstate) {
 	case SKINNY_OFFHOOK:
 		tone = SKINNY_CALLWAITTONE;
 		break;
 	case SKINNY_ONHOOK:
 		tone = SKINNY_ALERT;
+		l->activesub = sub;
 		break;
 	default:
 		ast_log(LOG_ERROR, "Don't know how to deal with hookstate %d\n", l->hookstate);
@@ -3454,9 +3460,13 @@
 		ast_debug(1, "Asked to hangup channel not connected\n");
 		return 0;
 	}
+
 	l = sub->parent;
 	d = l->parent;
 	s = d->session;
+
+	if (skinnydebug)
+		ast_verb(3,"Hanging up %s/%d\n",d->name,sub->callid);
 
 	AST_LIST_REMOVE(&l->sub, sub, list);
 
@@ -3469,6 +3479,7 @@
 
 			}
 			if (sub == l->activesub) {      /* we are killing the active sub, but there are other subs on the line*/
+				ast_verb(4,"Killing active sub %d\n", sub->callid);
 				if (sub->related) {
 					l->activesub = sub->related;
 				} else {
@@ -3478,12 +3489,13 @@
 						l->activesub = AST_LIST_FIRST(&l->sub);
 					}
 				}
-				transmit_callstate(d, l->instance, SKINNY_ONHOOK, sub->callid);
+				//transmit_callstate(d, l->instance, SKINNY_ONHOOK, sub->callid);
 				transmit_activatecallplane(d, l);
 				transmit_closereceivechannel(d, sub);
 				transmit_stopmediatransmission(d, sub);
 				transmit_lamp_indication(d, STIMULUS_LINE, l->instance, SKINNY_LAMP_BLINK);
 			} else {    /* we are killing a background sub on the line with other subs*/
+				ast_verb(4,"Killing inactive sub %d\n", sub->callid);
 				if (AST_LIST_NEXT(sub, list)) {
 					transmit_lamp_indication(d, STIMULUS_LINE, l->instance, SKINNY_LAMP_BLINK);
 				} else {
@@ -3491,7 +3503,7 @@
 				}
 			}
 		} else {                                                /* no more subs on line so make idle */
-
+			ast_verb(4,"Killing only sub %d\n", sub->callid);
 			l->hookstate = SKINNY_ONHOOK;
 			transmit_callstate(d, l->instance, SKINNY_ONHOOK, sub->callid);
 			l->activesub = NULL;
@@ -3947,7 +3959,7 @@
 			sub->related = NULL;
 
 			AST_LIST_INSERT_HEAD(&l->sub, sub, list);
-			l->activesub = sub;
+			//l->activesub = sub;
 		}
 		tmp->tech = &skinny_tech;
 		tmp->tech_pvt = sub;
@@ -4365,6 +4377,7 @@
 		if (!l) {
 			return 0;
 		}
+		sub = l->activesub;
 	} else {
 		l = sub->parent;
 	}
@@ -4388,6 +4401,7 @@
 		} else {
 			sub = c->tech_pvt;
 			l = sub->parent;
+			l->activesub = sub;
 			if (l->hookstate == SKINNY_ONHOOK) {
 				l->hookstate = SKINNY_OFFHOOK;
 				transmit_callstate(d, l->instance, SKINNY_OFFHOOK, sub->callid);
@@ -4428,6 +4442,7 @@
 		} else {
 			sub = c->tech_pvt;
 			l = sub->parent;
+			l->activesub = sub;
 			if (l->hookstate == SKINNY_ONHOOK) {
 				l->hookstate = SKINNY_OFFHOOK;
 				transmit_speaker_mode(d, SKINNY_SPEAKERON);
@@ -4487,6 +4502,7 @@
 		} else {
 			sub = c->tech_pvt;
 			l = sub->parent;
+			l->activesub = sub;
 
 			if (ast_strlen_zero(l->vmexten))  /* Exit the call if no VM pilot */
 				break;
@@ -4651,6 +4667,7 @@
 				c = skinny_new(l, AST_STATE_DOWN);
 				if (c) {
 					sub = c->tech_pvt;
+					l->activesub = sub;
 					transmit_callstate(d, l->instance, SKINNY_OFFHOOK, sub->callid);
 					if (skinnydebug)
 						ast_verb(1, "Attempting to Clear display on Skinny %s@%s\n", l->name, d->name);
@@ -4748,6 +4765,7 @@
 			c = skinny_new(l, AST_STATE_DOWN);
 			if (c) {
 				sub = c->tech_pvt;
+				l->activesub = sub;
 				transmit_callstate(d, l->instance, SKINNY_OFFHOOK, sub->callid);
 				if (skinnydebug)
 					ast_verb(1, "Attempting to Clear display on Skinny %s@%s\n", l->name, d->name);
@@ -4789,6 +4807,9 @@
 	} else {
 		l = d->activeline;
 		sub = l->activesub;
+		if (!sub) {
+			return 0;
+		}
 	}
 
 	if (l->hookstate == SKINNY_ONHOOK) {
@@ -5241,6 +5262,7 @@
 		l->hookstate = SKINNY_OFFHOOK;
 
 		sub = c->tech_pvt;
+		l->activesub = sub;
 		transmit_callstate(d, l->instance, SKINNY_OFFHOOK, sub->callid);
 		if (skinnydebug)
 			ast_verb(1, "Attempting to Clear display on Skinny %s@%s\n", l->name, d->name);
@@ -5355,6 +5377,7 @@
 			ast_log(LOG_WARNING, "Unable to create channel for %s@%s\n", l->name, d->name);
 		} else {
 			sub = c->tech_pvt;
+			l->activesub = sub;
 			if (l->hookstate == SKINNY_ONHOOK) {
 				l->hookstate = SKINNY_OFFHOOK;
 				transmit_speaker_mode(d, SKINNY_SPEAKERON);
@@ -5393,6 +5416,7 @@
 			ast_log(LOG_WARNING, "Unable to create channel for %s@%s\n", l->name, d->name);
 		} else {
 			sub = c->tech_pvt;
+			l->activesub = sub;
 			if (l->hookstate == SKINNY_ONHOOK) {
 				l->hookstate = SKINNY_OFFHOOK;
 				transmit_speaker_mode(d, SKINNY_SPEAKERON);
@@ -5459,6 +5483,7 @@
 			ast_log(LOG_WARNING, "Unable to create channel for %s@%s\n", l->name, d->name);
 		} else {
 			sub = c->tech_pvt;
+			l->activesub = sub;
 			handle_callforward_button(sub, SKINNY_CFWD_ALL);
 		}
 		break;
@@ -5476,6 +5501,7 @@
 			ast_log(LOG_WARNING, "Unable to create channel for %s@%s\n", l->name, d->name);
 		} else {
 			sub = c->tech_pvt;
+			l->activesub = sub;
 			handle_callforward_button(sub, SKINNY_CFWD_BUSY);
 		}
 		break;
@@ -5494,6 +5520,7 @@
 			ast_log(LOG_WARNING, "Unable to create channel for %s@%s\n", l->name, d->name);
 		} else {
 			sub = c->tech_pvt;
+			l->activesub = sub;
 			handle_callforward_button(sub, SKINNY_CFWD_NOANSWER);
 		}
 #endif

Modified: team/group/issue3450/codecs/codec_dahdi.c
URL: http://svn.digium.com/view/asterisk/team/group/issue3450/codecs/codec_dahdi.c?view=diff&rev=139207&r1=139206&r2=139207
==============================================================================
--- team/group/issue3450/codecs/codec_dahdi.c (original)
+++ team/group/issue3450/codecs/codec_dahdi.c Wed Aug 20 16:45:01 2008
@@ -82,11 +82,8 @@
 struct pvt {
 	int fd;
 	int fake;
-#ifdef DEBUG_TRANSCODE
-	int totalms;
-	int lasttotalms;
-#endif
 	struct dahdi_transcoder_formats fmts;
+	int samples;
 };
 
 static char *handle_cli_transcoder_show(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
@@ -159,7 +156,7 @@
 				return NULL;
 			}
 		} else {
-			pvt->f.samples = res;
+			pvt->f.samples = dahdip->samples;
 			pvt->f.datalen = res;
 			pvt->datalen = 0;
 			pvt->f.frametype = AST_FRAME_VOICE;
@@ -248,10 +245,14 @@
 
 	switch (dahdip->fmts.dstfmt) {
 	case AST_FORMAT_G729A:
+		dahdip->samples = 160;
+		break;
 	case AST_FORMAT_G723_1:
+		dahdip->samples = 240;
 		ast_atomic_fetchadd_int(&channels.encoders, +1);
 		break;
 	default:
+		dahdip->samples = 160;
 		ast_atomic_fetchadd_int(&channels.decoders, +1);
 		break;
 	}

Modified: team/group/issue3450/main/cdr.c
URL: http://svn.digium.com/view/asterisk/team/group/issue3450/main/cdr.c?view=diff&rev=139207&r1=139206&r2=139207
==============================================================================
--- team/group/issue3450/main/cdr.c (original)
+++ team/group/issue3450/main/cdr.c Wed Aug 20 16:45:01 2008
@@ -1081,12 +1081,15 @@
 
 	if (_flags)
 		ast_copy_flags(&flags, _flags, AST_FLAGS_ALL);
-
-	if (_flags)
-		ast_copy_flags(&flags, _flags, AST_FLAGS_ALL);
 	
 	/* Reset to initial state */
-	ast_clear_flag(cdr, AST_FLAGS_ALL);	
+	if (ast_test_flag(cdr, AST_CDR_FLAG_POST_DISABLED)) { /* But do NOT lose the NoCDR() setting */
+		ast_clear_flag(cdr, AST_FLAGS_ALL);	
+		ast_set_flag(cdr, AST_CDR_FLAG_POST_DISABLED);
+	} else {
+		ast_clear_flag(cdr, AST_FLAGS_ALL);	
+	}
+	
 	memset(&cdr->start, 0, sizeof(cdr->start));
 	memset(&cdr->end, 0, sizeof(cdr->end));
 	memset(&cdr->answer, 0, sizeof(cdr->answer));

Modified: team/group/issue3450/main/pbx.c
URL: http://svn.digium.com/view/asterisk/team/group/issue3450/main/pbx.c?view=diff&rev=139207&r1=139206&r2=139207
==============================================================================
--- team/group/issue3450/main/pbx.c (original)
+++ team/group/issue3450/main/pbx.c Wed Aug 20 16:45:01 2008
@@ -669,6 +669,11 @@
 	"channel. If the variable name is prefixed with __, the variable will be\n"
 	"inherited into channels created from the current channel and all children\n"
 	"channels.\n"
+	"Compatibility note: If (and only if), in /etc/asterisk/asterisk.conf, you have a [compat]\n"
+    "category, and you have app_set = 1.6 under that, then the behavior of this\n"
+    "app changes, and does not strip surrounding quotes from the right hand side\n"
+    "as it did previously in 1.4. The app_set = 1.6 is only inserted if 'make samples'\n"
+	"is executed, or if the users inserts this by hand into the asterisk.conf file.\n"
 	},
 
 	{ "MSet", pbx_builtin_setvar_multiple,
@@ -681,7 +686,8 @@
 	"inherited into channels created from the current channel and all children\n"
 	"channels.\n\n"
 	"MSet behaves in a similar fashion to the way Set worked in 1.2/1.4 and is thus\n"
-	"prone to doing things that you may not expect.  Avoid its use if possible.\n"
+	"prone to doing things that you may not expect. For example, it strips surrounding\n"
+	"double-quotes from the right-hand side (value).  Avoid its use if possible.\n"
 	},
 
 	{ "SetAMAFlags", pbx_builtin_setamaflags,

Modified: team/group/issue3450/res/ael/ael.tab.c
URL: http://svn.digium.com/view/asterisk/team/group/issue3450/res/ael/ael.tab.c?view=diff&rev=139207&r1=139206&r2=139207
==============================================================================
--- team/group/issue3450/res/ael/ael.tab.c (original)
+++ team/group/issue3450/res/ael/ael.tab.c Wed Aug 20 16:45:01 2008
@@ -1,7 +1,9 @@
-/* A Bison parser, made by GNU Bison 2.1a.  */
-
-/* Skeleton parser for Yacc-like parsing with Bison,
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -18,10 +20,18 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.  */
 
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
 
 /* C LALR(1) parser skeleton written by Richard Stallman, by
    simplifying the original so-called "semantic" parser.  */
@@ -37,7 +47,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.1a"
+#define YYBISON_VERSION "2.3"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -191,6 +201,9 @@
 #include "asterisk/lock.h"
 #include "asterisk/hashtab.h"
 #include "asterisk/ael_structs.h"
+#include "asterisk/utils.h"
+
+extern struct ast_flags ast_compat;
 
 pval * linku1(pval *head, pval *tail);
 static void set_dads(pval *dad, pval *child_list);
@@ -206,6 +219,7 @@
 int ael_is_funcname(char *name);
 #endif
 static char *ael_token_subst(const char *mess);
+static int only_one_app_set_warning = 0;
 
 
 
@@ -229,14 +243,14 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 56 "ael.y"
+#line 60 "ael.y"
 {
 	int	intval;		/* integer value, typically flags */
 	char	*str;		/* strings */
 	struct pval *pval;	/* full objects */
 }
-/* Line 198 of yacc.c.  */
-#line 240 "ael.tab.c"
+/* Line 187 of yacc.c.  */
+#line 254 "ael.tab.c"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -258,7 +272,7 @@
 
 
 /* Copy the second part of user declarations.  */
-#line 62 "ael.y"
+#line 66 "ael.y"
 
 	/* declaring these AFTER the union makes things a lot simpler! */
 void yyerror(YYLTYPE *locp, struct parse_io *parseio, char const *s);
@@ -280,8 +294,8 @@
 static pval *update_last(pval *, YYLTYPE *);
 
 
-/* Line 221 of yacc.c.  */
-#line 285 "ael.tab.c"
+/* Line 216 of yacc.c.  */
+#line 299 "ael.tab.c"
 
 #ifdef short
 # undef short
@@ -411,8 +425,13 @@
 #  ifndef YYSTACK_ALLOC_MAXIMUM
 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
 #  endif
-#  ifdef __cplusplus
-extern "C" {
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+	     && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC malloc
@@ -427,9 +446,6 @@
      || defined __cplusplus || defined _MSC_VER)
 void free (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
-#  endif
-#  ifdef __cplusplus
-}
 #  endif
 # endif
 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
@@ -627,21 +643,21 @@
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   188,   188,   191,   192,   193,   196,   197,   198,   199,
-     202,   203,   206,   215,   216,   217,   218,   219,   222,   228,
-     234,   235,   236,   239,   239,   245,   245,   252,   253,   254,
-     255,   258,   259,   260,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   274,   279,   283,   291,   296,   301,   310,
-     311,   312,   318,   323,   327,   335,   335,   339,   342,   345,
-     356,   357,   364,   365,   369,   373,   379,   380,   385,   393,
-     394,   398,   404,   413,   416,   417,   418,   421,   424,   427,
-     428,   429,   427,   435,   439,   440,   441,   442,   445,   445,
-     478,   479,   480,   481,   485,   488,   489,   492,   493,   496,
-     499,   503,   507,   511,   517,   518,   522,   525,   531,   531,
-     536,   544,   544,   555,   562,   565,   566,   569,   570,   573,
-     576,   577,   580,   584,   588,   594,   595,   598,   599,   600,
-     606,   611,   616,   617,   618,   620,   623,   624,   631,   632,
-     633,   636,   639
+       0,   192,   192,   195,   196,   197,   200,   201,   202,   203,
+     206,   207,   210,   219,   220,   221,   222,   223,   226,   232,
+     238,   239,   240,   243,   243,   253,   253,   260,   261,   262,
+     263,   266,   267,   268,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   282,   287,   291,   299,   304,   309,   318,
+     319,   320,   326,   331,   335,   343,   343,   347,   350,   353,
+     364,   365,   372,   373,   377,   381,   387,   388,   393,   401,
+     402,   406,   412,   421,   424,   425,   426,   429,   432,   435,
+     436,   437,   435,   443,   447,   448,   449,   450,   453,   453,
+     486,   487,   488,   489,   493,   496,   497,   500,   501,   504,
+     507,   511,   515,   519,   525,   526,   530,   533,   539,   539,
+     544,   552,   552,   563,   570,   573,   574,   577,   578,   581,
+     584,   585,   588,   592,   596,   602,   603,   606,   607,   608,
+     614,   619,   624,   625,   626,   628,   631,   632,   639,   640,
+     641,   644,   647
 };
 #endif
 
@@ -1056,14 +1072,14 @@
 #if (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, const YYSTYPE * const yyvaluep, const YYLTYPE * const yylocationp, struct parse_io *parseio)
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct parse_io *parseio)
 #else
 static void
 yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, parseio)
     FILE *yyoutput;
     int yytype;
-    const YYSTYPE * const yyvaluep;
-    const YYLTYPE * const yylocationp;
+    YYSTYPE const * const yyvaluep;
+    YYLTYPE const * const yylocationp;
     struct parse_io *parseio;
 #endif
 {
@@ -1092,14 +1108,14 @@
 #if (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 static void
-yy_symbol_print (FILE *yyoutput, int yytype, const YYSTYPE * const yyvaluep, const YYLTYPE * const yylocationp, struct parse_io *parseio)
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct parse_io *parseio)
 #else
 static void
 yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp, parseio)
     FILE *yyoutput;
     int yytype;
-    const YYSTYPE * const yyvaluep;
-    const YYLTYPE * const yylocationp;
+    YYSTYPE const * const yyvaluep;
+    YYLTYPE const * const yylocationp;
     struct parse_io *parseio;
 #endif
 {
@@ -1277,7 +1293,7 @@
 {
   if (*yystr == '"')
     {
-      size_t yyn = 0;
+      YYSIZE_T yyn = 0;
       char const *yyp = yystr;
 
       for (;;)
@@ -1324,7 +1340,7 @@
 {
   int yyn = yypact[yystate];
 
-  if (! (YYPACT_NINF < yyn && yyn < YYLAST))
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
     return 0;
   else
     {
@@ -1362,7 +1378,7 @@
       int yyxbegin = yyn < 0 ? -yyn : 0;
 
       /* Stay within bounds of both yycheck and yytname.  */
-      int yychecklim = YYLAST - yyn;
+      int yychecklim = YYLAST - yyn + 1;
       int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
       int yycount = 1;
 
@@ -1452,329 +1468,329 @@
   switch (yytype)
     {
       case 43: /* "word" */
-#line 180 "ael.y"
+#line 184 "ael.y"
 	{ free((yyvaluep->str));};
-#line 1458 "ael.tab.c"
+#line 1474 "ael.tab.c"
 	break;
       case 46: /* "objects" */
-#line 167 "ael.y"
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
-#line 1466 "ael.tab.c"
+#line 1482 "ael.tab.c"
 	break;
       case 47: /* "object" */
-#line 167 "ael.y"
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
-#line 1474 "ael.tab.c"
+#line 1490 "ael.tab.c"
 	break;
       case 48: /* "context_name" */
-#line 180 "ael.y"
+#line 184 "ael.y"
 	{ free((yyvaluep->str));};
-#line 1479 "ael.tab.c"
+#line 1495 "ael.tab.c"
 	break;
       case 49: /* "context" */
-#line 167 "ael.y"
-	{
-		destroy_pval((yyvaluep->pval));
-		prev_word=0;
-	};
-#line 1487 "ael.tab.c"
-	break;
-      case 51: /* "macro" */
-#line 167 "ael.y"
-	{
-		destroy_pval((yyvaluep->pval));
-		prev_word=0;
-	};
-#line 1495 "ael.tab.c"
-	break;
-      case 52: /* "globals" */
-#line 167 "ael.y"
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1503 "ael.tab.c"
 	break;
-      case 53: /* "global_statements" */
-#line 167 "ael.y"
+      case 51: /* "macro" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1511 "ael.tab.c"
 	break;
-      case 54: /* "assignment" */
-#line 167 "ael.y"
+      case 52: /* "globals" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1519 "ael.tab.c"
 	break;
-      case 56: /* "local_assignment" */
-#line 167 "ael.y"
+      case 53: /* "global_statements" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1527 "ael.tab.c"
 	break;
-      case 58: /* "arglist" */
-#line 167 "ael.y"
+      case 54: /* "assignment" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1535 "ael.tab.c"
 	break;
-      case 59: /* "elements" */
-#line 167 "ael.y"
+      case 56: /* "local_assignment" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1543 "ael.tab.c"
 	break;
-      case 60: /* "element" */
-#line 167 "ael.y"
+      case 58: /* "arglist" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1551 "ael.tab.c"
 	break;
-      case 61: /* "ignorepat" */
-#line 167 "ael.y"
+      case 59: /* "elements" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1559 "ael.tab.c"
 	break;
-      case 62: /* "extension" */
-#line 167 "ael.y"
+      case 60: /* "element" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1567 "ael.tab.c"
 	break;
-      case 63: /* "statements" */
-#line 167 "ael.y"
+      case 61: /* "ignorepat" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1575 "ael.tab.c"
 	break;
-      case 64: /* "timerange" */
-#line 180 "ael.y"
-	{ free((yyvaluep->str));};
-#line 1580 "ael.tab.c"
-	break;
-      case 65: /* "timespec" */
-#line 167 "ael.y"
+      case 62: /* "extension" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
-#line 1588 "ael.tab.c"
-	break;
-      case 66: /* "test_expr" */
-#line 180 "ael.y"
-	{ free((yyvaluep->str));};
-#line 1593 "ael.tab.c"
-	break;
-      case 68: /* "if_like_head" */
-#line 167 "ael.y"
+#line 1583 "ael.tab.c"
+	break;
+      case 63: /* "statements" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
-#line 1601 "ael.tab.c"
-	break;
-      case 69: /* "word_list" */
-#line 180 "ael.y"
+#line 1591 "ael.tab.c"
+	break;
+      case 64: /* "timerange" */
+#line 184 "ael.y"
 	{ free((yyvaluep->str));};
-#line 1606 "ael.tab.c"
-	break;
-      case 71: /* "word3_list" */
-#line 180 "ael.y"
-	{ free((yyvaluep->str));};
-#line 1611 "ael.tab.c"
-	break;
-      case 72: /* "goto_word" */
-#line 180 "ael.y"
-	{ free((yyvaluep->str));};
-#line 1616 "ael.tab.c"
-	break;
-      case 73: /* "switch_statement" */
-#line 167 "ael.y"
+#line 1596 "ael.tab.c"
+	break;
+      case 65: /* "timespec" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
-#line 1624 "ael.tab.c"
-	break;
-      case 74: /* "statement" */
-#line 167 "ael.y"
+#line 1604 "ael.tab.c"
+	break;
+      case 66: /* "test_expr" */
+#line 184 "ael.y"
+	{ free((yyvaluep->str));};
+#line 1609 "ael.tab.c"
+	break;
+      case 68: /* "if_like_head" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
+#line 1617 "ael.tab.c"
+	break;
+      case 69: /* "word_list" */
+#line 184 "ael.y"
+	{ free((yyvaluep->str));};
+#line 1622 "ael.tab.c"
+	break;
+      case 71: /* "word3_list" */
+#line 184 "ael.y"
+	{ free((yyvaluep->str));};
+#line 1627 "ael.tab.c"
+	break;
+      case 72: /* "goto_word" */
+#line 184 "ael.y"
+	{ free((yyvaluep->str));};
 #line 1632 "ael.tab.c"
 	break;
-      case 79: /* "opt_else" */
-#line 167 "ael.y"
+      case 73: /* "switch_statement" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1640 "ael.tab.c"
 	break;
-      case 80: /* "target" */
-#line 167 "ael.y"
+      case 74: /* "statement" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1648 "ael.tab.c"
 	break;
-      case 81: /* "opt_pri" */
-#line 180 "ael.y"
-	{ free((yyvaluep->str));};
-#line 1653 "ael.tab.c"
-	break;
-      case 82: /* "jumptarget" */
-#line 167 "ael.y"
+      case 79: /* "opt_else" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
-#line 1661 "ael.tab.c"
-	break;
-      case 83: /* "macro_call" */
-#line 167 "ael.y"
+#line 1656 "ael.tab.c"
+	break;
+      case 80: /* "target" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
+#line 1664 "ael.tab.c"
+	break;
+      case 81: /* "opt_pri" */
+#line 184 "ael.y"
+	{ free((yyvaluep->str));};
 #line 1669 "ael.tab.c"
 	break;
-      case 85: /* "application_call_head" */
-#line 167 "ael.y"
+      case 82: /* "jumptarget" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1677 "ael.tab.c"
 	break;
-      case 87: /* "application_call" */
-#line 167 "ael.y"
+      case 83: /* "macro_call" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1685 "ael.tab.c"
 	break;
-      case 88: /* "opt_word" */
-#line 180 "ael.y"
-	{ free((yyvaluep->str));};
-#line 1690 "ael.tab.c"
-	break;
-      case 89: /* "eval_arglist" */
-#line 167 "ael.y"
+      case 85: /* "application_call_head" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
-#line 1698 "ael.tab.c"
-	break;
-      case 90: /* "case_statements" */
-#line 167 "ael.y"
+#line 1693 "ael.tab.c"
+	break;
+      case 87: /* "application_call" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
+#line 1701 "ael.tab.c"
+	break;
+      case 88: /* "opt_word" */
+#line 184 "ael.y"
+	{ free((yyvaluep->str));};
 #line 1706 "ael.tab.c"
 	break;
-      case 91: /* "case_statement" */
-#line 167 "ael.y"
+      case 89: /* "eval_arglist" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1714 "ael.tab.c"
 	break;
-      case 92: /* "macro_statements" */
-#line 167 "ael.y"
+      case 90: /* "case_statements" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1722 "ael.tab.c"
 	break;
-      case 93: /* "macro_statement" */
-#line 167 "ael.y"
+      case 91: /* "case_statement" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1730 "ael.tab.c"
 	break;
-      case 94: /* "switches" */
-#line 167 "ael.y"
+      case 92: /* "macro_statements" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1738 "ael.tab.c"
 	break;
-      case 95: /* "eswitches" */
-#line 167 "ael.y"
+      case 93: /* "macro_statement" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1746 "ael.tab.c"
 	break;
-      case 96: /* "switchlist" */
-#line 167 "ael.y"
+      case 94: /* "switches" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1754 "ael.tab.c"
 	break;
-      case 97: /* "included_entry" */
-#line 167 "ael.y"
+      case 95: /* "eswitches" */
+#line 171 "ael.y"
 	{
 		destroy_pval((yyvaluep->pval));
 		prev_word=0;
 	};
 #line 1762 "ael.tab.c"
 	break;
-      case 98: /* "includeslist" */
-#line 167 "ael.y"
+      case 96: /* "switchlist" */
+#line 171 "ael.y"
 	{

[... 1251 lines stripped ...]



More information about the svn-commits mailing list