[asterisk-commits] branch oej/ami_ssl r25414 - in /team/oej/ami_ssl: ./ apps/ build_tools/ chann...

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Mon May 8 03:48:45 MST 2006


Author: oej
Date: Mon May  8 05:48:44 2006
New Revision: 25414

URL: http://svn.digium.com/view/asterisk?rev=25414&view=rev
Log:
Reset automerge

Added:
    team/oej/ami_ssl/sounds/vm-tempgreetactive.gsm
      - copied unchanged from r25411, trunk/sounds/vm-tempgreetactive.gsm
Modified:
    team/oej/ami_ssl/   (props changed)
    team/oej/ami_ssl/Makefile
    team/oej/ami_ssl/UPGRADE.txt
    team/oej/ami_ssl/apps/app_exec.c
    team/oej/ami_ssl/apps/app_meetme.c
    team/oej/ami_ssl/apps/app_queue.c
    team/oej/ami_ssl/apps/app_voicemail.c
    team/oej/ami_ssl/apps/app_while.c
    team/oej/ami_ssl/asterisk.c
    team/oej/ami_ssl/build_tools/make_version
    team/oej/ami_ssl/build_tools/menuselect.c
    team/oej/ami_ssl/build_tools/menuselect.h
    team/oej/ami_ssl/channel.c
    team/oej/ami_ssl/channels/chan_sip.c
    team/oej/ami_ssl/channels/chan_zap.c
    team/oej/ami_ssl/channels/misdn/isdn_lib.c
    team/oej/ami_ssl/cli.c
    team/oej/ami_ssl/codecs/codec_a_mu.c
    team/oej/ami_ssl/codecs/codec_alaw.c
    team/oej/ami_ssl/codecs/codec_ulaw.c
    team/oej/ami_ssl/configs/func_odbc.conf.sample
    team/oej/ami_ssl/configs/queues.conf.sample
    team/oej/ami_ssl/configs/voicemail.conf.sample
    team/oej/ami_ssl/file.c
    team/oej/ami_ssl/frame.c
    team/oej/ami_ssl/funcs/func_odbc.c
    team/oej/ami_ssl/include/asterisk/manager.h
    team/oej/ami_ssl/include/asterisk/pbx.h
    team/oej/ami_ssl/include/asterisk/utils.h
    team/oej/ami_ssl/manager.c
    team/oej/ami_ssl/pbx.c
    team/oej/ami_ssl/pbx/pbx_dundi.c
    team/oej/ami_ssl/res/res_agi.c
    team/oej/ami_ssl/say.c
    team/oej/ami_ssl/sounds.txt
    team/oej/ami_ssl/static-http/ajamdemo.html
    team/oej/ami_ssl/strcompat.c
    team/oej/ami_ssl/utils.c

Propchange: team/oej/ami_ssl/
------------------------------------------------------------------------------
    automerge = http://edvina.net/training/

Propchange: team/oej/ami_ssl/
------------------------------------------------------------------------------
Binary property 'branch-1.2-blocked' - no diff available.

Propchange: team/oej/ami_ssl/
------------------------------------------------------------------------------
Binary property 'branch-1.2-merged' - no diff available.

Propchange: team/oej/ami_ssl/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Mon May  8 05:48:44 2006
@@ -1,1 +1,1 @@
-/trunk:1-24991
+/trunk:1-25412

Modified: team/oej/ami_ssl/Makefile
URL: http://svn.digium.com/view/asterisk/team/oej/ami_ssl/Makefile?rev=25414&r1=25413&r2=25414&view=diff
==============================================================================
--- team/oej/ami_ssl/Makefile (original)
+++ team/oej/ami_ssl/Makefile Mon May  8 05:48:44 2006
@@ -902,12 +902,30 @@
 	$(MAKE) -C mpg123-0.59r $(MPG123TARG)
 
 config:
-	if [ -d /etc/rc.d/init.d ]; then \
-		$(INSTALL) -m 755 contrib/init.d/rc.redhat.asterisk /etc/rc.d/init.d/asterisk; \
-		/sbin/chkconfig --add asterisk; \
-	elif [ -d /etc/init.d ]; then \
-		$(INSTALL) -m 755 init.asterisk /etc/init.d/asterisk; \
-	fi 
+	@if [ "${OSARCH}" = "Linux" ]; then \
+		if [ -f /etc/redhat-release -o -f /etc/fedora-release ]; then \
+			$(INSTALL) -m 755 contrib/init.d/rc.redhat.asterisk /etc/rc.d/init.d/asterisk; \
+			/sbin/chkconfig --add asterisk; \
+		elif [ -f /etc/debian_version ]; then \
+			$(INSTALL) -m 755 contrib/init.d/rc.debian.asterisk /etc/init.d/asterisk; \
+			/usr/sbin/update-rc.d asterisk start 10 2 3 4 5 . stop 91 2 3 4 5 .; \
+		elif [ -f /etc/gentoo-release ]; then \
+			$(INSTALL) -m 755 contrib/init.d/rc.gentoo.asterisk /etc/init.d/asterisk; \
+			/sbin/rc-update add asterisk default; \
+		elif [ -f /etc/mandrake-release ]; then \
+			$(INSTALL) -m 755 contrib/init.d/rc.mandrake.asterisk /etc/rc.d/init.d/asterisk; \
+			/sbin/chkconfig --add asterisk; \
+		elif [ -f /etc/SuSE-release -o -f /etc/novell-release ]; then \
+			$(INSTALL) -m 755 contrib/init.d/rc.suse.asterisk /etc/init.d/asterisk; \
+			/sbin/chkconfig --add asterisk; \
+		elif [ -f /etc/slackware-version ]; then \
+			echo "Slackware is not currently supported, although an init script does exist for it." \
+		else \
+			echo "We could not install init scripts for your distribution."; \
+		fi \
+	else \
+		echo "We could not install init scripts for your operating system."; \
+	fi
 
 dont-optimize: _all
 

Modified: team/oej/ami_ssl/UPGRADE.txt
URL: http://svn.digium.com/view/asterisk/team/oej/ami_ssl/UPGRADE.txt?rev=25414&r1=25413&r2=25414&view=diff
==============================================================================
--- team/oej/ami_ssl/UPGRADE.txt (original)
+++ team/oej/ami_ssl/UPGRADE.txt Mon May  8 05:48:44 2006
@@ -93,6 +93,20 @@
   option, it will default to "no" to keep backward compatability with the old 
   behavior.
 
