[asterisk-commits] russell: branch group/res_config_ldap r74214 - in /team/group/res_config_ldap...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Jul 9 16:35:21 CDT 2007


Author: russell
Date: Mon Jul  9 16:35:20 2007
New Revision: 74214

URL: http://svn.digium.com/view/asterisk?view=rev&rev=74214
Log:
update branch

Modified:
    team/group/res_config_ldap/   (props changed)
    team/group/res_config_ldap/apps/app_queue.c
    team/group/res_config_ldap/channels/chan_agent.c
    team/group/res_config_ldap/channels/chan_skinny.c
    team/group/res_config_ldap/channels/chan_zap.c
    team/group/res_config_ldap/configure
    team/group/res_config_ldap/configure.ac
    team/group/res_config_ldap/include/asterisk/monitor.h
    team/group/res_config_ldap/res/res_monitor.c
    team/group/res_config_ldap/res/res_musiconhold.c

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

Propchange: team/group/res_config_ldap/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Mon Jul  9 16:35:20 2007
@@ -1,1 +1,1 @@
-/trunk:1-74080
+/trunk:1-74213

Modified: team/group/res_config_ldap/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/team/group/res_config_ldap/apps/app_queue.c?view=diff&rev=74214&r1=74213&r2=74214
==============================================================================
--- team/group/res_config_ldap/apps/app_queue.c (original)
+++ team/group/res_config_ldap/apps/app_queue.c Mon Jul  9 16:35:20 2007
@@ -1763,15 +1763,17 @@
 		char vars[2048];
 
 		manager_event(EVENT_FLAG_AGENT, "AgentCalled",
+					"Queue: %s\r\n"
 					"AgentCalled: %s\r\n"
 					"ChannelCalling: %s\r\n"
+					"DestinationChannel: %s\r\n"
 					"CallerIDNum: %s\r\n"
 					"CallerIDName: %s\r\n"
 					"Context: %s\r\n"
 					"Extension: %s\r\n"
 					"Priority: %d\r\n"
 					"%s",
-					tmp->interface, qe->chan->name,
+					qe->parent->name, tmp->interface, qe->chan->name, tmp->chan->name,
 					tmp->chan->cid.cid_num ? tmp->chan->cid.cid_num : "unknown",
 					tmp->chan->cid.cid_name ? tmp->chan->cid.cid_name : "unknown",
 					qe->chan->context, qe->chan->exten, qe->chan->priority,
@@ -2475,8 +2477,7 @@
 			ast_set_flag(&(bridge_config.features_caller), AST_FEATURE_DISCONNECT);
 			break;
 		case 'n':
-			if ((now - qe->start >= qe->parent->timeout))
-				*go_on = 1;
+			*go_on = 1;
 			break;
 		case 'i':
 			forwardsallowed = 0;
@@ -3648,6 +3649,17 @@
 
 				stat = get_member_status(qe.parent, qe.max_penalty);
 
+				/* exit after 'timeout' cycle if 'n' option enabled */
+				if (go_on) {
+					if (option_verbose > 2)
+						ast_verbose(VERBOSE_PREFIX_3 "Exiting on time-out cycle\n");
+					ast_queue_log(args.queuename, chan->uniqueid, "NONE", "EXITWITHTIMEOUT", "%d", qe.pos);
+					record_abandoned(&qe);
+					reason = QUEUE_TIMEOUT;
+					res = 0;
+					break;
+				}
+
 				/* leave the queue if no agents, if enabled */
 				if (qe.parent->leavewhenempty && (stat == QUEUE_NO_MEMBERS)) {
 					record_abandoned(&qe);
@@ -3697,17 +3709,7 @@
 						qe.digits, qe.pos, qe.opos, (long) time(NULL) - qe.start);
 					break;
 				}
