[asterisk-commits] branch murf/AEL-trunk-fixesonly r33396 - in /team/murf/AEL-trunk-fixesonly: ....

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Fri Jun 9 15:35:52 MST 2006


Author: murf
Date: Fri Jun  9 17:35:51 2006
New Revision: 33396

URL: http://svn.digium.com/view/asterisk?rev=33396&view=rev
Log:
Merged revisions 33348-33351,33371,33374-33376 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/trunk

........
r33348 | oej | 2006-06-09 14:09:55 -0600 (Fri, 09 Jun 2006) | 2 lines

Another try at hanging up the transferer channel after the masq

........
r33349 | oej | 2006-06-09 14:13:47 -0600 (Fri, 09 Jun 2006) | 2 lines

Move payloadtype back home to rtp.c 

........
r33350 | kpfleming | 2006-06-09 14:26:25 -0600 (Fri, 09 Jun 2006) | 2 lines

various minor portability fixes (mostly from tholo for OpenBSD)

........
r33351 | kpfleming | 2006-06-09 14:40:10 -0600 (Fri, 09 Jun 2006) | 2 lines

there is no reason to define our own 'maximum path length' when the POSIX headers already define one for us

........
r33371 | oej | 2006-06-09 15:09:42 -0600 (Fri, 09 Jun 2006) | 3 lines

- RTP debug message formatting
- Add rtcp report to SIP history

........
r33374 | oej | 2006-06-09 15:28:52 -0600 (Fri, 09 Jun 2006) | 2 lines

Store RTCP reports in channel variables and SIP history

........
r33375 | oej | 2006-06-09 15:30:31 -0600 (Fri, 09 Jun 2006) | 3 lines

Add RTP QoS report variables to doc. Catch it in the "h" extension, store it in the CDR
or in a database or... whatever you want to.

........
r33376 | oej | 2006-06-09 15:32:48 -0600 (Fri, 09 Jun 2006) | 2 lines

Issue #7325 - Parse string after URI decoding (casper)

........

Modified:
    team/murf/AEL-trunk-fixesonly/   (props changed)
    team/murf/AEL-trunk-fixesonly/abstract_jb.c
    team/murf/AEL-trunk-fixesonly/apps/app_followme.c
    team/murf/AEL-trunk-fixesonly/apps/app_voicemail.c
    team/murf/AEL-trunk-fixesonly/asterisk.c
    team/murf/AEL-trunk-fixesonly/cdr/cdr_csv.c
    team/murf/AEL-trunk-fixesonly/cdr/cdr_custom.c
    team/murf/AEL-trunk-fixesonly/cdr/cdr_radius.c
    team/murf/AEL-trunk-fixesonly/channels/chan_sip.c
    team/murf/AEL-trunk-fixesonly/codecs/gsm/src/preprocess.c
    team/murf/AEL-trunk-fixesonly/doc/channelvariables.txt
    team/murf/AEL-trunk-fixesonly/include/asterisk.h
    team/murf/AEL-trunk-fixesonly/include/asterisk/endian.h
    team/murf/AEL-trunk-fixesonly/include/asterisk/rtp.h
    team/murf/AEL-trunk-fixesonly/include/asterisk/stringfields.h
    team/murf/AEL-trunk-fixesonly/logger.c
    team/murf/AEL-trunk-fixesonly/pbx/Makefile
    team/murf/AEL-trunk-fixesonly/pbx/ael/ael.flex
    team/murf/AEL-trunk-fixesonly/pbx/ael/ael_lex.c
    team/murf/AEL-trunk-fixesonly/plc.c
    team/murf/AEL-trunk-fixesonly/res/res_musiconhold.c
    team/murf/AEL-trunk-fixesonly/rtp.c

Propchange: team/murf/AEL-trunk-fixesonly/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Fri Jun  9 17:35:51 2006
@@ -1,1 +1,1 @@
-/trunk:1-33333
+/trunk:1-33395

Modified: team/murf/AEL-trunk-fixesonly/abstract_jb.c
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/abstract_jb.c?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/abstract_jb.c (original)
+++ team/murf/AEL-trunk-fixesonly/abstract_jb.c Fri Jun  9 17:35:51 2006
@@ -32,7 +32,6 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <limits.h>
 
 #include "asterisk/frame.h"
 #include "asterisk/channel.h"

Modified: team/murf/AEL-trunk-fixesonly/apps/app_followme.c
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/apps/app_followme.c?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/apps/app_followme.c (original)
+++ team/murf/AEL-trunk-fixesonly/apps/app_followme.c Fri Jun  9 17:35:51 2006
@@ -92,12 +92,12 @@
 	unsigned int active;		/*!< Profile is active (1), or disabled (0). */
 	char takecall[20];		/*!< Digit mapping to take a call */
 	char nextindp[20];		/*!< Digit mapping to decline a call */
-	char callfromprompt[AST_CONFIG_MAX_PATH];
-	char norecordingprompt[AST_CONFIG_MAX_PATH];
-	char optionsprompt[AST_CONFIG_MAX_PATH];
-	char plsholdprompt[AST_CONFIG_MAX_PATH];
-	char statusprompt[AST_CONFIG_MAX_PATH];
-	char sorryprompt[AST_CONFIG_MAX_PATH];
+	char callfromprompt[PATH_MAX];
+	char norecordingprompt[PATH_MAX];
+	char optionsprompt[PATH_MAX];
+	char plsholdprompt[PATH_MAX];
+	char statusprompt[PATH_MAX];
+	char sorryprompt[PATH_MAX];
 
 	AST_LIST_HEAD_NOLOCK(numbers, number) numbers;	   /*!< Head of the list of follow-me numbers */
 	AST_LIST_HEAD_NOLOCK(blnumbers, number) blnumbers; /*!< Head of the list of black-listed numbers */
@@ -115,12 +115,12 @@
 	struct ast_channel *outbound;
 	char takecall[20];		/*!< Digit mapping to take a call */
 	char nextindp[20];		/*!< Digit mapping to decline a call */