+* The app_queue application now has the ability to use MixMonitor to 
+  record conversations queue members are having with queue callers. Please
+  see configs/queues.conf.sample for more information on this option.
+
+* ast_play_and_record would attempt to cancel the recording if a DTMF
+  '0' was received.  This behavior was not documented in most of the
+  applications that used ast_play_and_record and the return codes from
+  ast_play_and_record weren't checked for properly.
+  ast_play_and_record has been changed so that '0' no longer cancels a
+  recording.  If you want to allow DTMF digits to cancel an
+  in-progress recording use ast_play_and_record_full which allows you
+  to specify which DTMF digits can be used to accept a recording and
+  which digits can be used to cancel a recording.
+
 Manager:
 
 * After executing the 'status' manager action, the "Status" manager events

Modified: team/oej/ami_ssl/apps/app_exec.c
URL: http://svn.digium.com/view/asterisk/team/oej/ami_ssl/apps/app_exec.c?rev=25414&r1=25413&r2=25414&view=diff
==============================================================================
--- team/oej/ami_ssl/apps/app_exec.c (original)
+++ team/oej/ami_ssl/apps/app_exec.c Mon May  8 05:48:44 2006
@@ -83,6 +83,14 @@
 "    NOAPP     if the application was not found or was not specified\n"
 "    NOMEMORY  if there was not enough memory to execute.\n";
 
+static char *app_execif = "ExecIf";
+static char *execif_synopsis = "Executes dialplan application, conditionally";
+static char *execif_descrip = 
+"Usage:  ExecIF (<expr>|<app>|<data>)\n"
+"If <expr> is true, execute and return the result of <app>(<data>).\n"
+"If <expr> is true, but <app> is not found, then the application\n"
+"will return a non-zero value.\n";
+
 LOCAL_USER_DECL;
 
 static int exec_exec(struct ast_channel *chan, void *data)
@@ -160,12 +168,54 @@
 	return 0;
 }
 