-				/* exit after 'timeout' cycle if 'n' option enabled */
-				if (go_on) {
-					if (option_verbose > 2)
-						ast_verbose(VERBOSE_PREFIX_3 "Exiting on time-out cycle\n");
-					ast_queue_log(args.queuename, chan->uniqueid, "NONE", "EXITWITHTIMEOUT", "%d|%d|%ld", 
-						qe.pos, qe.opos, (long) time(NULL) - qe.start);
-					record_abandoned(&qe);
-					reason = QUEUE_TIMEOUT;
-					res = 0;
-					break;
-				}
+
 				/* Since this is a priority queue and
 				 * it is not sure that we are still at the head
 				 * of the queue, go and check for our turn again.

Modified: team/group/res_config_ldap/channels/chan_agent.c
URL: http://svn.digium.com/view/asterisk/team/group/res_config_ldap/channels/chan_agent.c?view=diff&rev=74214&r1=74213&r2=74214
==============================================================================
--- team/group/res_config_ldap/channels/chan_agent.c (original)
+++ team/group/res_config_ldap/channels/chan_agent.c Mon Jul  9 16:35:20 2007
@@ -2139,7 +2139,6 @@
 	char *s;
 	ast_group_t groupmatch;
 	int groupoff;
-	int waitforagent=0;
 	int res = AST_DEVICE_INVALID;
 	
 	s = data;
@@ -2147,7 +2146,6 @@
 		groupmatch = (1 << groupoff);
 	else if ((s[0] == ':') && (sscanf(s + 1, "%d", &groupoff) == 1)) {
 		groupmatch = (1 << groupoff);
-		waitforagent = 1;
 	} else 
 		groupmatch = 0;
 

Modified: team/group/res_config_ldap/channels/chan_skinny.c
URL: http://svn.digium.com/view/asterisk/team/group/res_config_ldap/channels/chan_skinny.c?view=diff&rev=74214&r1=74213&r2=74214
==============================================================================
--- team/group/res_config_ldap/channels/chan_skinny.c (original)
+++ team/group/res_config_ldap/channels/chan_skinny.c Mon Jul  9 16:35:20 2007
@@ -895,7 +895,7 @@
 #endif
 
 /* driver scheduler */