-	char callfromprompt[AST_CONFIG_MAX_PATH];
-	char norecordingprompt[AST_CONFIG_MAX_PATH];
-	char optionsprompt[AST_CONFIG_MAX_PATH];
-	char plsholdprompt[AST_CONFIG_MAX_PATH];
-	char statusprompt[AST_CONFIG_MAX_PATH];
-	char sorryprompt[AST_CONFIG_MAX_PATH];
+	char callfromprompt[PATH_MAX];
+	char norecordingprompt[PATH_MAX];
+	char optionsprompt[PATH_MAX];
+	char plsholdprompt[PATH_MAX];
+	char statusprompt[PATH_MAX];
+	char sorryprompt[PATH_MAX];
 	struct ast_flags followmeflags;
 };
 
@@ -156,12 +156,12 @@
 static const char *defaultmoh = "default";    	/*!< Default Music-On-Hold Class */
 
 static char takecall[20] = "1", nextindp[20] = "2";
-static char callfromprompt[AST_CONFIG_MAX_PATH] = "followme/call-from";
-static char norecordingprompt[AST_CONFIG_MAX_PATH] = "followme/no-recording";
-static char optionsprompt[AST_CONFIG_MAX_PATH] = "followme/followme-options";
-static char plsholdprompt[AST_CONFIG_MAX_PATH] = "followme/pls-hold-while-try";
-static char statusprompt[AST_CONFIG_MAX_PATH] = "followme/followme-status";
-static char sorryprompt[AST_CONFIG_MAX_PATH] = "followme/followme-sorry";
+static char callfromprompt[PATH_MAX] = "followme/call-from";
+static char norecordingprompt[PATH_MAX] = "followme/no-recording";
+static char optionsprompt[PATH_MAX] = "followme/followme-options";
+static char plsholdprompt[PATH_MAX] = "followme/pls-hold-while-try";
+static char statusprompt[PATH_MAX] = "followme/followme-status";
+static char sorryprompt[PATH_MAX] = "followme/followme-sorry";
 
 
 static AST_LIST_HEAD_STATIC(followmes, ast_call_followme);

Modified: team/murf/AEL-trunk-fixesonly/apps/app_voicemail.c
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/apps/app_voicemail.c?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/apps/app_voicemail.c (original)
+++ team/murf/AEL-trunk-fixesonly/apps/app_voicemail.c Fri Jun  9 17:35:51 2006
@@ -309,7 +309,7 @@
 #define DELETE(a,b,c) (vm_delete(c))
 #endif
 
-static char VM_SPOOL_DIR[AST_CONFIG_MAX_PATH];
+static char VM_SPOOL_DIR[PATH_MAX];
 
 static char ext_pass_cmd[128];
 
@@ -651,8 +651,8 @@
 	char inbuf[256];
 	char orig[256];
 	char currcontext[256] ="";
-	char tmpin[AST_CONFIG_MAX_PATH];
-	char tmpout[AST_CONFIG_MAX_PATH];
+	char tmpin[PATH_MAX];
+	char tmpout[PATH_MAX];
 	struct stat statbuf;
 
 	if (!change_password_realtime(vmu, newpassword))

Modified: team/murf/AEL-trunk-fixesonly/asterisk.c
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/asterisk.c?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/asterisk.c (original)
+++ team/murf/AEL-trunk-fixesonly/asterisk.c Fri Jun  9 17:35:51 2006
@@ -199,26 +199,26 @@
 static int ast_el_read_history(char *);
 static int ast_el_write_history(char *);
 
-char ast_config_AST_CONFIG_DIR[AST_CONFIG_MAX_PATH];
-char ast_config_AST_CONFIG_FILE[AST_CONFIG_MAX_PATH];
-char ast_config_AST_MODULE_DIR[AST_CONFIG_MAX_PATH];
-char ast_config_AST_SPOOL_DIR[AST_CONFIG_MAX_PATH];
-char ast_config_AST_MONITOR_DIR[AST_CONFIG_MAX_PATH];
-char ast_config_AST_VAR_DIR[AST_CONFIG_MAX_PATH];
-char ast_config_AST_DATA_DIR[AST_CONFIG_MAX_PATH];
-char ast_config_AST_LOG_DIR[AST_CONFIG_MAX_PATH];
-char ast_config_AST_AGI_DIR[AST_CONFIG_MAX_PATH];
-char ast_config_AST_DB[AST_CONFIG_MAX_PATH];
-char ast_config_AST_KEY_DIR[AST_CONFIG_MAX_PATH];
-char ast_config_AST_PID[AST_CONFIG_MAX_PATH];
-char ast_config_AST_SOCKET[AST_CONFIG_MAX_PATH];
-char ast_config_AST_RUN_DIR[AST_CONFIG_MAX_PATH];
-char ast_config_AST_RUN_USER[AST_CONFIG_MAX_PATH];
-char ast_config_AST_RUN_GROUP[AST_CONFIG_MAX_PATH];
-char ast_config_AST_CTL_PERMISSIONS[AST_CONFIG_MAX_PATH];
-char ast_config_AST_CTL_OWNER[AST_CONFIG_MAX_PATH] = "\0";
-char ast_config_AST_CTL_GROUP[AST_CONFIG_MAX_PATH] = "\0";
-char ast_config_AST_CTL[AST_CONFIG_MAX_PATH] = "asterisk.ctl";
+char ast_config_AST_CONFIG_DIR[PATH_MAX];
+char ast_config_AST_CONFIG_FILE[PATH_MAX];
+char ast_config_AST_MODULE_DIR[PATH_MAX];
+char ast_config_AST_SPOOL_DIR[PATH_MAX];
+char ast_config_AST_MONITOR_DIR[PATH_MAX];
+char ast_config_AST_VAR_DIR[PATH_MAX];
+char ast_config_AST_DATA_DIR[PATH_MAX];
+char ast_config_AST_LOG_DIR[PATH_MAX];
+char ast_config_AST_AGI_DIR[PATH_MAX];
+char ast_config_AST_DB[PATH_MAX];
+char ast_config_AST_KEY_DIR[PATH_MAX];
+char ast_config_AST_PID[PATH_MAX];
+char ast_config_AST_SOCKET[PATH_MAX];
+char ast_config_AST_RUN_DIR[PATH_MAX];
+char ast_config_AST_RUN_USER[PATH_MAX];
+char ast_config_AST_RUN_GROUP[PATH_MAX];
+char ast_config_AST_CTL_PERMISSIONS[PATH_MAX];
+char ast_config_AST_CTL_OWNER[PATH_MAX] = "\0";
+char ast_config_AST_CTL_GROUP[PATH_MAX] = "\0";
+char ast_config_AST_CTL[PATH_MAX] = "asterisk.ctl";
 char ast_config_AST_SYSTEM_NAME[20] = "";
 
 extern const char *ast_build_hostname;