+static int execif_exec(struct ast_channel *chan, void *data) {
+	int res=0;
+	struct localuser *u;
+	char *myapp = NULL;
+	char *mydata = NULL;
+	char *expr = NULL;
+	struct ast_app *app = NULL;
+
+	LOCAL_USER_ADD(u);
+
+	if (!(expr = ast_strdupa(data))) {
+		LOCAL_USER_REMOVE(u);
+		return -1;
+	}
+
+	if ((myapp = strchr(expr,'|'))) {
+		*myapp = '\0';
+		myapp++;
+		if ((mydata = strchr(myapp,'|'))) {
+			*mydata = '\0';
+			mydata++;
+		} else
+			mydata = "";
+
+		if (pbx_checkcondition(expr)) { 
+			if ((app = pbx_findapp(myapp))) {
+				res = pbx_exec(chan, app, mydata);
+			} else {
+				ast_log(LOG_WARNING, "Count not find application! (%s)\n", myapp);
+				res = -1;
+			}
+		}
+	} else {
+		ast_log(LOG_ERROR,"Invalid Syntax.\n");
+		res = -1;
+	}
+		
+	LOCAL_USER_REMOVE(u);
+	return res;
+}
+
 static int unload_module(void *mod)
 {
 	int res;
 
 	res = ast_unregister_application(app_exec);
 	res |= ast_unregister_application(app_tryexec);
+	res |= ast_unregister_application(app_execif);
 
 	STANDARD_HANGUP_LOCALUSERS;
 
@@ -176,6 +226,7 @@
 {
 	int res = ast_register_application(app_exec, exec_exec, exec_synopsis, exec_descrip);
 	res |= ast_register_application(app_tryexec, tryexec_exec, tryexec_synopsis, tryexec_descrip);
+	res |= ast_register_application(app_execif, execif_exec, execif_synopsis, execif_descrip);
 	return res;
 }
 

Modified: team/oej/ami_ssl/apps/app_meetme.c
URL: http://svn.digium.com/view/asterisk/team/oej/ami_ssl/apps/app_meetme.c?rev=25414&r1=25413&r2=25414&view=diff
==============================================================================
--- team/oej/ami_ssl/apps/app_meetme.c (original)
+++ team/oej/ami_ssl/apps/app_meetme.c Mon May  8 05:48:44 2006
@@ -1,4 +1,3 @@
-
 /*
  * Asterisk -- An open source telephony toolkit.
  *
@@ -2151,9 +2150,12 @@
 								break;
 							} else {
 								/* Pin invalid */
-								res = ast_streamfile(chan, "conf-invalidpin", chan->language);
-								if (!res)
-									ast_waitstream(chan, AST_DIGIT_ANY);
+								if (!ast_streamfile(chan, "conf-invalidpin", chan->language))
+									res = ast_waitstream(chan, AST_DIGIT_ANY);
+								else {
+									ast_log(LOG_WARNING, "Couldn't play invalid pin msg!\n");
+									break;
+								}
 								if (res < 0) {
 									AST_LIST_LOCK(&confs);
 									cnf->refcount--;

Modified: team/oej/ami_ssl/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/team/oej/ami_ssl/apps/app_queue.c?rev=25414&r1=25413&r2=25414&view=diff
==============================================================================
--- team/oej/ami_ssl/apps/app_queue.c (original)
+++ team/oej/ami_ssl/apps/app_queue.c Mon May  8 05:48:44 2006
@@ -129,7 +129,7 @@
 static char *synopsis = "Queue a call for a call queue";
 
 static char *descrip =
-"  Queue(queuename[|options[|URL][|announceoverride][|timeout]]):\n"
+"  Queue(queuename[|options[|URL][|announceoverride][|timeout][|AGI]):\n"
 "Queues an incoming call in a particular call queue as defined in queues.conf.\n"
 "This application will return to the dialplan if the queue does not exist, or\n"
 "any of the join options cause the caller to not enter the queue.\n"
@@ -148,6 +148,8 @@
 "up by another user.\n"
 "  The optional URL will be sent to the called party if the channel supports\n"
 "it.\n"
+"  The optional AGI parameter will setup an AGI script to be executed on the \n"
+"calling party's channel once they are connected to a queue member.\n"
 "  The timeout will cause the queue to fail out after a specified number of\n"
 "seconds, checked between each queues.conf 'timeout' and 'retry' cycle.\n"
 "  This application sets the following channel variable upon completion:\n"
@@ -237,6 +239,9 @@
 /*! \brief queues.conf [general] option */
 static int autofill_default = 0;
 
+/*! \brief queues.conf [general] option */
+static int montype_default = 0;
+
 enum queue_result {
 	QUEUE_UNKNOWN = 0,
 	QUEUE_TIMEOUT = 1,
@@ -329,6 +334,7 @@
 	unsigned int eventwhencalled:1;
 	unsigned int leavewhenempty:2;
 	unsigned int ringinuse:1;
+	unsigned int setinterfacevar:1;
 	unsigned int reportholdtime:1;
 	unsigned int wrapped:1;
 	unsigned int timeoutrestart:1;
@@ -345,6 +351,7 @@
 	int servicelevel;               /*!< seconds setting for servicelevel*/
 	int callscompletedinsl;         /*!< Number of calls answered with servicelevel*/
 	char monfmt[8];                 /*!< Format to use when recording calls */
+	int montype;			/*!< Monitor type  Monitor vs. MixMonitor */
 	char sound_next[80];            /*!< Sound file: "Your call is now first in line" (def. queue-youarenext) */
 	char sound_thereare[80];        /*!< Sound file: "There are currently" (def. queue-thereare) */
 	char sound_calls[80];           /*!< Sound file: "calls waiting to speak to a representative." (def. queue-callswaiting)*/
@@ -579,7 +586,9 @@
 	q->roundingseconds = 0; /* Default - don't announce seconds */
 	q->servicelevel = 0;
 	q->ringinuse = 1;
+	q->setinterfacevar = 0;
 	q->autofill = autofill_default;
+	q->montype = montype_default;
 	q->moh[0] = '\0';
 	q->announce[0] = '\0';
 	q->context[0] = '\0';
@@ -633,6 +642,8 @@
 			q->timeout = DEFAULT_TIMEOUT;
 	} else if (!strcasecmp(param, "ringinuse")) {
 		q->ringinuse = ast_true(val);
+	} else if (!strcasecmp(param, "setinterfacevar")) {
+		q->setinterfacevar = ast_true(val);
 	} else if (!strcasecmp(param, "monitor-join")) {
 		q->monjoin = ast_true(val);
 	} else if (!strcasecmp(param, "monitor-format")) {
@@ -705,6 +716,9 @@
 		q->wrapuptime = atoi(val);
 	} else if (!strcasecmp(param, "autofill")) {
 		q->autofill = ast_true(val);
+	} else if (!strcasecmp(param, "monitor-type")) {
+		if (!strcasecmp(val, "mixmonitor"))
+			q->montype = 1;
 	} else if (!strcasecmp(param, "autopause")) {
 		q->autopause = ast_true(val);
 	} else if (!strcasecmp(param, "maxlen")) {
@@ -1245,9 +1259,8 @@
 			manager_event(EVENT_FLAG_CALL, "Leave",
 				"Channel: %s\r\nQueue: %s\r\nCount: %d\r\n",
 				qe->chan->name, q->name,  q->count);
-#if 0
-ast_log(LOG_NOTICE, "Queue '%s' Leave, Channel '%s'\n", q->name, qe->chan->name );
-#endif
+			if (option_debug)
+				ast_log(LOG_DEBUG, "Queue '%s' Leave, Channel '%s'\n", q->name, qe->chan->name );
 			/* Take us out of the queue */
 			if (prev)
 				prev->next = cur->next;
@@ -2068,7 +2081,7 @@
 	return 0;
 }
 
-static int try_calling(struct queue_ent *qe, const char *options, char *announceoverride, const char *url, int *go_on)
+static int try_calling(struct queue_ent *qe, const char *options, char *announceoverride, const char *url, int *go_on, const char *agi)
 {
 	struct member *cur;
 	struct callattempt *outgoing=NULL; /* the queue we are building */
@@ -2080,6 +2093,7 @@
 	struct ast_channel *which;
 	struct callattempt *lpeer;
 	struct member *member;
+	struct ast_app *app;
 	int res = 0, bridge = 0;
 	int numbusies = 0;
 	int x=0;
@@ -2089,6 +2103,17 @@
 	time_t now = time(NULL);
 	struct ast_bridge_config bridge_config;
 	char nondataquality = 1;
+	char *agiexec = NULL;
+	int ret = 0;
+	const char *monitorfilename;
+	const char *monitor_exec;
+	const char *monitor_options;
+	char tmpid[256], tmpid2[256];
+	char meid[1024], meid2[1024];
+	char mixmonargs[1512];
+	struct ast_app *mixmonapp = NULL;
+	char *p;
+
 
 	memset(&bridge_config, 0, sizeof(bridge_config));
 	time(&now);
@@ -2274,23 +2299,89 @@
 		}
 		/* Begin Monitoring */
 		if (qe->parent->monfmt && *qe->parent->monfmt) {
-			const char *monitorfilename = pbx_builtin_getvar_helper(qe->chan, "MONITOR_FILENAME");
-			if (pbx_builtin_getvar_helper(qe->chan, "MONITOR_EXEC") || pbx_builtin_getvar_helper(qe->chan, "MONITOR_EXEC_ARGS"))
-				which = qe->chan;
-			else
-				which = peer;
-			if (monitorfilename)
-				ast_monitor_start(which, qe->parent->monfmt, monitorfilename, 1 );
-			else if (qe->chan->cdr) 
-				ast_monitor_start(which, qe->parent->monfmt, qe->chan->cdr->uniqueid, 1 );
-			else {
-				/* Last ditch effort -- no CDR, make up something */
-				char tmpid[256];
-				snprintf(tmpid, sizeof(tmpid), "chan-%lx", ast_random());
-				ast_monitor_start(which, qe->parent->monfmt, tmpid, 1 );
-			}
-			if (qe->parent->monjoin)
-				ast_monitor_setjoinfiles(which, 1);
+			if (!qe->parent->montype) {
+				if (option_debug)
+					ast_log(LOG_DEBUG, "Starting Monitor as requested.\n");
+				monitorfilename = pbx_builtin_getvar_helper(qe->chan, "MONITOR_FILENAME");
+				if (pbx_builtin_getvar_helper(qe->chan, "MONITOR_EXEC") || pbx_builtin_getvar_helper(qe->chan, "MONITOR_EXEC_ARGS"))
+					which = qe->chan;
+				else
+					which = peer;
+				if (monitorfilename)
+					ast_monitor_start(which, qe->parent->monfmt, monitorfilename, 1 );
+				else if (qe->chan->cdr) 
+					ast_monitor_start(which, qe->parent->monfmt, qe->chan->cdr->uniqueid, 1 );
+				else {
+					/* Last ditch effort -- no CDR, make up something */
+					snprintf(tmpid, sizeof(tmpid), "chan-%lx", ast_random());
+					ast_monitor_start(which, qe->parent->monfmt, tmpid, 1 );
+				}
+				if (qe->parent->monjoin)
+					ast_monitor_setjoinfiles(which, 1);
+			} else {
+				if (option_debug)
+					ast_log(LOG_DEBUG, "Starting MixMonitor as requested.\n");
+				monitorfilename = pbx_builtin_getvar_helper(qe->chan, "MONITOR_FILENAME");
+				if (!monitorfilename) {
+					if (qe->chan->cdr)
+						ast_copy_string(tmpid, qe->chan->cdr->uniqueid, sizeof(tmpid)-1);
+					else 
+						snprintf(tmpid, sizeof(tmpid), "chan-%lx", ast_random());
+				} else {
+					ast_copy_string(tmpid2, monitorfilename, sizeof(tmpid2)-1);
+					for (p = tmpid2; *p ; p++) {
+						if (*p == '^' && *(p+1) == '{') {
+							*p = '$';
+						}
+					}
+
+					pbx_substitute_variables_helper(qe->chan, tmpid2, tmpid, sizeof(tmpid) - 1);
+				}
+
+				monitor_exec = pbx_builtin_getvar_helper(qe->chan, "MONITOR_EXEC");
+				monitor_options = pbx_builtin_getvar_helper(qe->chan, "MONITOR_OPTIONS");
+
+				if (monitor_exec) {
+					ast_copy_string(meid2, monitor_exec, sizeof(meid2)-1);
+					for (p = meid2; *p ; p++) {
+						if (*p == '^' && *(p+1) == '{') {
+							*p = '$';
+						}
+					}
+					pbx_substitute_variables_helper(qe->chan, meid2, meid, sizeof(meid) - 1);
+				} 
+	
+				snprintf(tmpid2, sizeof(tmpid2)-1, "%s.%s", tmpid, qe->parent->monfmt);
+
+				mixmonapp = pbx_findapp("MixMonitor");
+
+				if (strchr(tmpid2, '|')) {
+					ast_log(LOG_WARNING, "monitor-format (in queues.conf) and MONITOR_FILENAME cannot contain a '|'! Not recording.\n");
+					mixmonapp = NULL;
+				}
+				
+				if (strchr(monitor_options, '|')) {
+					ast_log(LOG_WARNING, "MONITOR_OPTIONS cannot contain a '|'! Not recording.\n");
+					mixmonapp = NULL;
+				}
+
+				if (mixmonapp) {
+					if (!ast_strlen_zero(monitor_exec) && !ast_strlen_zero(monitor_options)) 
+						snprintf(mixmonargs, sizeof(mixmonargs)-1, "%s|b%s|%s", tmpid2, monitor_options, monitor_exec);
+					else if (!ast_strlen_zero(monitor_options)) 
+						snprintf(mixmonargs, sizeof(mixmonargs)-1, "%s|b%s", tmpid2, monitor_options);
+					else 
+						snprintf(mixmonargs, sizeof(mixmonargs)-1, "%s|b", tmpid2);
+						
+					if (option_debug)
+						ast_log(LOG_DEBUG, "Arguments being passed to MixMonitor: %s\n", mixmonargs);
+
+					ret = pbx_exec(qe->chan, mixmonapp, mixmonargs);
+
+				} else
+					ast_log(LOG_WARNING, "Asked to run MixMonitor on this call, but cannot find the MixMonitor app!\n");
+
+			}
 		}
 		/* Drop out of the queue at this point, to prepare for next caller */
 		leave_queue(qe);			
@@ -2299,6 +2390,18 @@
 	 			ast_log(LOG_DEBUG, "app_queue: sendurl=%s.\n", url);
  			ast_channel_sendurl(peer, url);
  		}
+		if (qe->parent->setinterfacevar)
+				pbx_builtin_setvar_helper(qe->chan, "MEMBERINTERFACE", member->interface);
+		if (!ast_strlen_zero(agi)) {
+			if (option_debug)
+				ast_log(LOG_DEBUG, "app_queue: agi=%s.\n", agi);
+			app = pbx_findapp("agi");
+			if (app) {
+				agiexec = ast_strdupa(agi);
+				ret = pbx_exec(qe->chan, app, agiexec);
+			} else 
+				ast_log(LOG_WARNING, "Asked to execute an AGI on this channel, but could not find application (agi)!\n");
+		}
 		ast_queue_log(queuename, qe->chan->uniqueid, peer->name, "CONNECT", "%ld|%s", (long)time(NULL) - qe->start, peer->uniqueid);
 		if (qe->parent->eventwhencalled)
 			manager_event(EVENT_FLAG_AGENT, "AgentConnect",
@@ -2909,6 +3012,7 @@
 		 AST_APP_ARG(url);
 		 AST_APP_ARG(announceoverride);
 		 AST_APP_ARG(queuetimeoutstr);
+		 AST_APP_ARG(agi);
 	);
 	
 	/* Our queue entry */
@@ -3057,7 +3161,7 @@
 				}
 
 				/* Try calling all queue members for 'timeout' seconds */