-static struct sched_context *sched;
+static struct sched_context *sched = NULL;
 static struct io_context *io;
 
 /* Protect the monitoring thread, so only one process can kill or start it, and not
@@ -5147,7 +5147,8 @@
 	ast_cli_unregister_multiple(cli_skinny, sizeof(cli_skinny) / sizeof(struct ast_cli_entry));
 
 	close(skinnysock);
-	sched_context_destroy(sched);
+	if (sched)
+		sched_context_destroy(sched);
 
 	return 0;
 }

Modified: team/group/res_config_ldap/channels/chan_zap.c
URL: http://svn.digium.com/view/asterisk/team/group/res_config_ldap/channels/chan_zap.c?view=diff&rev=74214&r1=74213&r2=74214
==============================================================================
--- team/group/res_config_ldap/channels/chan_zap.c (original)
+++ team/group/res_config_ldap/channels/chan_zap.c Mon Jul  9 16:35:20 2007
@@ -12131,6 +12131,14 @@
 				ast_log(LOG_WARNING, "Invalid AMA flags: %s at line %d\n", v->value, v->lineno);
 			else
 				confp->chan.amaflags = y;
+		} else if (!strcasecmp(v->name, "polarityonanswerdelay")) {
+			confp->chan.polarityonanswerdelay = atoi(v->value);
+		} else if (!strcasecmp(v->name, "answeronpolarityswitch")) {
+			confp->chan.answeronpolarityswitch = ast_true(v->value);
+		} else if (!strcasecmp(v->name, "hanguponpolarityswitch")) {
+			confp->chan.hanguponpolarityswitch = ast_true(v->value);
+		} else if (!strcasecmp(v->name, "sendcalleridafter")) {
+			confp->chan.sendcalleridafter = atoi(v->value);
 		} else if (!reload){ 
 			 if (!strcasecmp(v->name, "signalling")) {
 				confp->chan.outsigmod = -1;
@@ -12627,14 +12635,6 @@
 					}
 				}
 				close(ctlfd);
-			} else if (!strcasecmp(v->name, "polarityonanswerdelay")) {
-				confp->chan.polarityonanswerdelay = atoi(v->value);
-			} else if (!strcasecmp(v->name, "answeronpolarityswitch")) {
-				confp->chan.answeronpolarityswitch = ast_true(v->value);
-			} else if (!strcasecmp(v->name, "hanguponpolarityswitch")) {
-				confp->chan.hanguponpolarityswitch = ast_true(v->value);
-			} else if (!strcasecmp(v->name, "sendcalleridafter")) {
-				confp->chan.sendcalleridafter = atoi(v->value);
 			} else if (!strcasecmp(v->name, "defaultcic")) {
 				ast_copy_string(defaultcic, v->value, sizeof(defaultcic));
 			} else if (!strcasecmp(v->name, "defaultozz")) {

Modified: team/group/res_config_ldap/configure
URL: http://svn.digium.com/view/asterisk/team/group/res_config_ldap/configure?view=diff&rev=74214&r1=74213&r2=74214
==============================================================================
--- team/group/res_config_ldap/configure (original)
+++ team/group/res_config_ldap/configure Mon Jul  9 16:35:20 2007
@@ -29370,7 +29370,7 @@
       	 pbxlibdir="-L${PRI_DIR}"
       fi
    fi
-   pbxfuncname="pri_call"
+   pbxfuncname="pri_keypad_facility"
    if test "x${pbxfuncname}" = "x" ; then   # empty lib, assume only headers
       AST_PRI_FOUND=yes
    else

Modified: team/group/res_config_ldap/configure.ac
URL: http://svn.digium.com/view/asterisk/team/group/res_config_ldap/configure.ac?view=diff&rev=74214&r1=74213&r2=74214
==============================================================================
--- team/group/res_config_ldap/configure.ac (original)
+++ team/group/res_config_ldap/configure.ac Mon Jul  9 16:35:20 2007
@@ -776,7 +776,7 @@
 
 AST_EXT_LIB_CHECK([POPT], [popt], [poptStrerror], [popt.h])
 
-AST_EXT_LIB_CHECK([PRI], [pri], [pri_call], [libpri.h])
+AST_EXT_LIB_CHECK([PRI], [pri], [pri_keypad_facility], [libpri.h])
 
 AST_EXT_LIB_CHECK([SS7], [ss7], [ss7_new], [libss7.h])
 

Modified: team/group/res_config_ldap/include/asterisk/monitor.h
URL: http://svn.digium.com/view/asterisk/team/group/res_config_ldap/include/asterisk/monitor.h?view=diff&rev=74214&r1=74213&r2=74214
==============================================================================
--- team/group/res_config_ldap/include/asterisk/monitor.h (original)
+++ team/group/res_config_ldap/include/asterisk/monitor.h Mon Jul  9 16:35:20 2007
@@ -46,7 +46,7 @@
 
 /* Start monitoring a channel */
 int ast_monitor_start(struct ast_channel *chan, const char *format_spec,
-		      const char *fname_base, int need_lock );
+		      const char *fname_base, int need_lock, int stream_action);
 
 /* Stop monitoring a channel */
 int ast_monitor_stop(struct ast_channel *chan, int need_lock);

Modified: team/group/res_config_ldap/res/res_monitor.c
URL: http://svn.digium.com/view/asterisk/team/group/res_config_ldap/res/res_monitor.c?view=diff&rev=74214&r1=74213&r2=74214
==============================================================================
--- team/group/res_config_ldap/res/res_monitor.c (original)
+++ team/group/res_config_ldap/res/res_monitor.c Mon Jul  9 16:35:20 2007
@@ -60,6 +60,11 @@
 	if (needed) \
 		ast_channel_unlock(lock); \
 	} while (0)
+
+/* Streams recording control */
+#define X_REC_IN	1
+#define X_REC_OUT	2
+#define X_JOIN		4
 
 static unsigned long seq = 0;
 
@@ -85,6 +90,10 @@
 "          administrator interface\n"
 "\n"
 "    b   - Don't begin recording unless a call is bridged to another channel\n"
+"\n"
+"    i   - Skip recording of input stream (disables m option)\n"
+"\n"
+"    o   - Skip recording of output stream (disables m option)\n"
 "\nReturns -1 if monitor files can't be opened or if the channel is already\n"
 "monitored, otherwise 0.\n"
 ;
@@ -125,7 +134,7 @@
 
 /* Start monitoring a channel */
 int ast_monitor_start(	struct ast_channel *chan, const char *format_spec,
-		const char *fname_base, int need_lock)
+		const char *fname_base, int need_lock, int stream_action)
 {
 	int res = 0;
 
@@ -184,31 +193,38 @@
 		}
 		
 		/* open files */