@@ -657,7 +657,7 @@
 		/* Close file descriptors and launch system command */
 		for (x = STDERR_FILENO + 1; x < 4096; x++)
 			close(x);
-		execl("/bin/sh", "/bin/sh", "-c", s, NULL);
+		execl("/bin/sh", "/bin/sh", "-c", s, (char *) NULL);
 		exit(1);
 	} else if (pid > 0) {
 		for(;;) {

Modified: team/murf/AEL-trunk-fixesonly/cdr/cdr_csv.c
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/cdr/cdr_csv.c?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/cdr/cdr_csv.c (original)
+++ team/murf/AEL-trunk-fixesonly/cdr/cdr_csv.c Fri Jun  9 17:35:51 2006
@@ -261,7 +261,7 @@
 
 static int writefile(char *s, char *acc)
 {
-	char tmp[AST_CONFIG_MAX_PATH];
+	char tmp[PATH_MAX];
 	FILE *f;
 	if (strchr(acc, '/') || (acc[0] == '.')) {
 		ast_log(LOG_WARNING, "Account code '%s' insecure for writing file\n", acc);
@@ -282,7 +282,7 @@
 {
 	/* Make sure we have a big enough buf */
 	char buf[1024];
-	char csvmaster[AST_CONFIG_MAX_PATH];
+	char csvmaster[PATH_MAX];
 	snprintf(csvmaster, sizeof(csvmaster),"%s/%s/%s", ast_config_AST_LOG_DIR, CSV_LOG_DIR, CSV_MASTER);
 #if 0
 	printf("[CDR] %s ('%s' -> '%s') Dur: %ds Bill: %ds Disp: %s Flags: %s Account: [%s]\n", cdr->channel, cdr->src, cdr->dst, cdr->duration, cdr->billsec, ast_cdr_disp2str(cdr->disposition), ast_cdr_flags2str(cdr->amaflags), cdr->accountcode);

Modified: team/murf/AEL-trunk-fixesonly/cdr/cdr_custom.c
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/cdr/cdr_custom.c?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/cdr/cdr_custom.c (original)
+++ team/murf/AEL-trunk-fixesonly/cdr/cdr_custom.c Fri Jun  9 17:35:51 2006
@@ -63,7 +63,7 @@
 
 static FILE *mf = NULL;
 
-static char master[AST_CONFIG_MAX_PATH];
+static char master[PATH_MAX];
 static char format[1024]="";
 
 static int load_config(int reload) 

Modified: team/murf/AEL-trunk-fixesonly/cdr/cdr_radius.c
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/cdr/cdr_radius.c?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/cdr/cdr_radius.c (original)
+++ team/murf/AEL-trunk-fixesonly/cdr/cdr_radius.c Fri Jun  9 17:35:51 2006
@@ -88,7 +88,7 @@
 static char *name = "radius";
 static char *cdr_config = "cdr.conf";
 
-static char radiuscfg[AST_CONFIG_MAX_PATH] = "/etc/radiusclient-ng/radiusclient.conf";
+static char radiuscfg[PATH_MAX] = "/etc/radiusclient-ng/radiusclient.conf";
 
 static struct ast_flags global_flags = { RADIUS_FLAG_USEGMTIME | RADIUS_FLAG_LOGUNIQUEID | RADIUS_FLAG_LOGUSERFIELD };
 

Modified: team/murf/AEL-trunk-fixesonly/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/channels/chan_sip.c?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/channels/chan_sip.c (original)
+++ team/murf/AEL-trunk-fixesonly/channels/chan_sip.c Fri Jun  9 17:35:51 2006
@@ -1704,6 +1704,8 @@
 	if (p->owner) {
 		ast_log(LOG_WARNING, "Autodestruct on dialog '%s' with owner in place (Method: %s)\n", p->callid, sip_methods[p->method].text);
 		ast_queue_hangup(p->owner);
+	} else if (p->refer) {
+		transmit_request_with_auth(p, SIP_BYE, 0, XMIT_RELIABLE, 1);
 	} else {
 		sip_destroy(p);
 	}
@@ -2878,12 +2880,13 @@
 
 	if (ast_test_flag(&p->flags[0], SIP_DEFER_BYE_ON_TRANSFER)) {
 		if (option_debug >3)
-			ast_log(LOG_DEBUG, "SIP Transfer: Not hanging up right now... Rescheduling hangup.\n");
+			ast_log(LOG_DEBUG, "SIP Transfer: Not hanging up right now... Rescheduling hangup for %s.\n", p->callid);
 		if (p->autokillid > -1)
 			sip_cancel_destroy(p);
 		sip_scheddestroy(p, 32000);
 		ast_clear_flag(&p->flags[0], SIP_DEFER_BYE_ON_TRANSFER);	/* Really hang up next time */
 		ast_clear_flag(&p->flags[0], SIP_NEEDDESTROY);
+		p->owner->tech_pvt = NULL;
 		p->owner = NULL;  /* Owner will be gone after we return, so take it away */
 		return 0;
 	}
@@ -2963,8 +2966,26 @@
 			}
 		} else {	/* Call is in UP state, send BYE */
 			if (!p->pendinginvite) {
+				char *audioqos = "";
+				char *videoqos = "";
+				if (p->rtp)
+					audioqos = ast_rtp_get_quality(p->rtp);
+				if (p->vrtp)
+					videoqos = ast_rtp_get_quality(p->vrtp);
 				/* Send a hangup */
 				transmit_request_with_auth(p, SIP_BYE, 0, XMIT_RELIABLE, 1);
+
+				/* Get RTCP quality before end of call */
+				if (recordhistory) {
+					if (p->rtp)
+						append_history(p, "RTCPaudio", "Quality:%s", audioqos);
+					if (p->vrtp)
+						append_history(p, "RTCPvideo", "Quality:%s", videoqos);
+				}
+				if (p->rtp)
+					pbx_builtin_setvar_helper(p->owner, "RTPAUDIOQOS", audioqos);
+				if (p->vrtp)
+					pbx_builtin_setvar_helper(p->owner, "RTPVIDEOQOS", videoqos);
 			} else {
 				/* Note we will need a BYE when this all settles out
 				   but we can't send one while we have "INVITE" outstanding. */
@@ -3101,7 +3122,7 @@
 
 	ast_mutex_lock(&p->lock);
 	append_history(p, "Masq", "Old channel: %s\n", oldchan->name);
-	append_history(p, "Masq (cont)", "...new owner: %s\n", p->owner->name);
+	append_history(p, "Masq (cont)", "...new owner: %s\n", newchan->name);
 	if (p->owner != oldchan)
 		ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
 	else {
@@ -3110,16 +3131,6 @@
 	}
 	if (option_debug > 2)
 		ast_log(LOG_DEBUG, "SIP Fixup: New owner for dialogue %s: %s (Old parent: %s)\n", p->callid, p->owner->name, oldchan->name);
-	if (p->refer) {
-		if (option_debug > 2) {
-			if (oldchan->tech_pvt) {
-				struct sip_pvt *old = oldchan->tech_pvt;
-				ast_log(LOG_DEBUG, "Releasing connection between %s and pvt %s\n", oldchan->name, old->callid);
-			} else
-				ast_log(LOG_DEBUG, "Hmmm. No sip_pvt to release for %s\n", oldchan->name);
-		}
-		oldchan->tech_pvt = NULL;	/* Release connection between old channel and it's pvt so we can hang up in peace */
-	}
 
 	ast_mutex_unlock(&p->lock);
 	return ret;
@@ -3672,14 +3683,15 @@
 
 	if (intended_method != SIP_OPTIONS)	/* Peerpoke has it's own system */
 		p->timer_t1 = 500;	/* Default SIP retransmission timer T1 (RFC 3261) */
+
 	if (sin) {
 		p->sa = *sin;
 		if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
 			p->ourip = __ourip;
-	} else {
+	} else
 		p->ourip = __ourip;
-	}
-	
+
+	/* Copy global flags to this PVT at setup. */
 	ast_copy_flags(&p->flags[0], &global_flags[0], SIP_FLAGS_TO_COPY);
 	ast_copy_flags(&p->flags[1], &global_flags[1], SIP_PAGE2_FLAGS_TO_COPY);
 
@@ -3689,6 +3701,7 @@
 
 	if (sip_methods[intended_method].need_rtp) {
 		p->rtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
+		/* If the global videosupport flag is on, we always create a RTP interface for video */
 		if (ast_test_flag(&p->flags[1], SIP_PAGE2_VIDEOSUPPORT))
 			p->vrtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
 		if (!p->rtp || (ast_test_flag(&p->flags[1], SIP_PAGE2_VIDEOSUPPORT) && !p->vrtp)) {
@@ -7312,10 +7325,11 @@
 	/* Find the request URI */
 	if (req->rlPart2)
 		ast_copy_string(tmp, req->rlPart2, sizeof(tmp));
-	uri = get_in_brackets(tmp);
 	
 	if (pedanticsipchecking)
 		ast_uri_decode(tmp);
+
+	uri = get_in_brackets(tmp);
 
 	if (strncmp(uri, "sip:", 4)) {
 		ast_log(LOG_WARNING, "Huh?  Not a SIP header (%s)?\n", uri);
@@ -9558,7 +9572,7 @@
 		ast_log(LOG_DEBUG, "  * SIP Call\n");
 	if (dialog->history)
 		AST_LIST_TRAVERSE(dialog->history, hist, list)
-			ast_log(LOG_DEBUG, "  %d. %s\n", ++x, hist->event);
+			ast_log(LOG_DEBUG, "  %-3.3d. %s\n", ++x, hist->event);
 	if (!x)
 		ast_log(LOG_DEBUG, "Call '%s' has no history\n", dialog->callid);
 	ast_log(LOG_DEBUG, "\n---------- END SIP HISTORY for '%s' \n", dialog->callid);
@@ -10864,15 +10878,17 @@
 				/* They got the notify, this is the end */
 				if (p->owner) {
 					if (!p->refer) {
-						ast_log(LOG_WARNING, "Notify answer on an owned channel?\n");
+						ast_log(LOG_WARNING, "Notify answer on an owned channel? - %s\n", p->owner->name);
 						ast_queue_hangup(p->owner);
 					}
 				} else {
 					if (p->subscribed == NONE) 
 						ast_set_flag(&p->flags[0], SIP_NEEDDESTROY); 
 				}
-			} else if (sipmethod == SIP_REGISTER)
+			} else if (sipmethod == SIP_REGISTER) 
 				res = handle_response_register(p, resp, rest, req, ignore, seqno);
+			else if (sipmethod == SIP_BYE)
+				ast_set_flag(&p->flags[0], SIP_NEEDDESTROY); 
 			break;
 		case 202:   /* Transfer accepted */
 			if (sipmethod == SIP_REFER) 
@@ -11067,7 +11083,7 @@
 		if (ast_test_flag(req, SIP_PKT_DEBUG))
 			ast_verbose("SIP Response message for INCOMING dialog %s arrived\n", msg);
 
-		if (resp == 200) {
+		if (sipmethod == SIP_INVITE && resp == 200) {
 			/* Tags in early session is replaced by the tag in 200 OK, which is 
 		  	the final reply to our INVITE */
 			char tag[128];
@@ -11087,14 +11103,16 @@
 				/* They got the notify, this is the end */
 				if (p->owner) {
 					ast_log(LOG_WARNING, "Notify answer on an owned channel?\n");
-					ast_queue_hangup(p->owner);
+					//ast_queue_hangup(p->owner);
 				} else {
-					if (!p->subscribed)
+					if (!p->subscribed && !p->refer)
 						ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);	
 				}
-				/* Wait for 487, then destroy */
-			} else if (sipmethod == SIP_MESSAGE)
+			} else if (sipmethod == SIP_BYE)
+				ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);	
+			else if (sipmethod == SIP_MESSAGE)
 				/* We successfully transmitted a message */
+				/* XXX Why destroy this pvt after message transfer? Bad */
 				ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);	
 			break;
 		case 202:   /* Transfer accepted */
@@ -11122,6 +11140,8 @@
 			if (sipmethod == SIP_INVITE) {
 				/* Re-invite failed */
 				handle_response_invite(p, resp, rest, req, seqno);
+			} else if (sipmethod == SIP_BYE) {
+				ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);	
 			} else if (sipdebug) {
 				ast_log	(LOG_DEBUG, "Remote host can't match request %s to call '%s'. Giving up\n", sip_methods[sipmethod].text, p->callid);
 			}
@@ -12620,6 +12640,7 @@
 	int res;
 	struct ast_channel *bridged_to;
 	char iabuf[INET_ADDRSTRLEN];
+	char *audioqos = NULL, *videoqos = NULL;
 	
 	if (p->pendinginvite && !ast_test_flag(&p->flags[0], SIP_OUTGOING) && !ast_test_flag(req, SIP_PKT_IGNORE))
 		transmit_response_reliable(p, "487 Request Terminated", &p->initreq);
@@ -12627,11 +12648,29 @@
 	copy_request(&p->initreq, req);
 	check_via(p, req);
 	ast_set_flag(&p->flags[0], SIP_ALREADYGONE);	
+
+	if (p->rtp)
+		audioqos = ast_rtp_get_quality(p->rtp);
+	if (p->vrtp)
+		videoqos = ast_rtp_get_quality(p->vrtp);
+
+	/* Get RTCP quality before end of call */
+	if (recordhistory) {
+		if (p->rtp)
+			append_history(p, "RTCPaudio", "Quality:%s", audioqos);
+		if (p->vrtp)
+			append_history(p, "RTCPvideo", "Quality:%s", videoqos);
+	}
+
 	if (p->rtp) {
+		if (p->owner)
+			pbx_builtin_setvar_helper(p->owner, "RTPAUDIOQOS", audioqos);
 		/* Immediately stop RTP */
 		ast_rtp_stop(p->rtp);
 	}
 	if (p->vrtp) {
+		if (p->owner)
+			pbx_builtin_setvar_helper(p->owner, "RTPVIDEOQOS", videoqos);
 		/* Immediately stop VRTP */
 		ast_rtp_stop(p->vrtp);
 	}
@@ -13701,6 +13740,8 @@
 
 	if (create_addr(p, host)) {
 		*cause = AST_CAUSE_UNREGISTERED;
+		if (option_debug > 2)
+			ast_log(LOG_DEBUG, "Cant create SIP call - target device not registred\n");
 		sip_destroy(p);
 		return NULL;
 	}

Modified: team/murf/AEL-trunk-fixesonly/codecs/gsm/src/preprocess.c
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/codecs/gsm/src/preprocess.c?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/codecs/gsm/src/preprocess.c (original)
+++ team/murf/AEL-trunk-fixesonly/codecs/gsm/src/preprocess.c Fri Jun  9 17:35:51 2006
@@ -36,19 +36,13 @@
 	word		 * s,
 	word 		 * so )		/* [0..159] 	IN/OUT	*/
 {
-
-	word       z1 = S->z1;
-	longword L_z2 = S->L_z2;
-	word 	   mp = S->mp;
-
+	word       	z1 = S->z1;
+	longword 	L_z2 = S->L_z2;
+	word 	   	mp = S->mp;
 	word 	   	s1;
-
-
 	word		SO;
-
 	ulongword	utmp;		/* for L_ADD */
-
-	register int		k = 160;
+	register int	k = 160;
 
 	while (k--) {
 

Modified: team/murf/AEL-trunk-fixesonly/doc/channelvariables.txt
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/doc/channelvariables.txt?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/doc/channelvariables.txt (original)
+++ team/murf/AEL-trunk-fixesonly/doc/channelvariables.txt Fri Jun  9 17:35:51 2006
@@ -710,6 +710,8 @@
 ${SIPURI}		* SIP uri
 ${SIP_CODEC} 		Set the SIP codec for a call	
 ${SIP_URI_OPTIONS}	* additional options to add to the URI for an outgoing call
+${RTPAUDIOQOS}		RTCP QoS report for the audio of this call
+${RTPVIDEOQOS}		RTCP QoS report for the video of this call
 
 The Agent channel uses the following variables:
 ---------------------------------------------------------

Modified: team/murf/AEL-trunk-fixesonly/include/asterisk.h
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/include/asterisk.h?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/include/asterisk.h (original)
+++ team/murf/AEL-trunk-fixesonly/include/asterisk.h Fri Jun  9 17:35:51 2006
@@ -22,32 +22,32 @@
 
 #include "asterisk/compat.h"
 
+#include <limits.h>
+
 #define DEFAULT_LANGUAGE "en"
 
 #define DEFAULT_SAMPLE_RATE 8000
 #define DEFAULT_SAMPLES_PER_MS  ((DEFAULT_SAMPLE_RATE)/1000)
 
-#define AST_CONFIG_MAX_PATH 255
-
 /* provided in asterisk.c */
-extern char ast_config_AST_CONFIG_DIR[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_CONFIG_FILE[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_MODULE_DIR[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_SPOOL_DIR[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_MONITOR_DIR[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_VAR_DIR[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_DATA_DIR[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_LOG_DIR[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_AGI_DIR[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_DB[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_KEY_DIR[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_PID[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_SOCKET[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_RUN_DIR[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_CTL_PERMISSIONS[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_CTL_OWNER[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_CTL_GROUP[AST_CONFIG_MAX_PATH];
-extern char ast_config_AST_CTL[AST_CONFIG_MAX_PATH];
+extern char ast_config_AST_CONFIG_DIR[PATH_MAX];
+extern char ast_config_AST_CONFIG_FILE[PATH_MAX];
+extern char ast_config_AST_MODULE_DIR[PATH_MAX];
+extern char ast_config_AST_SPOOL_DIR[PATH_MAX];
+extern char ast_config_AST_MONITOR_DIR[PATH_MAX];
+extern char ast_config_AST_VAR_DIR[PATH_MAX];
+extern char ast_config_AST_DATA_DIR[PATH_MAX];
+extern char ast_config_AST_LOG_DIR[PATH_MAX];
+extern char ast_config_AST_AGI_DIR[PATH_MAX];
+extern char ast_config_AST_DB[PATH_MAX];
+extern char ast_config_AST_KEY_DIR[PATH_MAX];
+extern char ast_config_AST_PID[PATH_MAX];
+extern char ast_config_AST_SOCKET[PATH_MAX];
+extern char ast_config_AST_RUN_DIR[PATH_MAX];
+extern char ast_config_AST_CTL_PERMISSIONS[PATH_MAX];
+extern char ast_config_AST_CTL_OWNER[PATH_MAX];
+extern char ast_config_AST_CTL_GROUP[PATH_MAX];
+extern char ast_config_AST_CTL[PATH_MAX];
 extern char ast_config_AST_SYSTEM_NAME[20];
 
 int ast_set_priority(int);			/*!< Provided by asterisk.c */

Modified: team/murf/AEL-trunk-fixesonly/include/asterisk/endian.h
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/include/asterisk/endian.h?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/include/asterisk/endian.h (original)
+++ team/murf/AEL-trunk-fixesonly/include/asterisk/endian.h Fri Jun  9 17:35:51 2006
@@ -33,9 +33,6 @@
 #ifdef __linux__
 #include <endian.h>
 #elif defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__APPLE__)
-#if defined(__OpenBSD__)
-#include <machine/types.h>
-#endif /* __OpenBSD__ */
 #include <machine/endian.h>
 #define __BYTE_ORDER BYTE_ORDER
 #define __LITTLE_ENDIAN LITTLE_ENDIAN

Modified: team/murf/AEL-trunk-fixesonly/include/asterisk/rtp.h
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/include/asterisk/rtp.h?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/include/asterisk/rtp.h (original)
+++ team/murf/AEL-trunk-fixesonly/include/asterisk/rtp.h Fri Jun  9 17:35:51 2006
@@ -66,19 +66,6 @@
 #define FLAG_3389_WARNING		(1 << 0)
 
 typedef int (*ast_rtp_callback)(struct ast_rtp *rtp, struct ast_frame *f, void *data);
-
-
-/*!
- * \brief Structure representing a RTP session.
- *
- * RTP session is defined on page 9 of RFC 3550: "An association among a set of participants communicating with RTP.  A participant may be involved in multiple RTP sessions at the same time [...]"
- *
- */
-/*! \brief The value of each payload format mapping: */
-struct rtpPayloadType {
-	int isAstFormat; 	/*!< whether the following code is an AST_FORMAT */
-	int code;
-};
 
 /*!
  * \brief Get the amount of space required to hold an RTP session

Modified: team/murf/AEL-trunk-fixesonly/include/asterisk/stringfields.h
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/include/asterisk/stringfields.h?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/include/asterisk/stringfields.h (original)
+++ team/murf/AEL-trunk-fixesonly/include/asterisk/stringfields.h Fri Jun  9 17:35:51 2006
@@ -171,7 +171,7 @@
   \brief Declare a string field
   \param name The field name
 */
-#define AST_STRING_FIELD(name) const ast_string_field name;
+#define AST_STRING_FIELD(name) const ast_string_field name
 
 /*!
   \brief Declare the fields needed in a structure
@@ -181,7 +181,7 @@
 	ast_string_field __begin_field[0]; \
 	field_list \
 	ast_string_field __end_field[0]; \
-	struct ast_string_field_mgr __field_mgr;
+	struct ast_string_field_mgr __field_mgr
 
 /*!
   \brief Get the number of string fields in a structure

Modified: team/murf/AEL-trunk-fixesonly/logger.c
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/logger.c?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/logger.c (original)
+++ team/murf/AEL-trunk-fixesonly/logger.c Fri Jun  9 17:35:51 2006
@@ -378,8 +378,8 @@
 
 int reload_logger(int rotate)
 {
-	char old[AST_CONFIG_MAX_PATH] = "";
-	char new[AST_CONFIG_MAX_PATH];
+	char old[PATH_MAX] = "";
+	char new[PATH_MAX];
 	int event_rotate = rotate, queue_rotate = rotate;
 	struct logchannel *f;
 	FILE *myf;

Modified: team/murf/AEL-trunk-fixesonly/pbx/Makefile
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/pbx/Makefile?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/pbx/Makefile (original)
+++ team/murf/AEL-trunk-fixesonly/pbx/Makefile Fri Jun  9 17:35:51 2006
@@ -65,7 +65,7 @@
 	$(CC) $(CFLAGS) -I. -c -o ael/aelbison.o ael/ael.tab.c
 
 ael/ael_lex.c:
-	(cd ael; flex ael.flex)
+	(cd ael; flex ael.flex; sed -i -e "/begin standard C headers/i#include \"asterisk.h\"" ael_lex.c)
 
 ael/ael.tab.c ael/ael.tab.h:
 	(cd ael; bison -v -d ael.y)

Modified: team/murf/AEL-trunk-fixesonly/pbx/ael/ael.flex
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/pbx/ael/ael.flex?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/pbx/ael/ael.flex (original)
+++ team/murf/AEL-trunk-fixesonly/pbx/ael/ael.flex Fri Jun  9 17:35:51 2006
@@ -56,8 +56,6 @@
 %option bison-locations
 
 %{
-#include "asterisk.h"
-
 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 
 #include <sys/types.h>
@@ -65,6 +63,7 @@
 #include <unistd.h>
 
 #include "asterisk/logger.h"
+#include "asterisk/utils.h"
 #include "ael/ael.tab.h"
 #include "asterisk/ael_structs.h"
 
@@ -402,13 +401,10 @@
 		if ( !error ) {	/* valid file name */
 			*p2 = 0;
 			/* relative vs. absolute */
-			if ( *(p1+1) != '/' ) {
-				/* XXX must check overflows */
-				strcpy(fnamebuf,ast_config_AST_CONFIG_DIR);
-				strcat(fnamebuf,"/");
-				strcat(fnamebuf,p1+1);
-			} else
-				strcpy(fnamebuf,p1+1);
+			if (*(p1+1) != '/')
+				snprintf(fnamebuf, sizeof(fnamebuf), "%s/%s", ast_config_AST_CONFIG_DIR, p1 + 1);
+			else
+				ast_copy_string(fnamebuf, p1 + 1, sizeof(fnamebuf));
 			in1 = fopen( fnamebuf, "r" );
 			if ( ! in1 ) {
 				ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Couldn't find the include file: %s; ignoring the Include directive!\n", my_file, my_lineno, my_col, fnamebuf);

Modified: team/murf/AEL-trunk-fixesonly/pbx/ael/ael_lex.c
URL: http://svn.digium.com/view/asterisk/team/murf/AEL-trunk-fixesonly/pbx/ael/ael_lex.c?rev=33396&r1=33395&r2=33396&view=diff
==============================================================================
--- team/murf/AEL-trunk-fixesonly/pbx/ael/ael_lex.c (original)
+++ team/murf/AEL-trunk-fixesonly/pbx/ael/ael_lex.c Fri Jun  9 17:35:51 2006
@@ -16,6 +16,7 @@
 
 /* First, we deal with  platform-specific or compiler-specific issues. */
 
+#include "asterisk.h"
 /* begin standard C headers. */
 #include <stdio.h>
 #include <string.h>
@@ -660,8 +661,6 @@
  * bison-locations is probably not needed.
  */
 #line 59 "ael.flex"
-#include "asterisk.h"
-
 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 
 #include <sys/types.h>
@@ -669,6 +668,7 @@
 #include <unistd.h>
 
 #include "asterisk/logger.h"
+#include "asterisk/utils.h"
 #include "ael/ael.tab.h"
 #include "asterisk/ael_structs.h"
 
@@ -766,7 +766,7 @@
 #define	STORE_POS
 #define	STORE_LOC
 #endif
-#line 767 "ael_lex.c"
+#line 781 "ael_lex.c"
 
 #define INITIAL 0
 #define paren 1
@@ -1000,10 +1000,10 @@
 	register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
-#line 171 "ael.flex"
-
-
-#line 1004 "ael_lex.c"
+#line 173 "ael.flex"
+
+
+#line 1024 "ael_lex.c"
 
     yylval = yylval_param;
 
@@ -1094,218 +1094,218 @@
 
 case 1:
 YY_RULE_SETUP
-#line 173 "ael.flex"
+#line 175 "ael.flex"
 { STORE_POS; return LC;}
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 174 "ael.flex"
+#line 176 "ael.flex"
 { STORE_POS; return RC;}
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 175 "ael.flex"
+#line 177 "ael.flex"
 { STORE_POS; return LP;}
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 176 "ael.flex"
+#line 178 "ael.flex"
 { STORE_POS; return RP;}
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 177 "ael.flex"
+#line 179 "ael.flex"
 { STORE_POS; return SEMI;}
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 178 "ael.flex"
+#line 180 "ael.flex"
 { STORE_POS; return EQ;}
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 179 "ael.flex"
+#line 181 "ael.flex"
 { STORE_POS; return COMMA;}
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 180 "ael.flex"
+#line 182 "ael.flex"
 { STORE_POS; return COLON;}
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 181 "ael.flex"
+#line 183 "ael.flex"
 { STORE_POS; return AMPER;}
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 182 "ael.flex"
+#line 184 "ael.flex"
 { STORE_POS; return BAR;}
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 183 "ael.flex"
+#line 185 "ael.flex"
 { STORE_POS; return EXTENMARK;}
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 184 "ael.flex"
+#line 186 "ael.flex"
 { STORE_POS; return AT;}
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 185 "ael.flex"
+#line 187 "ael.flex"
 {/*comment*/}
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 186 "ael.flex"
+#line 188 "ael.flex"
 { STORE_POS; return KW_CONTEXT;}
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 187 "ael.flex"
+#line 189 "ael.flex"
 { STORE_POS; return KW_ABSTRACT;}
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 188 "ael.flex"
+#line 190 "ael.flex"
 { STORE_POS; return KW_MACRO;};
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 189 "ael.flex"
+#line 191 "ael.flex"
 { STORE_POS; return KW_GLOBALS;}
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 190 "ael.flex"
+#line 192 "ael.flex"
 { STORE_POS; return KW_IGNOREPAT;}
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 191 "ael.flex"
+#line 193 "ael.flex"
 { STORE_POS; return KW_SWITCH;}
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 192 "ael.flex"
+#line 194 "ael.flex"
 { STORE_POS; return KW_IF;}
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 193 "ael.flex"
+#line 195 "ael.flex"
 { STORE_POS; return KW_IFTIME;}
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 194 "ael.flex"
+#line 196 "ael.flex"
 { STORE_POS; return KW_RANDOM;}
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 195 "ael.flex"
+#line 197 "ael.flex"
 { STORE_POS; return KW_REGEXTEN;}
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 196 "ael.flex"
+#line 198 "ael.flex"
 { STORE_POS; return KW_HINT;}
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 197 "ael.flex"
+#line 199 "ael.flex"
 { STORE_POS; return KW_ELSE;}
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 198 "ael.flex"
+#line 200 "ael.flex"
 { STORE_POS; return KW_GOTO;}
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 199 "ael.flex"
+#line 201 "ael.flex"
 { STORE_POS; return KW_JUMP;}
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 200 "ael.flex"
+#line 202 "ael.flex"
 { STORE_POS; return KW_RETURN;}
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 201 "ael.flex"
+#line 203 "ael.flex"
 { STORE_POS; return KW_BREAK;}
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 202 "ael.flex"
+#line 204 "ael.flex"
 { STORE_POS; return KW_CONTINUE;}
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 203 "ael.flex"
+#line 205 "ael.flex"
 { STORE_POS; return KW_FOR;}
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 204 "ael.flex"
+#line 206 "ael.flex"
 { STORE_POS; return KW_WHILE;}
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 205 "ael.flex"
+#line 207 "ael.flex"
 { STORE_POS; return KW_CASE;}
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 206 "ael.flex"
+#line 208 "ael.flex"
 { STORE_POS; return KW_DEFAULT;}
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 207 "ael.flex"
+#line 209 "ael.flex"
 { STORE_POS; return KW_PATTERN;}
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 208 "ael.flex"
+#line 210 "ael.flex"
 { STORE_POS; return KW_CATCH;}
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 209 "ael.flex"
+#line 211 "ael.flex"
 { STORE_POS; return KW_SWITCHES;}
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 210 "ael.flex"
+#line 212 "ael.flex"
 { STORE_POS; return KW_ESWITCHES;}
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 211 "ael.flex"
+#line 213 "ael.flex"
 { STORE_POS; return KW_INCLUDES;}
 	YY_BREAK
 case 40:
 /* rule 40 can match eol */
 YY_RULE_SETUP
-#line 213 "ael.flex"
+#line 215 "ael.flex"
 { my_lineno++; my_col = 1; }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 214 "ael.flex"
+#line 216 "ael.flex"
 { my_col += yyleng; }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 215 "ael.flex"
+#line 217 "ael.flex"
 { my_col += (yyleng*8)-(my_col%8); }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 217 "ael.flex"
+#line 219 "ael.flex"
 {
 		STORE_POS;
 		yylval->str = strdup(yytext);
@@ -1323,7 +1323,7 @@
 case 44:
 /* rule 44 can match eol */
 YY_RULE_SETUP
-#line 233 "ael.flex"
+#line 235 "ael.flex"
 {
 		if ( pbcpop(')') ) {	/* error */
 			STORE_LOC;
@@ -1349,7 +1349,7 @@
 case 45:
 /* rule 45 can match eol */
 YY_RULE_SETUP
-#line 255 "ael.flex"
+#line 257 "ael.flex"
 {
 		char c = yytext[yyleng-1];
 		if (c == '(')
@@ -1361,7 +1361,7 @@
 case 46:
 /* rule 46 can match eol */
 YY_RULE_SETUP
-#line 263 "ael.flex"
+#line 265 "ael.flex"
 {
 		char c = yytext[yyleng-1];
 		if ( pbcpop(c))  { /* error */
@@ -1386,7 +1386,7 @@
 case 47:
 /* rule 47 can match eol */
 YY_RULE_SETUP
-#line 285 "ael.flex"
+#line 287 "ael.flex"
 {
 		char c = yytext[yyleng-1];
 		if (c == '(')
@@ -1398,7 +1398,7 @@
 case 48:
 /* rule 48 can match eol */
 YY_RULE_SETUP
-#line 293 "ael.flex"
+#line 295 "ael.flex"
 {
 		if ( pbcpop(')') ) { /* error */
 			STORE_LOC;
@@ -1426,7 +1426,7 @@
 case 49:
 /* rule 49 can match eol */
 YY_RULE_SETUP
-#line 317 "ael.flex"
+#line 319 "ael.flex"
 {
 		if( parencount != 0) { /* printf("Folding in a comma!\n"); */
 			yymore();
@@ -1444,7 +1444,7 @@
 case 50:
 /* rule 50 can match eol */
 YY_RULE_SETUP
-#line 331 "ael.flex"
+#line 333 "ael.flex"
 {
 		char c = yytext[yyleng-1];
 		if ( pbcpop(c) ) { /* error */
@@ -1465,7 +1465,7 @@
 case 51:
 /* rule 51 can match eol */
 YY_RULE_SETUP
-#line 348 "ael.flex"
+#line 350 "ael.flex"
 {
 		char c = yytext[yyleng-1];
 		yymore();
@@ -1475,7 +1475,7 @@
 case 52:
 /* rule 52 can match eol */
 YY_RULE_SETUP
-#line 354 "ael.flex"
+#line 356 "ael.flex"
 {
 		char c = yytext[yyleng-1];
 		if ( pbcpop(c) ) { /* error */
@@ -1491,7 +1491,7 @@
 case 53:
 /* rule 53 can match eol */
 YY_RULE_SETUP
-#line 366 "ael.flex"
+#line 368 "ael.flex"
 {
 		STORE_LOC;
 		yylval->str = strdup(yytext);
@@ -1504,7 +1504,7 @@
 case 54:
 /* rule 54 can match eol */
 YY_RULE_SETUP
-#line 375 "ael.flex"
+#line 377 "ael.flex"
 {
 		FILE *in1;
 		char fnamebuf[1024],*p1,*p2;
@@ -1532,13 +1532,10 @@
 		if ( !error ) {	/* valid file name */
 			*p2 = 0;
 			/* relative vs. absolute */
-			if ( *(p1+1) != '/' ) {
-				/* XXX must check overflows */
-				strcpy(fnamebuf,ast_config_AST_CONFIG_DIR);
-				strcat(fnamebuf,"/");
-				strcat(fnamebuf,p1+1);
-			} else
-				strcpy(fnamebuf,p1+1);
+			if (*(p1+1) != '/')
+				snprintf(fnamebuf, sizeof(fnamebuf), "%s/%s", ast_config_AST_CONFIG_DIR, p1 + 1);
+			else
+				ast_copy_string(fnamebuf, p1 + 1, sizeof(fnamebuf));

[... 126 lines stripped ...]


More information about the asterisk-commits mailing list