-				res = try_calling(&qe, args.options, args.announceoverride, args.url, &go_on);
+				res = try_calling(&qe, args.options, args.announceoverride, args.url, &go_on, args.agi);
 
 				if (res) {
 					if (res < 0) {
@@ -3364,6 +3468,10 @@
 			autofill_default = 0;
 			if ((general_val = ast_variable_retrieve(cfg, "general", "autofill")))
 				autofill_default = ast_true(general_val);
+			montype_default = 0;
+			if ((general_val = ast_variable_retrieve(cfg, "general", "monitor-type")))
+				if (!strcasecmp(general_val, "mixmonitor"))
+					montype_default = 1;
 		} else {	/* Define queue */
 			/* Look for an existing one */
 			AST_LIST_TRAVERSE(&queues, q, list) {

Modified: team/oej/ami_ssl/apps/app_voicemail.c
URL: http://svn.digium.com/view/asterisk/team/oej/ami_ssl/apps/app_voicemail.c?rev=25414&r1=25413&r2=25414&view=diff
==============================================================================
--- team/oej/ami_ssl/apps/app_voicemail.c (original)
+++ team/oej/ami_ssl/apps/app_voicemail.c Mon May  8 05:48:44 2006
@@ -37,6 +37,8 @@
  * 07-11-2005 : An issue with voicemail synchronization has been fixed by GDS Partners (www.gdspartners.com)
  *				 Stojan Sljivic <stojan.sljivic at gdspartners.com>
  *
+ * 12-04-2006 : Support for Polish added by DIR (www.dir.pl)
+ *				 Bartosz Supczinski <Bartosz.Supczinski at dir.pl>
  */
 
 #include <stdlib.h>
@@ -120,7 +122,7 @@
 #define VM_DELETE		(1 << 12)
 #define VM_ALLOCED		(1 << 13)
 #define VM_SEARCH		(1 << 14)
-
+#define VM_TEMPGREETWARN	(1 << 15)	/*!< Remind user tempgreeting is set */
 #define ERROR_LOCK_PATH		-100
 
 enum {
@@ -161,6 +163,7 @@
 	\arg \b fr - French
 	\arg \b it = Italian
 	\arg \b nl - Dutch
+	\arg \b pt - Polish
 	\arg \b pt - Portuguese
 	\arg \b gr - Greek
 	\arg \b no - Norwegian
@@ -179,6 +182,16 @@
 NB these are plural:
 \arg \b vm-INBOX	nieuwe (nl)
 \arg \b vm-Old		oude (nl)
+
+Polish uses:
+\arg \b vm-new-a	'new', feminine singular accusative
+\arg \b vm-new-e	'new', feminine plural accusative
+\arg \b vm-new-ych	'new', feminine plural genitive
+\arg \b vm-old-a	'old', feminine singular accusative
+\arg \b vm-old-e	'old', feminine plural accusative
+\arg \b vm-old-ych	'old', feminine plural genitive
+\arg \b digits/1-a	'one', not always same as 'digits/1'
+\arg \b digits/2-ie	'two', not always same as 'digits/2'
 
 Swedish uses:
 \arg \b vm-nytt		singular of 'new'
@@ -467,7 +480,9 @@
 	} else if (!strcasecmp(var,"sendvoicemail")){
 		ast_set2_flag(vmu, ast_true(value), VM_SVMAIL);	
 	} else if (!strcasecmp(var, "review")){
-		ast_set2_flag(vmu, ast_true(value), VM_REVIEW);	
+		ast_set2_flag(vmu, ast_true(value), VM_REVIEW);
+	} else if (!strcasecmp(var, "tempgreetwarn")){
+		ast_set2_flag(vmu, ast_true(value), VM_TEMPGREETWARN);	
 	} else if (!strcasecmp(var, "operator")){
 		ast_set2_flag(vmu, ast_true(value), VM_OPERATOR);	
 	} else if (!strcasecmp(var, "envelope")){
@@ -3686,10 +3701,12 @@
 #endif
 	if (the_zone)
 		res = ast_say_date_with_format(chan, t, AST_DIGIT_ANY, chan->language, the_zone->msg_format, the_zone->timezone);
-       else if(!strcasecmp(chan->language,"se"))       /* SWEDISH syntax */
-               res = ast_say_date_with_format(chan, t, AST_DIGIT_ANY, chan->language, "'vm-received' dB 'digits/at' k 'and' M", NULL);
-       else if(!strcasecmp(chan->language,"no"))       /* NORWEGIAN syntax */
-               res = ast_say_date_with_format(chan, t, AST_DIGIT_ANY, chan->language, "'vm-received' Q 'digits/at' HM", NULL);
+	else if(!strcasecmp(chan->language,"pl"))	/* POLISH syntax */
+		res = ast_say_date_with_format(chan, t, AST_DIGIT_ANY, chan->language, "'vm-received' Q HM", NULL);
+	else if(!strcasecmp(chan->language,"se"))       /* SWEDISH syntax */
+		res = ast_say_date_with_format(chan, t, AST_DIGIT_ANY, chan->language, "'vm-received' dB 'digits/at' k 'and' M", NULL);
+	else if(!strcasecmp(chan->language,"no"))       /* NORWEGIAN syntax */
+		res = ast_say_date_with_format(chan, t, AST_DIGIT_ANY, chan->language, "'vm-received' Q 'digits/at' HM", NULL);
 	else if(!strcasecmp(chan->language,"de"))	/* GERMAN syntax */
 		res = ast_say_date_with_format(chan, t, AST_DIGIT_ANY, chan->language, "'vm-received' Q 'digits/at' HM", NULL);
 	else if (!strcasecmp(chan->language,"nl"))	/* DUTCH syntax */
@@ -3786,9 +3803,37 @@
 
 	ast_log(LOG_DEBUG, "VM-Duration: duration is: %d seconds converted to: %d minutes\n", durations, durationm);
 
-	if((!res)&&(durationm>=minduration)) {
-		res = ast_say_number(chan, durationm, AST_DIGIT_ANY, chan->language, (char *) NULL);
-		res = wait_file2(chan, vms, "vm-minutes");
+	if ((!res) && (durationm >= minduration)) {
+		res = wait_file2(chan, vms, "vm-duration");
+
+		/* POLISH syntax */
+		if (!strcasecmp(chan->language, "pl")) {
+			div_t num = div(durationm, 10);
+
+			if (durationm == 1) {
+				res = ast_play_and_wait(chan, "digits/1z");
+				res = res ? res : ast_play_and_wait(chan, "vm-minute-ta");
+			} else if (num.rem > 1 && num.rem < 5 && num.quot != 1) {
+				if (num.rem == 2) {
+					if (!num.quot) {
+						res = ast_play_and_wait(chan, "digits/2-ie");
+					} else {
+						res = say_and_wait(chan, durationm - 2 , chan->language);
+						res = res ? res : ast_play_and_wait(chan, "digits/2-ie");
+					}
+				} else {
+					res = say_and_wait(chan, durationm, chan->language);
+				}
+				res = res ? res : ast_play_and_wait(chan, "vm-minute-ty");
+			} else {
+				res = say_and_wait(chan, durationm, chan->language);
+				res = res ? res : ast_play_and_wait(chan, "vm-minute-t");
+			}
+		/* DEFAULT syntax */
+		} else {
+			res = ast_say_number(chan, durationm, AST_DIGIT_ANY, chan->language, NULL);
+			res = wait_file2(chan, vms, "vm-minutes");
+		}
 	}
 	return res;
 }
@@ -3808,21 +3853,45 @@
 	else if (vms->curmsg == vms->lastmsg)
 		res = wait_file2(chan, vms, "vm-last");		/* "last" */
 	if (!res) {
-               if (!strcasecmp(chan->language, "se")) {             /* SWEDISH syntax */
-                       res = wait_file2(chan, vms, "vm-meddelandet");  /* "message" */
-               }
-               else {
-                       res = wait_file2(chan, vms, "vm-message");      /* "message" */
-               }
-		if (vms->curmsg && (vms->curmsg != vms->lastmsg)) {
+		/* POLISH syntax */
+		if (!strcasecmp(chan->language, "pl")) { 
+			if (vms->curmsg && (vms->curmsg != vms->lastmsg)) {
+				int ten, one;
+				char nextmsg[256];
+				ten = (vms->curmsg + 1) / 10;
+				one = (vms->curmsg + 1) % 10;
+				
+				if (vms->curmsg < 20) {
+					snprintf(nextmsg, sizeof(nextmsg), "digits/n-%d", vms->curmsg + 1);
+					res = wait_file2(chan, vms, nextmsg);
+				} else {
+					snprintf(nextmsg, sizeof(nextmsg), "digits/n-%d", ten * 10);
+					res = wait_file2(chan, vms, nextmsg);
+					if (one > 0) {
+						if (!res) {
+							snprintf(nextmsg, sizeof(nextmsg), "digits/n-%d", one);
+							res = wait_file2(chan, vms, nextmsg);
+						}
+					}
+				}
+			}
 			if (!res)
-				res = ast_say_number(chan, vms->curmsg + 1, AST_DIGIT_ANY, chan->language, (char *) NULL);
+				res = wait_file2(chan, vms, "vm-message");
+		} else {
+			if (!strcasecmp(chan->language, "se")) /* SWEDISH syntax */
+				res = wait_file2(chan, vms, "vm-meddelandet");  /* "message" */
+			else /* DEFAULT syntax */
+				res = wait_file2(chan, vms, "vm-message");
+			if (vms->curmsg && (vms->curmsg != vms->lastmsg)) {
+				if (!res)
+					res = ast_say_number(chan, vms->curmsg + 1, AST_DIGIT_ANY, chan->language, NULL);
+			}
 		}
 	}
 
 	/* Retrieve info from VM attribute file */
 	make_file(vms->fn2, sizeof(vms->fn2), vms->curdir, vms->curmsg);
-	snprintf(filename,sizeof(filename), "%s.txt", vms->fn2);
+	snprintf(filename, sizeof(filename), "%s.txt", vms->fn2);
 	RETRIEVE(vms->curdir, vms->curmsg);
 	msg_cfg = ast_config_load(filename);
 	if (!msg_cfg) {
@@ -3978,14 +4047,26 @@
 
 	if (!strcasecmp(mbox, "vm-INBOX") || !strcasecmp(mbox, "vm-Old")){
 		cmd = ast_play_and_wait(chan, buf); /* "NEA / PALIA" */
-		if (cmd)
-		return cmd;
-		return ast_play_and_wait(chan, "vm-messages"); /* "messages" -> "MYNHMATA" */
+		return cmd ? cmd : ast_play_and_wait(chan, "vm-messages"); /* "messages" -> "MYNHMATA" */
 	} else {
 		cmd = ast_play_and_wait(chan, "vm-messages"); /* "messages" -> "MYNHMATA" */
-	  	if (cmd)
-			return cmd;
-	  	return ast_play_and_wait(chan, mbox); /* friends/family/work... -> "FILWN"/"OIKOGENIAS"/"DOULEIAS"*/
+	  	return cmd ? cmd : ast_play_and_wait(chan, mbox); /* friends/family/work... -> "FILWN"/"OIKOGENIAS"/"DOULEIAS"*/
+	}
+}
+
+static int vm_play_folder_name_pl(struct ast_channel *chan, char *mbox)
+{
+	int cmd;
+
+	if (!strcasecmp(mbox, "vm-INBOX") || !strcasecmp(mbox, "vm-Old")) {
+		if (!strcasecmp(mbox, "vm-INBOX"))
+			cmd = ast_play_and_wait(chan, "vm-new-e");
+		else
+			cmd = ast_play_and_wait(chan, "vm-old-e");
+		return cmd ? cmd : ast_play_and_wait(chan, "vm-messages");
+	} else {
+		cmd = ast_play_and_wait(chan, "vm-messages");
+	  	return cmd ? cmd : ast_play_and_wait(chan, mbox);
 	}
 }
 
@@ -3995,16 +4076,14 @@
 
 	if (!strcasecmp(chan->language, "it") || !strcasecmp(chan->language, "es") || !strcasecmp(chan->language, "fr") || !strcasecmp(chan->language, "pt")) { /* Italian, Spanish, French or Portuguese syntax */
 		cmd = ast_play_and_wait(chan, "vm-messages"); /* "messages */
-		if (cmd)
-			return cmd;
-		return ast_play_and_wait(chan, mbox);
+		return cmd ? cmd : ast_play_and_wait(chan, mbox);
 	} else if (!strcasecmp(chan->language, "gr")){
 		return vm_play_folder_name_gr(chan, mbox);
+	} else if (!strcasecmp(chan->language, "pl")){
+		return vm_play_folder_name_pl(chan, mbox);
 	} else {  /* Default English */
 		cmd = ast_play_and_wait(chan, mbox);
-		if (cmd)
-			return cmd;
-		return ast_play_and_wait(chan, "vm-messages"); /* "messages */
+		return cmd ? cmd : ast_play_and_wait(chan, "vm-messages"); /* "messages */
 	}
 }
 
@@ -4058,10 +4137,11 @@
 }
 	
 /* Default English syntax */
-static int vm_intro_en(struct ast_channel *chan,struct vm_state *vms)
-{
+static int vm_intro_en(struct ast_channel *chan, struct vm_state *vms)
+{
+	int res;
+
 	/* Introduce messages they have */
-	int res;
 	res = ast_play_and_wait(chan, "vm-youhave");
 	if (!res) {
 		if (vms->newmessages) {
@@ -4135,6 +4215,77 @@
 	return res ? -1 : 0;
 }
 
+/* POLISH syntax */
+static int vm_intro_pl(struct ast_channel *chan, struct vm_state *vms)
+{
+	/* Introduce messages they have */
+	int res;
+	div_t num;
+
+	if (!vms->oldmessages && !vms->newmessages) {
+		res = ast_play_and_wait(chan, "vm-no");
+		res = res ? res : ast_play_and_wait(chan, "vm-messages");
+		return res;
+	} else {
+		res = ast_play_and_wait(chan, "vm-youhave");
+	}
+
+	if (vms->newmessages) {
+		num = div(vms->newmessages, 10);
+		if (vms->newmessages == 1) {
+			res = ast_play_and_wait(chan, "digits/1-a");
+			res = res ? res : ast_play_and_wait(chan, "vm-new-a");
+			res = res ? res : ast_play_and_wait(chan, "vm-message");
+		} else if (num.rem > 1 && num.rem < 5 && num.quot != 1) {
+			if (num.rem == 2) {
+				if (!num.quot) {
+					res = ast_play_and_wait(chan, "digits/2-ie");
+				} else {
+					res = say_and_wait(chan, vms->newmessages - 2 , chan->language);
+					res = res ? res : ast_play_and_wait(chan, "digits/2-ie");
+				}
+			} else {
+				res = say_and_wait(chan, vms->newmessages, chan->language);
+			}
+			res = res ? res : ast_play_and_wait(chan, "vm-new-e");
+			res = res ? res : ast_play_and_wait(chan, "vm-messages");
+		} else {
+			res = say_and_wait(chan, vms->newmessages, chan->language);
+			res = res ? res : ast_play_and_wait(chan, "vm-new-ych");
+			res = res ? res : ast_play_and_wait(chan, "vm-messages");
+		}
+		if (!res && vms->oldmessages)
+			res = ast_play_and_wait(chan, "vm-and");
+	}
+	if (!res && vms->oldmessages) {
+		num = div(vms->oldmessages, 10);
+		if (vms->oldmessages == 1) {
+			res = ast_play_and_wait(chan, "digits/1-a");
+			res = res ? res : ast_play_and_wait(chan, "vm-old-a");
+			res = res ? res : ast_play_and_wait(chan, "vm-message");
+		} else if (num.rem > 1 && num.rem < 5 && num.quot != 1) {
+			if (num.rem == 2) {
+				if (!num.quot) {
+					res = ast_play_and_wait(chan, "digits/2-ie");
+				} else {
+					res = say_and_wait(chan, vms->oldmessages - 2 , chan->language);
+					res = res ? res : ast_play_and_wait(chan, "digits/2-ie");
+				}
+			} else {
+				res = say_and_wait(chan, vms->oldmessages, chan->language);
+			}
+			res = res ? res : ast_play_and_wait(chan, "vm-old-e");
+			res = res ? res : ast_play_and_wait(chan, "vm-messages");
+		} else {
+			res = say_and_wait(chan, vms->oldmessages, chan->language);
+			res = res ? res : ast_play_and_wait(chan, "vm-old-ych");
+			res = res ? res : ast_play_and_wait(chan, "vm-messages");
+		}
+	}
+
+	return res;
+}
+
 /* SWEDISH syntax */
 static int vm_intro_se(struct ast_channel *chan, struct vm_state *vms)
 {
@@ -4616,8 +4767,17 @@
 }
 
 
-static int vm_intro(struct ast_channel *chan,struct vm_state *vms)
-{
+static int vm_intro(struct ast_channel *chan, struct ast_vm_user *vmu, struct vm_state *vms)
+{
+	char prefile[256];
+	
+	/* Notify the user that the temp greeting is set and give them the option to remove it */
+	snprintf(prefile, sizeof(prefile), "%s%s/%s/temp", VM_SPOOL_DIR, vmu->context, vms->username);
+	if (ast_test_flag(vmu, VM_TEMPGREETWARN)) {
+		if (ast_fileexists(prefile, NULL, NULL) > 0)
+			ast_play_and_wait(chan, "vm-tempgreetactive");
+	}
+
 	/* Play voicemail intro - syntax is different for different languages */
 	if (!strcasecmp(chan->language, "de")) {	/* GERMAN syntax */
 		return vm_intro_de(chan, vms);
@@ -4635,6 +4795,8 @@
 		return vm_intro_cz(chan, vms);
 	} else if (!strcasecmp(chan->language, "gr")) {	/* GREEK syntax */
 		return vm_intro_gr(chan, vms);
+	} else if (!strcasecmp(chan->language, "pl")) {	/* POLISH syntax */
+		return vm_intro_pl(chan, vms);
 	} else if (!strcasecmp(chan->language, "se")) {	/* SWEDISH syntax */
 		return vm_intro_se(chan, vms);
 	} else if (!strcasecmp(chan->language, "no")) {	/* NORWEGIAN syntax */
@@ -5343,7 +5505,7 @@
 	if (play_auto) {
 		cmd = '1';
 	} else {
-		cmd = vm_intro(chan, &vms);
+		cmd = vm_intro(chan, vmu, &vms);
 	}
 
 	vms.repeats = 0;
@@ -5998,6 +6160,7 @@
 	char *send_voicemail;
 	char *astcallop;
 	char *astreview;
+	char *asttempgreetwarn;
 	char *astskipcmd;
 	char *asthearenv;
 	char *astsaydurationinfo;
@@ -6208,6 +6371,15 @@
 			astreview = "no";
 		}
 		ast_set2_flag((&globalflags), ast_true(astreview), VM_REVIEW);	
+
+		/*Temperary greeting reminder */
+		if (!(asttempgreetwarn = ast_variable_retrieve(cfg, "general", "tempgreetwarn"))) {
+			ast_log(LOG_DEBUG, "VM Temperary Greeting Reminder Option disabled globally\n");
+			asttempgreetwarn = "no";
+		} else {
+			ast_log(LOG_DEBUG, "VM Temperary Greeting Reminder Option enabled globally\n");
+		}
+		ast_set2_flag((&globalflags), ast_true(asttempgreetwarn), VM_TEMPGREETWARN);
 
 		if (!(astcallop = ast_variable_retrieve(cfg, "general", "operator"))){
 			ast_log(LOG_DEBUG,"VM Operator break disabled globally\n");

Modified: team/oej/ami_ssl/apps/app_while.c
URL: http://svn.digium.com/view/asterisk/team/oej/ami_ssl/apps/app_while.c?rev=25414&r1=25413&r2=25414&view=diff
==============================================================================
--- team/oej/ami_ssl/apps/app_while.c (original)
+++ team/oej/ami_ssl/apps/app_while.c Mon May  8 05:48:44 2006
@@ -18,7 +18,7 @@
 
 /*! \file
  *
- * \brief While Loop and ExecIf Implementations
+ * \brief While Loop Implementation
  *
  * \author Anthony Minessale <anthmct at yahoo.com>
  * 
@@ -47,14 +47,6 @@
 #define ALL_DONE(u,ret) {LOCAL_USER_REMOVE(u); return ret;}
 
 
-static char *exec_app = "ExecIf";
-static char *exec_desc = 
-"Usage:  ExecIF (<expr>|<app>|<data>)\n"
-"If <expr> is true, execute and return the result of <app>(<data>).\n"
-"If <expr> is true, but <app> is not found, then the application\n"
-"will return a non-zero value.\n";
-static char *exec_synopsis = "Conditional exec";
-
 static char *start_app = "While";
 static char *start_desc = 
 "Usage:  While(<expr>)\n"
@@ -86,46 +78,6 @@
 static char *tdesc = "While Loops and Conditional Execution";
 
 LOCAL_USER_DECL;
-
-static int execif_exec(struct ast_channel *chan, void *data) {
-	int res=0;
-	struct localuser *u;
-	char *myapp = NULL;
-	char *mydata = NULL;
-	char *expr = NULL;
-	struct ast_app *app = NULL;
-
-	LOCAL_USER_ADD(u);
-
-	if (!(expr = ast_strdupa(data))) {
-		LOCAL_USER_REMOVE(u);
-		return -1;
-	}
-
-	if ((myapp = strchr(expr,'|'))) {
-		*myapp = '\0';
-		myapp++;
-		if ((mydata = strchr(myapp,'|'))) {
-			*mydata = '\0';
-			mydata++;
-		} else
-			mydata = "";
-
-		if (pbx_checkcondition(expr)) { 
-			if ((app = pbx_findapp(myapp))) {
-				res = pbx_exec(chan, app, mydata);
-			} else {
-				ast_log(LOG_WARNING, "Count not find application! (%s)\n", myapp);
-				res = -1;
-			}
-		}
-	} else {
-		ast_log(LOG_ERROR,"Invalid Syntax.\n");
-		res = -1;
-	}
-		
-	ALL_DONE(u,res);
-}
 
 #define VAR_SIZE 64
 
@@ -364,7 +316,6 @@
 	int res;
 	
 	res = ast_unregister_application(start_app);
-	res |= ast_unregister_application(exec_app);
 	res |= ast_unregister_application(stop_app);
 	res |= ast_unregister_application(exit_app);
 	res |= ast_unregister_application(continue_app);
@@ -379,7 +330,6 @@
 	int res;
 
 	res = ast_register_application(start_app, while_start_exec, start_synopsis, start_desc);
-	res |= ast_register_application(exec_app, execif_exec, exec_synopsis, exec_desc);
 	res |= ast_register_application(stop_app, while_end_exec, stop_synopsis, stop_desc);
 	res |= ast_register_application(exit_app, while_exit_exec, exit_synopsis, exit_desc);
 	res |= ast_register_application(continue_app, while_continue_exec, continue_synopsis, continue_desc);

Modified: team/oej/ami_ssl/asterisk.c
URL: http://svn.digium.com/view/asterisk/team/oej/ami_ssl/asterisk.c?rev=25414&r1=25413&r2=25414&view=diff
==============================================================================
--- team/oej/ami_ssl/asterisk.c (original)
+++ team/oej/ami_ssl/asterisk.c Mon May  8 05:48:44 2006
@@ -2529,6 +2529,7 @@
 			fclose(f);
 		} else
 			ast_log(LOG_WARNING, "Unable to open pid file '%s': %s\n", ast_config_AST_PID, strerror(errno));
+		ast_mainpid = getpid();
 	}
 
 	/* Test recursive mutex locking. */

Modified: team/oej/ami_ssl/build_tools/make_version
URL: http://svn.digium.com/view/asterisk/team/oej/ami_ssl/build_tools/make_version?rev=25414&r1=25413&r2=25414&view=diff
==============================================================================
--- team/oej/ami_ssl/build_tools/make_version (original)
+++ team/oej/ami_ssl/build_tools/make_version Mon May  8 05:48:44 2006
@@ -3,7 +3,7 @@
 if [ -f ${1}/.version ]; then
 	cat ${1}.version
 elif [ -f ${1}/.svnrevision ]; then
-	echo SVN-`cat ${1}/.svnbranch`-r`cat ${1}.svnrevision`
+	echo SVN-`cat ${1}/.svnbranch`-r`cat ${1}/.svnrevision`
 elif [ -d .svn ]; then
     PARTS=`LANG=C svn info ${1} | grep URL | awk '{print $2;}' | sed -e s:^.*/svn/asterisk/:: | sed -e 's:/: :g'`
     BRANCH=0

Modified: team/oej/ami_ssl/build_tools/menuselect.c
URL: http://svn.digium.com/view/asterisk/team/oej/ami_ssl/build_tools/menuselect.c?rev=25414&r1=25413&r2=25414&view=diff
==============================================================================
--- team/oej/ami_ssl/build_tools/menuselect.c (original)
+++ team/oej/ami_ssl/build_tools/menuselect.c Mon May  8 05:48:44 2006
@@ -72,46 +72,34 @@
 };
 
 /*! The list of trees from makeopts.xml files */
-AST_LIST_HEAD_NOLOCK_STATIC(trees, tree);
-
-const char * const makeopts_files[] = {
+static AST_LIST_HEAD_NOLOCK_STATIC(trees, tree);
+
+static const char * const makeopts_files[] = {
 	"makeopts.xml"
 };
 
-char *output_makeopts = OUTPUT_MAKEOPTS_DEFAULT;
+static char *output_makeopts = OUTPUT_MAKEOPTS_DEFAULT;
 
 /*! This is set to 1 if menuselect.makeopts pre-existed the execution of this app */
-int existing_config = 0;
+static int existing_config = 0;
 
 /*! This is set when the --check-deps argument is provided. */
-int check_deps = 0;
+static int check_deps = 0;
 
 /*! Force a clean of the source tree */
-int force_clean = 0;
-
-int add_category(struct category *cat);
-int add_member(struct member *mem, struct category *cat);
-int parse_makeopts_xml(const char *makeopts_xml);
-int process_deps(void);
-int build_member_list(void);
-void mark_as_present(const char *member, const char *category);
-int parse_existing_config(const char *infile);
-int generate_makeopts_file(void);
-void free_member_list(void);
-void free_trees(void);
-
-/*! \brief a wrapper for calloc() that generates an error message if the allocation fails */

[... 2039 lines stripped ...]


More information about the asterisk-commits mailing list