[asterisk-commits] russell: branch russell/events r81521 - in /team/russell/events: ./ apps/ cha...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Sep 5 10:04:47 CDT 2007


Author: russell
Date: Wed Sep  5 10:04:47 2007
New Revision: 81521

URL: http://svn.digium.com/view/asterisk?view=rev&rev=81521
Log:
resolve conflict, reset automerge

Added:
    team/russell/events/apps/app_readexten.c
      - copied unchanged from r81519, trunk/apps/app_readexten.c
Removed:
    team/russell/events/configs/modem.conf.sample
Modified:
    team/russell/events/   (props changed)
    team/russell/events/CHANGES
    team/russell/events/apps/app_dial.c
    team/russell/events/apps/app_directory.c
    team/russell/events/apps/app_followme.c
    team/russell/events/apps/app_meetme.c
    team/russell/events/apps/app_minivm.c
    team/russell/events/apps/app_parkandannounce.c
    team/russell/events/apps/app_queue.c
    team/russell/events/apps/app_voicemail.c
    team/russell/events/channels/chan_gtalk.c
    team/russell/events/channels/chan_iax2.c
    team/russell/events/channels/chan_misdn.c
    team/russell/events/channels/chan_sip.c
    team/russell/events/channels/chan_skinny.c
    team/russell/events/channels/chan_zap.c
    team/russell/events/channels/h323/ast_h323.cxx
    team/russell/events/channels/iax2-parser.c
    team/russell/events/channels/misdn/isdn_lib.c
    team/russell/events/codecs/codec_zap.c
    team/russell/events/configs/enum.conf.sample
    team/russell/events/configs/extensions.ael.sample
    team/russell/events/configs/followme.conf.sample
    team/russell/events/configs/queues.conf.sample
    team/russell/events/funcs/func_logic.c
    team/russell/events/include/asterisk/astobj2.h
    team/russell/events/include/asterisk/config.h
    team/russell/events/include/asterisk/event.h
    team/russell/events/include/asterisk/event_defs.h
    team/russell/events/include/asterisk/logger.h
    team/russell/events/include/asterisk/utils.h
    team/russell/events/main/Makefile
    team/russell/events/main/astobj2.c
    team/russell/events/main/cdr.c
    team/russell/events/main/channel.c
    team/russell/events/main/config.c
    team/russell/events/main/dns.c
    team/russell/events/main/editline/configure
    team/russell/events/main/editline/configure.in
    team/russell/events/main/editline/sys.h
    team/russell/events/main/event.c
    team/russell/events/main/http.c
    team/russell/events/main/logger.c
    team/russell/events/main/manager.c
    team/russell/events/main/pbx.c
    team/russell/events/main/sched.c
    team/russell/events/pbx/pbx_spool.c
    team/russell/events/res/res_config_odbc.c
    team/russell/events/res/res_config_pgsql.c
    team/russell/events/res/res_config_sqlite.c
    team/russell/events/res/res_features.c
    team/russell/events/res/res_speech.c
    team/russell/events/utils/extconf.c

Propchange: team/russell/events/
------------------------------------------------------------------------------
    automerge = *

Propchange: team/russell/events/
------------------------------------------------------------------------------
Binary property 'branch-1.4-blocked' - no diff available.

Propchange: team/russell/events/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Propchange: team/russell/events/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Wed Sep  5 10:04:47 2007
@@ -1,1 +1,1 @@
-/trunk:1-81316
+/trunk:1-81520

Modified: team/russell/events/CHANGES
URL: http://svn.digium.com/view/asterisk/team/russell/events/CHANGES?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/CHANGES (original)
+++ team/russell/events/CHANGES Wed Sep  5 10:04:47 2007
@@ -272,3 +272,5 @@
   * The device state functionality in the Local channel driver has been updated
      to indicate INUSE or NOT_INUSE when a Local channel is being used as opposed
      to just UNKNOWN if the extension exists.
+  * When originating a call using AMI or pbx_spool that fails the reason for failure
+     will now be available in the failed extension using the REASON dialplan variable.

Modified: team/russell/events/apps/app_dial.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/apps/app_dial.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/apps/app_dial.c (original)
+++ team/russell/events/apps/app_dial.c Wed Sep  5 10:04:47 2007
@@ -293,13 +293,15 @@
 	AST_APP_OPTION('i', OPT_IGNORE_FORWARDING),
 	AST_APP_OPTION('k', OPT_CALLEE_PARK),
 	AST_APP_OPTION('K', OPT_CALLER_PARK),
+	AST_APP_OPTION('k', OPT_CALLEE_PARK),
+	AST_APP_OPTION('K', OPT_CALLER_PARK),
 	AST_APP_OPTION_ARG('L', OPT_DURATION_LIMIT, OPT_ARG_DURATION_LIMIT),
 	AST_APP_OPTION_ARG('m', OPT_MUSICBACK, OPT_ARG_MUSICBACK),
 	AST_APP_OPTION_ARG('M', OPT_CALLEE_MACRO, OPT_ARG_CALLEE_MACRO),
 	AST_APP_OPTION('n', OPT_SCREEN_NOINTRO),
 	AST_APP_OPTION('N', OPT_SCREEN_NOCLID),
+	AST_APP_OPTION('o', OPT_ORIGINAL_CLID),
 	AST_APP_OPTION_ARG('O', OPT_OPERMODE,OPT_ARG_OPERMODE),
-	AST_APP_OPTION('o', OPT_ORIGINAL_CLID),
 	AST_APP_OPTION('p', OPT_SCREENING),
 	AST_APP_OPTION_ARG('P', OPT_PRIVACY, OPT_ARG_PRIVACY),
 	AST_APP_OPTION('r', OPT_RINGBACK),