-		if (ast_fileexists(monitor->read_filename, NULL, NULL) > 0) {
-			ast_filedelete(monitor->read_filename, NULL);
-		}
-		if (!(monitor->read_stream = ast_writefile(monitor->read_filename,
-						monitor->format, NULL,
-						O_CREAT|O_TRUNC|O_WRONLY, 0, AST_FILE_MODE))) {
-			ast_log(LOG_WARNING, "Could not create file %s\n",
-						monitor->read_filename);
-			ast_free(monitor);
-			UNLOCK_IF_NEEDED(chan, need_lock);
-			return -1;
-		}
-		if (ast_fileexists(monitor->write_filename, NULL, NULL) > 0) {
-			ast_filedelete(monitor->write_filename, NULL);
-		}
-		if (!(monitor->write_stream = ast_writefile(monitor->write_filename,
-						monitor->format, NULL,
-						O_CREAT|O_TRUNC|O_WRONLY, 0, AST_FILE_MODE))) {
-			ast_log(LOG_WARNING, "Could not create file %s\n",
-						monitor->write_filename);
-			ast_closestream(monitor->read_stream);
-			ast_free(monitor);
-			UNLOCK_IF_NEEDED(chan, need_lock);
-			return -1;
-		}
+		if (stream_action & X_REC_IN) {
+			if (ast_fileexists(monitor->read_filename, NULL, NULL) > 0)
+				ast_filedelete(monitor->read_filename, NULL);
+			if (!(monitor->read_stream = ast_writefile(monitor->read_filename,
+							monitor->format, NULL,
+							O_CREAT|O_TRUNC|O_WRONLY, 0, AST_FILE_MODE))) {
+				ast_log(LOG_WARNING, "Could not create file %s\n",
+							monitor->read_filename);
+				ast_free(monitor);
+				UNLOCK_IF_NEEDED(chan, need_lock);
+				return -1;
+			}
+		} else
+			monitor->read_stream = NULL;
+
+		if (stream_action & X_REC_OUT) {
+			if (ast_fileexists(monitor->write_filename, NULL, NULL) > 0) {
+				ast_filedelete(monitor->write_filename, NULL);
+			}
+			if (!(monitor->write_stream = ast_writefile(monitor->write_filename,
+							monitor->format, NULL,
+							O_CREAT|O_TRUNC|O_WRONLY, 0, AST_FILE_MODE))) {
+				ast_log(LOG_WARNING, "Could not create file %s\n",
+							monitor->write_filename);
+				ast_closestream(monitor->read_stream);
+				ast_free(monitor);
+				UNLOCK_IF_NEEDED(chan, need_lock);
+				return -1;
+			}
+		} else
+			monitor->write_stream = NULL;
+
 		chan->monitor = monitor;
 		ast_monitor_set_state(chan, AST_MONITOR_RUNNING);
 		/* so we know this call has been monitored in case we need to bill for it or something */
@@ -381,6 +397,7 @@
 	char *delay = NULL;
 	char *urlprefix = NULL;
 	char tmp[256];
+	int stream_action = X_REC_IN | X_REC_OUT;
 	int joinfiles = 0;
 	int waitforbridge = 0;
 	int res = 0;
@@ -397,9 +414,13 @@
 				*options = 0;
 				options++;
 				if (strchr(options, 'm'))
-					joinfiles = 1;
+					stream_action |= X_JOIN;
 				if (strchr(options, 'b'))
 					waitforbridge = 1;
+				if (strchr(options, 'i'))
+					stream_action &= ~X_REC_IN;
+				if (strchr(options, 'o'))
+					stream_action &= ~X_REC_OUT;
 			}
 		}
 		arg = strchr(format,':');
@@ -432,9 +453,16 @@
 		return 0;
 	}
 
-	res = ast_monitor_start(chan, format, fname_base, 1);
+	res = ast_monitor_start(chan, format, fname_base, 1, stream_action);
 	if (res < 0)
 		res = ast_monitor_change_fname(chan, fname_base, 1);
+
+	if (stream_action & X_JOIN) {
+		if ((stream_action & X_REC_IN) && (stream_action & X_REC_OUT))
+			joinfiles = 1;
+		else
+			ast_log(LOG_WARNING, "Won't mix streams unless both input and output streams are recorded\n");
+	}
 	ast_monitor_setjoinfiles(chan, joinfiles);
 
 	return res;
@@ -472,7 +500,7 @@
 	const char *format = astman_get_header(m, "Format");
 	const char *mix = astman_get_header(m, "Mix");
 	char *d;
-	
+
 	if (ast_strlen_zero(name)) {
 		astman_send_error(s, m, "No channel specified");
 		return 0;
@@ -494,8 +522,8 @@
 		if ((d = strchr(fname, '/'))) 
 			*d = '-';
 	}
-	
-	if (ast_monitor_start(c, format, fname, 1)) {
+
+	if (ast_monitor_start(c, format, fname, 1, X_REC_IN | X_REC_OUT)) {
 		if (ast_monitor_change_fname(c, fname, 1)) {
 			astman_send_error(s, m, "Could not start monitoring channel");
 			ast_channel_unlock(c);

Modified: team/group/res_config_ldap/res/res_musiconhold.c
URL: http://svn.digium.com/view/asterisk/team/group/res_config_ldap/res/res_musiconhold.c?view=diff&rev=74214&r1=74213&r2=74214
==============================================================================
--- team/group/res_config_ldap/res/res_musiconhold.c (original)
+++ team/group/res_config_ldap/res/res_musiconhold.c Mon Jul  9 16:35:20 2007
@@ -603,7 +603,7 @@
 {
 	if (ast_moh_start(chan, data, NULL)) {
 		ast_log(LOG_WARNING, "Unable to start music on hold (class '%s') on channel %s\n", (char *)data, chan->name);
-		return -1;
+		return 0;
 	}
 	while (!ast_safe_sleep(chan, 10000));
 	ast_moh_stop(chan);
@@ -619,7 +619,7 @@
 	}
 	if (ast_moh_start(chan, NULL, NULL)) {
 		ast_log(LOG_WARNING, "Unable to start music on hold for %d seconds on channel %s\n", atoi(data), chan->name);
-		return -1;
+		return 0;
 	}
 	res = ast_safe_sleep(chan, atoi(data) * 1000);
 	ast_moh_stop(chan);
@@ -663,6 +663,9 @@
 		if (!strcasecmp(name, moh->name))
 			break;
 	}
+
+	if (!moh)
+		ast_log(LOG_WARNING, "Music on Hold class '%s' not found\n", name);
 
 	return moh;
 }
@@ -948,7 +951,6 @@
 static int local_ast_moh_start(struct ast_channel *chan, const char *mclass, const char *interpclass)
 {
 	struct mohclass *mohclass;
-	const char *class;
 
 	/* The following is the order of preference for which class to use:
 	 * 1) The channels explicitly set musicclass, which should *only* be
@@ -961,23 +963,19 @@
 	 *    option.
 	 * 4) The default class.
 	 */
+	AST_RWLIST_RDLOCK(&mohclasses);
 	if (!ast_strlen_zero(chan->musicclass))
-		class = chan->musicclass;
-	else if (!ast_strlen_zero(mclass))
-		class = mclass;
-	else if (!ast_strlen_zero(interpclass))
-		class = interpclass;
-	else
-		class = "default";
-
-	AST_RWLIST_RDLOCK(&mohclasses);
-	mohclass = get_mohbyname(class);
+		mohclass = get_mohbyname(chan->musicclass);
+	if (!mohclass && !ast_strlen_zero(mclass))
+		mohclass = get_mohbyname(mclass);
+	if (!mohclass && !ast_strlen_zero(interpclass))
+		mohclass = get_mohbyname(interpclass);
+	if (!mohclass)	
+		mohclass = get_mohbyname("default");
 	AST_RWLIST_UNLOCK(&mohclasses);
 
-	if (!mohclass) {
-		ast_log(LOG_WARNING, "No class: %s\n", class);
+	if (!mohclass)
 		return -1;
-	}
 
 	ast_set_flag(chan, AST_FLAG_MOH);
 	if (mohclass->total_files) {




More information about the asterisk-commits mailing list