Modified: team/russell/events/apps/app_directory.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/apps/app_directory.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/apps/app_directory.c (original)
+++ team/russell/events/apps/app_directory.c Wed Sep  5 10:04:47 2007
@@ -386,7 +386,7 @@
 	/* Does the context exist within the config file? If not, make one */
 	cat = ast_category_get(cfg, context);
 	if (!cat) {
-		cat = ast_category_new(context);
+		cat = ast_category_new(context, "", 99999);
 		if (!cat) {
 			ast_log(LOG_WARNING, "Out of memory\n");
 			ast_config_destroy(cfg);
@@ -402,7 +402,7 @@
 		snprintf(tmp, sizeof(tmp), "no-password,%s,hidefromdir=%s",
 			 fullname ? fullname : "",
 			 hidefromdir ? hidefromdir : "no");
-		var = ast_variable_new(mailbox, tmp);
+		var = ast_variable_new(mailbox, tmp, "");
 		if (var)
 			ast_variable_append(cat, var);
 		else

Modified: team/russell/events/apps/app_followme.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/apps/app_followme.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/apps/app_followme.c (original)
+++ team/russell/events/apps/app_followme.c Wed Sep  5 10:04:47 2007
@@ -963,12 +963,8 @@
 		if (ast_play_and_record(chan, "vm-rec-name", namerecloc, 5, "sln", &duration, 128, 0, NULL) < 0)
 			goto outrun;
 	
-	/* The following call looks like we're going to playback the file, but we're actually	*/
-	/* just checking to see if we *can* play it. 						*/
-	if (ast_streamfile(chan, namerecloc, chan->language))
+	if (!ast_fileexists(namerecloc, NULL, chan->language))
 		ast_copy_string(namerecloc, "", sizeof(namerecloc));					
-	else
-		ast_stopstream(chan);
 	
 	if (ast_streamfile(chan, targs.plsholdprompt, chan->language))
 		goto outrun;

Modified: team/russell/events/apps/app_meetme.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/apps/app_meetme.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/apps/app_meetme.c (original)
+++ team/russell/events/apps/app_meetme.c Wed Sep  5 10:04:47 2007
@@ -2420,7 +2420,7 @@
 	ast_log(LOG_NOTICE,"The requested confno is '%s'?\n", confno);
 	AST_LIST_LOCK(&confs);
 	AST_LIST_TRAVERSE(&confs, cnf, list) {
-		ast_log(LOG_NOTICE,"Does conf %s match %s?\n", confno, cnf->confno);
+		ast_debug(3,"Does conf %s match %s?\n", confno, cnf->confno);
 		if (!strcmp(confno, cnf->confno)) 
 			break;
 	}
@@ -2458,7 +2458,7 @@
 					return NULL;
 				
 				AST_STANDARD_APP_ARGS(args, parse);
-				ast_log(LOG_NOTICE,"Will conf %s match %s?\n", confno, args.confno);
+				ast_debug(3,"Will conf %s match %s?\n", confno, args.confno);
 				if (!strcasecmp(args.confno, confno)) {
 					/* Bingo it's a valid conference */
 					cnf = build_conf(args.confno,

Modified: team/russell/events/apps/app_minivm.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/apps/app_minivm.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/apps/app_minivm.c (original)
+++ team/russell/events/apps/app_minivm.c Wed Sep  5 10:04:47 2007
@@ -2141,7 +2141,7 @@
 			if (varname && (varval = strchr(varname, '='))) {
 				*varval = '\0';
 				varval++;
-				if ((tmpvar = ast_variable_new(varname, varval))) {
+				if ((tmpvar = ast_variable_new(varname, varval, ""))) {
 					tmpvar->next = vmu->chanvars;
 					vmu->chanvars = tmpvar;
 				}
@@ -2659,9 +2659,9 @@
 	ast_cli(fd, "* Mini-Voicemail statistics\n");
 	ast_cli(fd, "  -------------------------\n");
 	ast_cli(fd, "\n");
-	ast_cli(fd, "  Voicemail accounts:                  %-5.5d\n", global_stats.voicemailaccounts);
-	ast_cli(fd, "  Templates:                           %-5.5d\n", global_stats.templates);
-	ast_cli(fd, "  Timezones:                           %-5.5d\n", global_stats.timezones);
+	ast_cli(fd, "  Voicemail accounts:                  %5d\n", global_stats.voicemailaccounts);
+	ast_cli(fd, "  Templates:                           %5d\n", global_stats.templates);
+	ast_cli(fd, "  Timezones:                           %5d\n", global_stats.timezones);
 	if (global_stats.receivedmessages == 0) {
 		ast_cli(fd, "  Received messages since last reset:  <none>\n");
 	} else {

Modified: team/russell/events/apps/app_parkandannounce.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/apps/app_parkandannounce.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/apps/app_parkandannounce.c (original)
+++ team/russell/events/apps/app_parkandannounce.c Wed Sep  5 10:04:47 2007
@@ -130,7 +130,7 @@
 
 	snprintf(buf, sizeof(buf), "%d", lot);
 	oh.parent_channel = chan;
-	oh.vars = ast_variable_new("_PARKEDAT", buf);
+	oh.vars = ast_variable_new("_PARKEDAT", buf, "");
 	dchan = __ast_request_and_dial(dialtech, AST_FORMAT_SLINEAR, args.dial, 30000, &outstate, chan->cid.cid_num, chan->cid.cid_name, &oh);
 
 	if (dchan) {

Modified: team/russell/events/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/apps/app_queue.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/apps/app_queue.c (original)
+++ team/russell/events/apps/app_queue.c Wed Sep  5 10:04:47 2007
@@ -318,6 +318,7 @@
 	int penalty;                        /*!< Are we a last resort? */
 	int calls;                          /*!< Number of calls serviced by this member */
 	int dynamic;                        /*!< Are we dynamically added? */
+	int realtime;                       /*!< Is this member realtime? */
 	int status;                         /*!< Status of queue member */
 	int paused;                         /*!< Are we paused (not accepting calls)? */
 	time_t lastcall;                    /*!< When last successful call was hungup */
@@ -600,7 +601,7 @@
 					"LastCall: %d\r\n"
 					"Status: %d\r\n"
 					"Paused: %d\r\n",
-					q->name, cur->interface, cur->membername, cur->dynamic ? "dynamic" : "static",
+					q->name, cur->interface, cur->membername, cur->dynamic ? "dynamic" : cur->realtime ? "realtime" : "static",
 					cur->penalty, cur->calls, (int)cur->lastcall, cur->status, cur->paused);
 			}
 		}
@@ -1049,6 +1050,7 @@
 	if (!m) {
 		if ((m = create_queue_member(interface, membername, penalty, paused))) {
 			m->dead = 0;
+			m->realtime = 1;
 			add_to_interfaces(interface);
 			if (prev_m) {
 				prev_m->next = m;
@@ -1173,10 +1175,10 @@
 		queue_set_param(q, tmp_name, v->value, -1, 0);
 	}
 
-	/* Temporarily set non-dynamic members dead so we can detect deleted ones. 
+	/* Temporarily set realtime members dead so we can detect deleted ones. 
 	 * Also set the membercount correctly for realtime*/
 	for (m = q->members; m; m = m->next, q->membercount++) {
-		if (!m->dynamic)
+		if (m->realtime)
 			m->dead = 1;
 	}
 
@@ -1263,6 +1265,25 @@
 	return q;
 }
 
+static int update_realtime_member_field(struct member *mem, const char *queue_name, const char *field, const char *value)
+{
+	struct ast_variable *var;
+	int ret = -1;
+
+	if(!(var = ast_load_realtime("queue_members", "interface", mem->interface, "queue_name", queue_name, NULL))) 
+		return ret;
+	while (var) {
+		if(!strcmp(var->name, "uniqueid"))
+			break;
+		var = var->next;
+	}
+	if(var && !ast_strlen_zero(var->value)) {
+		if ((ast_update_realtime("queue_members", "uniqueid", var->value, field, value, NULL)) > -1)
+			ret = 0;
+	}
+	return ret;
+}
+
 static void update_realtime_members(struct call_queue *q)
 {
 	struct ast_config *member_config = NULL;
@@ -1278,9 +1299,9 @@
 
 	ast_mutex_lock(&q->lock);
 	
-	/* Temporarily set non-dynamic members dead so we can detect deleted ones.*/ 
+	/* Temporarily set realtime  members dead so we can detect deleted ones.*/ 
 	for (m = q->members; m; m = m->next) {
-		if (!m->dynamic)
+		if (m->realtime)
 			m->dead = 1;
 	}
 
@@ -1636,7 +1657,7 @@
 				"LastCall: %d\r\n"
 				"Status: %d\r\n"
 				"Paused: %d\r\n",
-				q->name, cur->interface, cur->membername, cur->dynamic ? "dynamic" : "static",
+				q->name, cur->interface, cur->membername, cur->dynamic ? "dynamic" : cur->realtime ? "realtime": "static",
 				cur->penalty, cur->calls, (int)cur->lastcall, cur->status, cur->paused);
 		}
 	}
@@ -2637,8 +2658,7 @@
 					res2 |= ast_safe_sleep(peer, qe->parent->memberdelay * 1000);
 				}
 				if (!res2 && announce) {
-					if (play_file(peer, announce))
-						ast_log(LOG_WARNING, "Announcement file '%s' is unavailable, continuing anyway...\n", announce);
+					play_file(peer, announce);
 				}
 				if (!res2 && qe->parent->reportholdtime) {
 					if (!play_file(peer, qe->parent->sound_reporthold)) {
@@ -2804,8 +2824,8 @@
 		/* if setinterfacevar is defined, make member variables available to the channel */
 		/* use  pbx_builtin_setvar to set a load of variables with one call */
 		if (qe->parent->setinterfacevar) {
-			snprintf(interfacevar,sizeof(interfacevar), "MEMBERINTERFACE=%s|MEMBERNAME=%s|MEMBERCALLS=%d|MEMBERLASTCALL=%ld|MEMBERPENALTY=%d|MEMBERDYNAMIC=%d",
-				member->interface, member->membername, member->calls, (long)member->lastcall, member->penalty, member->dynamic);
+			snprintf(interfacevar,sizeof(interfacevar), "MEMBERINTERFACE=%s|MEMBERNAME=%s|MEMBERCALLS=%d|MEMBERLASTCALL=%ld|MEMBERPENALTY=%d|MEMBERDYNAMIC=%d|MEMBERREALTIME=%d",
+				member->interface, member->membername, member->calls, (long)member->lastcall, member->penalty, member->dynamic, member->realtime);
 		 	pbx_builtin_setvar(qe->chan, interfacevar);
 		}
 		
@@ -3171,6 +3191,9 @@
 				if (queue_persistent_members)
 					dump_queue_members(q);
 
+				if(mem->realtime)
+					update_realtime_member_field(mem, queuename, "paused", paused ? "1" : "0");
+
 				ast_queue_log(q->name, "NONE", mem->membername, (paused ? "PAUSE" : "UNPAUSE"), "%s", "");
 
 				manager_event(EVENT_FLAG_AGENT, "QueueMemberPaused",
@@ -3980,8 +4003,10 @@
 	AST_LIST_LOCK(&queues);
 	use_weight=0;
 	/* Mark all queues as dead for the moment */
-	AST_LIST_TRAVERSE(&queues, q, list)
-		q->dead = 1;
+	AST_LIST_TRAVERSE(&queues, q, list) {
+		if(!q->realtime)
+			q->dead = 1;
+	}
 
 	/* Chug through config file */
 	cat = NULL;
@@ -4188,8 +4213,9 @@
 				ast_str_set(&out, 0, "      %s", mem->interface);
 				if (mem->penalty)
 					ast_str_append(&out, 0, " with penalty %d", mem->penalty);
-				ast_str_append(&out, 0, "%s%s (%s)",
+				ast_str_append(&out, 0, "%s%s%s (%s)",
 					mem->dynamic ? " (dynamic)" : "",
+					mem->realtime ? " (realtime)" : "",
 					mem->paused ? " (paused)" : "",
 					devstate2str(mem->status));
 				if (mem->calls)

Modified: team/russell/events/apps/app_voicemail.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/apps/app_voicemail.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/apps/app_voicemail.c (original)
+++ team/russell/events/apps/app_voicemail.c Wed Sep  5 10:04:47 2007
@@ -960,7 +960,7 @@
 			if (!strcasecmp(category, vmu->mailbox)) {
 				if (!(tmp = ast_variable_retrieve(cfg, category, "vmsecret"))) {
 					ast_debug(3, "looks like we need to make vmsecret!\n");
-					var = ast_variable_new("vmsecret", newpassword);
+					var = ast_variable_new("vmsecret", newpassword, "");
 				} 
 				new = alloca(strlen(newpassword)+1);
 				sprintf(new, "%s", newpassword);

Modified: team/russell/events/channels/chan_gtalk.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/channels/chan_gtalk.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/channels/chan_gtalk.c (original)
+++ team/russell/events/channels/chan_gtalk.c Wed Sep  5 10:04:47 2007
@@ -1568,13 +1568,54 @@
 /*! \brief CLI command "gtalk show channels" */
 static int gtalk_show_channels(int fd, int argc, char **argv)
 {
+#define FORMAT  "%-30.30s  %-30.30s  %-15.15s  %-5.5s %-5.5s \n"
+	struct gtalk_pvt *p;
+	struct ast_channel *chan;
+	int numchans = 0;
+	char them[100];
+	char *jid = NULL;
+	char *resource = NULL;
+
 	if (argc != 3)
 		return RESULT_SHOWUSAGE;
+
 	ast_mutex_lock(&gtalklock);
-//	if (!gtalk_list->p)
-		ast_cli(fd, "No gtalk channels in use\n");
+	ast_cli(fd, FORMAT, "Channel", "Jabber ID", "Resource", "Read", "Write");
+	ASTOBJ_CONTAINER_TRAVERSE(&gtalk_list, 1, {
+		ASTOBJ_WRLOCK(iterator);
+		p = iterator->p;
+		while(p) {
+			chan = p->owner;
+			ast_copy_string(them, p->them, sizeof(them));
+			jid = them;
+			resource = strchr(them, '/');
+			if (!resource)
+				resource = "None";
+			else {
+				*resource = '\0';
+				resource ++;
+			}
+			if (chan)
+				ast_cli(fd, FORMAT, 
+					chan->name,
+					jid,
+					resource,
+					ast_getformatname(chan->readformat),
+					ast_getformatname(chan->writeformat)					
+					);
+			else 
+				ast_log(LOG_WARNING, "No available channel\n");
+			numchans ++;
+			p = p->next;
+		}
+		ASTOBJ_UNLOCK(iterator);
+	});
+
 	ast_mutex_unlock(&gtalklock);
+
+	ast_cli(fd, "%d active gtalk channel%s\n", numchans, (numchans != 1) ? "s" : "");
 	return RESULT_SUCCESS;
+#undef FORMAT
 }
 
 /*! \brief CLI command "gtalk show channels" */

Modified: team/russell/events/channels/chan_iax2.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/channels/chan_iax2.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/channels/chan_iax2.c (original)
+++ team/russell/events/channels/chan_iax2.c Wed Sep  5 10:04:47 2007
@@ -670,10 +670,10 @@
 #else
 #define MAX_PEER_BUCKETS 563
 #endif
-static ao2_container *peers;
+static struct ao2_container *peers;
 
 #define MAX_USER_BUCKETS MAX_PEER_BUCKETS
-static ao2_container *users;
+static struct ao2_container *users;
 
 static AST_LIST_HEAD_STATIC(firmwares, iax_firmware);
 
@@ -1302,7 +1302,7 @@
 {
 	struct iax2_peer *peer = NULL;
 	int res = 0;
-	ao2_iterator i;
+	struct ao2_iterator i;
 
 	i = ao2_iterator_init(peers, 0);
 	while ((peer = ao2_iterator_next(&i))) {
@@ -1886,7 +1886,7 @@
 }
 
 
-static void reload_firmware(void)
+static void reload_firmware(int unload)
 {
 	struct iax_firmware *cur = NULL;
 	DIR *fwd;
@@ -1900,20 +1900,22 @@
 		cur->dead = 1;
 
 	/* Now that we have marked them dead... load new ones */
-	snprintf(dir, sizeof(dir), "%s/firmware/iax", (char *)ast_config_AST_DATA_DIR);
-	fwd = opendir(dir);
-	if (fwd) {
-		while((de = readdir(fwd))) {
-			if (de->d_name[0] != '.') {
-				snprintf(fn, sizeof(fn), "%s/%s", dir, de->d_name);
-				if (!try_firmware(fn)) {
-					ast_verb(2, "Loaded firmware '%s'\n", de->d_name);
+	if (!unload) {
+		snprintf(dir, sizeof(dir), "%s/firmware/iax", (char *)ast_config_AST_DATA_DIR);
+		fwd = opendir(dir);
+		if (fwd) {
+			while((de = readdir(fwd))) {
+				if (de->d_name[0] != '.') {
+					snprintf(fn, sizeof(fn), "%s/%s", dir, de->d_name);
+					if (!try_firmware(fn)) {
+						ast_verb(2, "Loaded firmware '%s'\n", de->d_name);
+					}
 				}
 			}
-		}
-		closedir(fwd);
-	} else 
-		ast_log(LOG_WARNING, "Error opening firmware directory '%s': %s\n", dir, strerror(errno));
+			closedir(fwd);
+		} else 
+			ast_log(LOG_WARNING, "Error opening firmware directory '%s': %s\n", dir, strerror(errno));
+	}
 
 	/* Clean up leftovers */
 	AST_LIST_TRAVERSE_SAFE_BEGIN(&firmwares, cur, list) {
@@ -2425,7 +2427,7 @@
 	struct iax2_peer *peer;
 	char *res = NULL;
 	int wordlen = strlen(word);
-	ao2_iterator i;
+	struct ao2_iterator i;
 
 	/* 0 - iax2; 1 - show; 2 - peer; 3 - <peername> */
 	if (pos != 3)
@@ -3688,7 +3690,7 @@
 {
 	struct iax2_peer *peer;
 	int res = 0;
-	ao2_iterator i;
+	struct ao2_iterator i;
 
 	i = ao2_iterator_init(peers, 0);
 	while ((peer = ao2_iterator_next(&i))) {
@@ -3710,7 +3712,6 @@
 	struct ast_channel *tmp;
 	struct chan_iax2_pvt *i;
 	struct ast_variable *v = NULL;
-	struct ast_datastore *variablestore = NULL;
 
 	if (!(i = iaxs[callno])) {
 		ast_log(LOG_WARNING, "No IAX2 pvt found for callno '%d' !\n", callno);
@@ -3759,29 +3760,8 @@
 
 	/* Set inherited variables */
 	if (i->vars) {
-		AST_LIST_HEAD(, ast_var_t) *varlist;
-		varlist = ast_calloc(1, sizeof(*varlist));
-		variablestore = ast_channel_datastore_alloc(&iax2_variable_datastore_info, NULL);
-		if (variablestore && varlist) {
-			variablestore->data = varlist;
-			variablestore->inheritance = DATASTORE_INHERIT_FOREVER;
-			AST_LIST_HEAD_INIT(varlist);
-			for (v = i->vars ; v ; v = v->next) {
-				struct ast_var_t *newvar = ast_var_assign(v->name, v->value);
-				if (!newvar) {
-					ast_log(LOG_ERROR, "Out of memory\n");
-					break;
-				}
-				AST_LIST_INSERT_TAIL(varlist, newvar, entries);
-			}
-			ast_channel_datastore_add(tmp, variablestore);
-		} else {
-			ast_log(LOG_ERROR, "Out of memory\n");
-			if (variablestore)
-				ast_channel_datastore_free(variablestore);
-			if (varlist)
-				ast_free(varlist);
-		}
+		for (v = i->vars ; v ; v = v->next)
+			pbx_builtin_setvar_helper(tmp, v->name, v->value);
 	}
 
 	if (state != AST_STATE_DOWN) {
@@ -4458,7 +4438,7 @@
 	struct iax2_user *user = NULL;
 	char auth[90];
 	char *pstr = "";
-	ao2_iterator i;
+	struct ao2_iterator i;
 
 	switch (argc) {
 	case 5:
@@ -4516,7 +4496,7 @@
 	int online_peers = 0;
 	int offline_peers = 0;
 	int unmonitored_peers = 0;
-	ao2_iterator i;
+	struct ao2_iterator i;
 
 #define FORMAT2 "%-15.15s  %-15.15s %s  %-15.15s  %-8s  %s %-10s%s"
 #define FORMAT "%-15.15s  %-15.15s %s  %-15.15s  %-5d%s  %s %-10s%s"
@@ -4718,7 +4698,7 @@
 
 	/* 0 - iax2; 1 - unregister; 2 - <peername> */
 	if (pos == 2) {
-		ao2_iterator i = ao2_iterator_init(peers, 0);
+		struct ao2_iterator i = ao2_iterator_init(peers, 0);
 		while ((p = ao2_iterator_next(&i))) {
 			if (!strncasecmp(p->name, word, wordlen) && 
 				++which > state && p->expire > 0) {
@@ -5122,7 +5102,7 @@
 	int bestscore = 0;
 	int gotcapability = 0;
 	struct ast_variable *v = NULL, *tmpvar = NULL;
-	ao2_iterator i;
+	struct ao2_iterator i;
 
 	if (!iaxs[callno])
 		return res;
@@ -5247,7 +5227,7 @@
 		/* We found our match (use the first) */
 		/* copy vars */
 		for (v = user->vars ; v ; v = v->next) {
-			if((tmpvar = ast_variable_new(v->name, v->value))) {
+			if((tmpvar = ast_variable_new(v->name, v->value, v->file))) {
 				tmpvar->next = iaxs[callno]->vars; 
 				iaxs[callno]->vars = tmpvar;
 			}
@@ -5713,7 +5693,7 @@
 		/* Normal password authentication */
 		res = authenticate(p->challenge, override, okey, authmethods, &ied, sin, &p->ecx, &p->dcx);
 	} else {
-		ao2_iterator i = ao2_iterator_init(peers, 0);
+		struct ao2_iterator i = ao2_iterator_init(peers, 0);
 		while ((peer = ao2_iterator_next(&i))) {
 			if ((ast_strlen_zero(p->peer) || !strcmp(p->peer, peer->name)) 
 			    /* No peer specified at our end, or this is the peer */
@@ -9539,20 +9519,16 @@
 						ast_sched_del(sched, peer->expire);
 					peer->expire = -1;
 					ast_clear_flag(peer, IAX_DYNAMIC);
-					if (ast_dnsmgr_lookup(v->value, &peer->addr.sin_addr, &peer->dnsmgr)) {
-						ast_string_field_free_pools(peer);
+					if (ast_dnsmgr_lookup(v->value, &peer->addr.sin_addr, &peer->dnsmgr))
 						return peer_unref(peer);
-					}
 					if (!peer->addr.sin_port)
 						peer->addr.sin_port = htons(IAX_DEFAULT_PORTNO);
 				}
 				if (!maskfound)
 					inet_aton("255.255.255.255", &peer->mask);
 			} else if (!strcasecmp(v->name, "defaultip")) {
-				if (ast_get_ip(&peer->defaddr, v->value)) {
-					ast_string_field_free_pools(peer);
+				if (ast_get_ip(&peer->defaddr, v->value))
 					return peer_unref(peer);
-				}
 			} else if (!strcasecmp(v->name, "sourceaddress")) {
 				peer_set_srcaddr(peer, v->value);
 			} else if (!strcasecmp(v->name, "permit") ||
@@ -9763,7 +9739,7 @@
 				if (varname && (varval = strchr(varname,'='))) {
 					*varval = '\0';
 					varval++;
-					if((tmpvar = ast_variable_new(varname, varval))) {
+					if((tmpvar = ast_variable_new(varname, varval, ""))) {
 						tmpvar->next = user->vars; 
 						user->vars = tmpvar;
 					}
@@ -9942,7 +9918,7 @@
 static void prune_users(void)
 {
 	struct iax2_user *user;
-	ao2_iterator i;
+	struct ao2_iterator i;
 
 	i = ao2_iterator_init(users, 0);
 	while ((user = ao2_iterator_next(&i))) {
@@ -9956,7 +9932,7 @@
 static void prune_peers(void)
 {
 	struct iax2_peer *peer;
-	ao2_iterator i;
+	struct ao2_iterator i;
 
 	i = ao2_iterator_init(peers, 0);
 	while ((peer = ao2_iterator_next(&i))) {
@@ -10408,7 +10384,7 @@
 		ao2_callback(peers, 0, iax2_poke_peer_cb, NULL);
 	}
 
-	reload_firmware();
+	reload_firmware(0);
 	iax_provision_reload(1);
 
 	return 0;
@@ -11213,6 +11189,7 @@
 	delete_users();
 	iax_provision_unload();
 	sched_context_destroy(sched);
+	reload_firmware(1);
 
 	for (x = 0; x < IAX_MAX_CALLS; x++)
 		ast_mutex_destroy(&iaxsl[x]);
@@ -11343,7 +11320,7 @@
 	ao2_callback(peers, 0, iax2_poke_peer_cb, NULL);
 
 
-	reload_firmware();
+	reload_firmware(0);
 	iax_provision_reload(0);
 
 	return AST_MODULE_LOAD_SUCCESS;

Modified: team/russell/events/channels/chan_misdn.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/channels/chan_misdn.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/channels/chan_misdn.c (original)
+++ team/russell/events/channels/chan_misdn.c Wed Sep  5 10:04:47 2007
@@ -2546,8 +2546,10 @@
 static struct ast_frame *misdn_read(struct ast_channel *ast)
 {
 	struct chan_list *tmp;
-	int len;
-	
+	fd_set rrfs;
+	struct timeval tv;
+	int len, t;
+
 	if (!ast) {
 		chan_misdn_log(1, 0, "misdn_read called without ast\n");
 		return NULL;
@@ -2562,15 +2564,37 @@
 		return NULL;
 	}
 
-	len = read(tmp->pipe[0], tmp->ast_rd_buf, sizeof(tmp->ast_rd_buf));
-
-	if (len <= 0) {
-		/* we hangup here, since our pipe is closed */
-		chan_misdn_log(2, tmp->bc->port, "misdn_read: Pipe closed, hanging up\n");
+	tv.tv_sec=0;
+	tv.tv_usec=20000;
+
+	FD_ZERO(&rrfs);
+	FD_SET(tmp->pipe[0],&rrfs);
+
+	t=select(FD_SETSIZE,&rrfs,NULL, NULL,&tv);
+
+	if (!t) {
+		chan_misdn_log(3, tmp->bc->port, "read Select Timed out\n");
+		len=160;
+	}
+
+	if (t<0) {
+		chan_misdn_log(-1, tmp->bc->port, "Select Error (err=%s)\n",strerror(errno));
 		return NULL;
 	}
 
-	tmp->frame.frametype = AST_FRAME_VOICE;
+	if (FD_ISSET(tmp->pipe[0],&rrfs)) {
+		len=read(tmp->pipe[0],tmp->ast_rd_buf,sizeof(tmp->ast_rd_buf));
+
+		if (len<=0) {
+			/* we hangup here, since our pipe is closed */
+			chan_misdn_log(2,tmp->bc->port,"misdn_read: Pipe closed, hanging up\n");
+			return NULL;
+		}
+
+	} else {
+		return NULL;
+	}
+
 	tmp->frame.subclass = AST_FORMAT_ALAW;
 	tmp->frame.datalen = len;
 	tmp->frame.samples = len;
@@ -4304,8 +4328,15 @@
 			}
 		}
 	}
-	
-	/* notice that we don't break here!*/
+	ch->l3id=bc->l3_id;
+	ch->addr=bc->addr;
+
+	start_bc_tones(ch);
+	
+	ch->state = MISDN_CONNECTED;
+	
+	ast_queue_control(ch->ast, AST_CONTROL_ANSWER);
+	break;
 	case EVENT_CONNECT_ACKNOWLEDGE:
 	{
 		ch->l3id = bc->l3_id;
@@ -4314,11 +4345,6 @@
 		start_bc_tones(ch);
 
 		ch->state = MISDN_CONNECTED;
-
-		if (!ch->ast)
-			break;
-
-		ast_queue_control(ch->ast, AST_CONTROL_ANSWER);
 	}
 	break;
 	case EVENT_DISCONNECT:
@@ -4377,9 +4403,6 @@
 
 			hangup_chan(ch);
 			release_chan(bc);
-		
-			if (bc->need_release_complete) 
-				misdn_lib_send_event(bc, EVENT_RELEASE_COMPLETE);
 		}
 		break;
 	case EVENT_RELEASE_COMPLETE:

Modified: team/russell/events/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/channels/chan_sip.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/channels/chan_sip.c (original)
+++ team/russell/events/channels/chan_sip.c Wed Sep  5 10:04:47 2007
@@ -9108,11 +9108,11 @@
 	}
 
 	/* Ok, we have a bad username/secret pair */
-	/* Challenge again, and again, and again */
-	transmit_response_with_auth(p, response, req, p->randdata, reliable, respheader, 0);
-	sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
-
-	return AUTH_CHALLENGE_SENT;
+	/* Tell the UAS not to re-send this authentication data, because
+	   it will continue to fail
+	*/
+
+	return AUTH_SECRET_FAILED;
 }
 
 /*! \brief Change onhold state of a peer using a pvt structure */
@@ -9359,7 +9359,7 @@
 				transmit_fake_auth_response(p, &p->initreq, 1);
 			} else {
 				/* URI not found */
-				if (res == AUTH_UNKNOWN_DOMAIN || res == AUTH_PEER_NOT_DYNAMIC)
+				if (res == AUTH_PEER_NOT_DYNAMIC)
 					transmit_response(p, "403 Forbidden", &p->initreq);
 				else
 					transmit_response(p, "404 Not found", &p->initreq);
@@ -10028,7 +10028,7 @@
 	struct ast_variable *res = NULL, *tmp, *v = NULL;
 
 	for (v = src ; v ; v = v->next) {
-		if ((tmp = ast_variable_new(v->name, v->value))) {
+		if ((tmp = ast_variable_new(v->name, v->value, v->file))) {
 			tmp->next = res;
 			res = tmp;
 		}
@@ -16427,13 +16427,10 @@
 					usleep(1);
 					sip_pvt_lock(dialog);
 				}
-				if (!(ast_rtp_get_bridged(dialog->rtp))) {
-					ast_log(LOG_NOTICE, "Disconnecting call '%s' for lack of RTP activity in %ld seconds\n",
-						dialog->owner->name, (long) (t - dialog->lastrtprx));
-					/* Issue a softhangup */
-					ast_softhangup_nolock(dialog->owner, AST_SOFTHANGUP_DEV);
-				} else
-					ast_log(LOG_NOTICE, "'%s' will not be disconnected in %ld seconds because it is directly bridged to another RTP stream\n", dialog->owner->name, (long) (t - dialog->lastrtprx));
+				ast_log(LOG_NOTICE, "Disconnecting call '%s' for lack of RTP activity in %ld seconds\n",
+					dialog->owner->name, (long) (t - dialog->lastrtprx));
+				/* Issue a softhangup */
+				ast_softhangup_nolock(dialog->owner, AST_SOFTHANGUP_DEV);
 				ast_channel_unlock(dialog->owner);
 				/* forget the timeouts for this call, since a hangup
 				   has already been requested and we don't want to
@@ -17140,7 +17137,7 @@
 	
 	if ((varval = strchr(varname,'='))) {
 		*varval++ = '\0';
-		if ((tmpvar = ast_variable_new(varname, varval))) {
+		if ((tmpvar = ast_variable_new(varname, varval, ""))) {
 			tmpvar->next = list;
 			list = tmpvar;
 		}
@@ -17719,6 +17716,7 @@
 	global_outboundproxy.ip.sin_port = htons(STANDARD_SIP_PORT);
 	global_outboundproxy.ip.sin_family = AF_INET;	/* Type of address: IPv4 */
 	bindaddr.sin_port = htons(STANDARD_SIP_PORT);
+	externip.sin_port = htons(STANDARD_SIP_PORT);
 	global_srvlookup = DEFAULT_SRVLOOKUP;
 	global_tos_sip = DEFAULT_TOS_SIP;
 	global_tos_audio = DEFAULT_TOS_AUDIO;

Modified: team/russell/events/channels/chan_skinny.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/channels/chan_skinny.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/channels/chan_skinny.c (original)
+++ team/russell/events/channels/chan_skinny.c Wed Sep  5 10:04:47 2007
@@ -1463,7 +1463,7 @@
 
 	if ((varval = strchr(varname,'='))) {
 		*varval++ = '\0';
-		if ((tmpvar = ast_variable_new(varname, varval))) {
+		if ((tmpvar = ast_variable_new(varname, varval, ""))) {
 			tmpvar->next = list;
 			list = tmpvar;
 		}

Modified: team/russell/events/channels/chan_zap.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/channels/chan_zap.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/channels/chan_zap.c (original)
+++ team/russell/events/channels/chan_zap.c Wed Sep  5 10:04:47 2007
@@ -110,6 +110,19 @@
 #include "asterisk/event.h"
 
 #define SMDI_MD_WAIT_TIMEOUT 1500 /* 1.5 seconds */
+
+#ifdef ZT_SPANINFO_HAS_LINECONFIG
+static const char *lbostr[] = {
+"0 db (CSU)/0-133 feet (DSX-1)",
+"133-266 feet (DSX-1)",
+"266-399 feet (DSX-1)",
+"399-533 feet (DSX-1)",
+"533-655 feet (DSX-1)",
+"-7.5db (CSU)",
+"-15db (CSU)",
+"-22.5db (CSU)"
+};
+#endif
 
 /*! Global jitterbuffer configuration - by default, jb is disabled */
 static struct ast_jb_conf default_jbconf =
@@ -11026,8 +11039,13 @@
 
 /* Based on irqmiss.c */
 static int zap_show_status(int fd, int argc, char *argv[]) {
+#ifdef ZT_SPANINFO_HAS_LINECONFIG
+	#define FORMAT "%-40.40s %-7.7s %-6d %-6d %-6d %-3.3s %-4.4s %-8.8s %s\n"
+	#define FORMAT2 "%-40.40s %-7.7s %-6.6s %-6.6s %-6.6s %-3.3s %-4.4s %-8.8s %s\n"
+#else
 	#define FORMAT "%-40.40s %-10.10s %-10d %-10d %-10d\n"
 	#define FORMAT2 "%-40.40s %-10.10s %-10.10s %-10.10s %-10.10s\n"
+#endif
 
 	int span;
 	int res;
@@ -11042,7 +11060,11 @@
 		ast_cli(fd, "No Zaptel interface found.\n");
 		return RESULT_FAILURE;
 	}
-	ast_cli(fd, FORMAT2, "Description", "Alarms", "IRQ", "bpviol", "CRC4");
+	ast_cli(fd, FORMAT2, "Description", "Alarms", "IRQ", "bpviol", "CRC4"
+#ifdef ZT_SPANINFO_HAS_LINECONFIG
+			, "Framing", "Coding", "Options", "LBO"
+#endif
+		);
 
 	for (span = 1; span < ZT_MAX_SPANS; ++span) {
 		s.spanno = span;
@@ -11077,7 +11099,21 @@
 				strcpy(alarms, "UNCONFIGURED");
 		}
 
-		ast_cli(fd, FORMAT, s.desc, alarms, s.irqmisses, s.bpvcount, s.crc4count);
+		ast_cli(fd, FORMAT, s.desc, alarms, s.irqmisses, s.bpvcount, s.crc4count
+#ifdef ZT_SPANINFO_HAS_LINECONFIG
+				, s.lineconfig & ZT_CONFIG_D4 ? "D4" :
+				  s.lineconfig & ZT_CONFIG_ESF ? "ESF" :
+				  s.lineconfig & ZT_CONFIG_CCS ? "CCS" :
+				  "CAS"
+				, s.lineconfig & ZT_CONFIG_B8ZS ? "B8ZS" :
+				  s.lineconfig & ZT_CONFIG_HDB3 ? "HDB3" :
+				  s.lineconfig & ZT_CONFIG_AMI ? "AMI" :
+				  "Unk"
+				, s.lineconfig & ZT_CONFIG_CRC4 ?
+				  s.lineconfig & ZT_CONFIG_NOTOPEN ? "CRC4/YEL" : "CRC4" : "YEL"
+				, lbostr[s.lbo]
+#endif
+			);
 	}
 	close(ctl);
 

Modified: team/russell/events/channels/h323/ast_h323.cxx
URL: http://svn.digium.com/view/asterisk/team/russell/events/channels/h323/ast_h323.cxx?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/channels/h323/ast_h323.cxx (original)
+++ team/russell/events/channels/h323/ast_h323.cxx Wed Sep  5 10:04:47 2007
@@ -287,7 +287,9 @@
 		cout << "\t-- " << GetLocalUserName() << " is calling host " << fullAddress << endl;
 		cout << "\t-- Call token is " << (const char *)token << endl;
 		cout << "\t-- Call reference is " << *callReference << endl;
+#ifdef PTRACING
 		cout << "\t-- DTMF Payload is " << connection->dtmfCodec << endl;
+#endif
 	}
 	connection->Unlock();
 	return 0;
@@ -1662,10 +1664,12 @@
 				H245_AudioTelephonyEventCapability & atec = cap;
 				atec.m_dynamicRTPPayloadType = dtmfCodec[0];
 //				on_set_rfc2833_payload(GetCallReference(), (const char *)GetCallToken(), (int)dtmfCodec[0]);
+#ifdef PTRACING
 				if (h323debug) {
 					cout << "\t-- Receiving RFC2833 on payload " <<
 						atec.m_dynamicRTPPayloadType << endl;
 				}
+#endif
 			}
 		}
 	}
@@ -1762,9 +1766,11 @@
 //					if (sendUserInputMode == SendUserInputAsTone)
 //						sendUserInputMode = SendUserInputAsInlineRFC2833;
 				}
+#ifdef PTRACING
 				if (h323debug) {
 					cout << "\t-- Outbound Cisco RTP DTMF on payload " << pt << endl;
 				}
+#endif
 			}
 			break;
 		case H323Capability::e_UserInput:
@@ -1775,9 +1781,11 @@
 //					if (sendUserInputMode == SendUserInputAsTone)
 //						sendUserInputMode = SendUserInputAsInlineRFC2833;
 				}
+#ifdef PTRACING
 				if (h323debug) {
 					cout << "\t-- Outbound RFC2833 on payload " << pt << endl;
 				}
+#endif
 			}
 			break;
 #if 0

Modified: team/russell/events/channels/iax2-parser.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/channels/iax2-parser.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/channels/iax2-parser.c (original)
+++ team/russell/events/channels/iax2-parser.c Wed Sep  5 10:04:47 2007
@@ -917,7 +917,7 @@
 					int len = strlen(var2->value) + strlen(tmp2) + 1;
 					char *tmp3 = alloca(len);
 					snprintf(tmp3, len, "%s%s", var2->value, tmp2);
-					var = ast_variable_new(tmp, tmp3);
+					var = ast_variable_new(tmp, tmp3, var2->file);
 					var->next = var2->next;
 					if (prev)
 						prev->next = var;
@@ -928,7 +928,7 @@
 				}
 			}
 			if (!var2) {
-				var = ast_variable_new(tmp, tmp2);
+				var = ast_variable_new(tmp, tmp2, "");
 				var->next = ies->vars;
 				ies->vars = var;
 			}

Modified: team/russell/events/channels/misdn/isdn_lib.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/channels/misdn/isdn_lib.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/channels/misdn/isdn_lib.c (original)
+++ team/russell/events/channels/misdn/isdn_lib.c Wed Sep  5 10:04:47 2007
@@ -1557,9 +1557,6 @@
 		case EVENT_PROGRESS:
 		case EVENT_PROCEEDING:
 		case EVENT_SETUP_ACKNOWLEDGE:
-
-		setup_bc(bc);
-
 		case EVENT_SETUP:
 		{
 			if (bc->channel == 0xff || bc->channel<=0)
@@ -1571,6 +1568,8 @@
 				return -1;
 			}
 		}
+
+		setup_bc(bc);
 		break;
 
 		case EVENT_RELEASE_COMPLETE:

Modified: team/russell/events/codecs/codec_zap.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/codecs/codec_zap.c?view=diff&rev=81521&r1=81520&r2=81521
==============================================================================
--- team/russell/events/codecs/codec_zap.c (original)
+++ team/russell/events/codecs/codec_zap.c Wed Sep  5 10:04:47 2007
@@ -51,6 +51,7 @@
 #include "asterisk/config.h"
 #include "asterisk/options.h"
 #include "asterisk/module.h"
+#include "asterisk/cli.h"
 #include "asterisk/logger.h"
 #include "asterisk/channel.h"
 #include "asterisk/utils.h"
@@ -59,6 +60,37 @@
 #define BUFFER_SAMPLES	8000
 
 static unsigned int global_useplc = 0;
+
+static struct channel_usage {
+	int total;
+	int encoders;
+	int decoders;
+} channels;
+
+static char show_transcoder_usage[] =
+"Usage: show transcoder\n"
+"       Displays channel utilization of Zaptel transcoder(s).\n";
+
+static char transcoder_show_usage[] =
+"Usage: transcoder show\n"
+"       Displays channel utilization of Zaptel transcoder(s).\n";
+
+static int transcoder_show(int fd, int argc, char **argv);
+
+static struct ast_cli_entry cli_deprecated[] = {
+	{ { "show", "transcoder", NULL },
+	  transcoder_show,
+	  "Display Zaptel transcoder utilization.",
+	  show_transcoder_usage}
+};
+
+static struct ast_cli_entry cli[] = {
+	{ { "transcoder", "show", NULL },
+	  transcoder_show,
+	  "Display Zaptel transcoder utilization.",

[... 3043 lines stripped ...]



More information about the asterisk-commits mailing list