[Asterisk-cvs] asterisk/apps app_chanspy.c,1.7,1.8

anthm at lists.digium.com anthm at lists.digium.com
Wed Mar 30 11:04:24 CST 2005


Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv18261/apps

Modified Files:
	app_chanspy.c 
Log Message:
fix dial a channel on chanspy

Index: app_chanspy.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_chanspy.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- app_chanspy.c	30 Mar 2005 16:07:07 -0000	1.7
+++ app_chanspy.c	30 Mar 2005 16:57:59 -0000	1.8
@@ -81,6 +81,7 @@
 
 /* Prototypes */
 static struct ast_channel *local_get_channel_by_name(char *name);
+static struct ast_channel *local_get_channel_begin_name(char *name);
 static struct ast_channel *local_channel_walk(struct ast_channel *chan);
 static void spy_release(struct ast_channel *chan, void *data);
 static void *spy_alloc(struct ast_channel *chan, void *params);
@@ -116,6 +117,24 @@
 	return ret;
 }
 
+static struct ast_channel *local_get_channel_begin_name(char *name) 
+{
+	struct ast_channel *chan, *ret = NULL;
+	ast_mutex_lock(&modlock);
+	chan = local_channel_walk(NULL);
+	while (chan) {
+		if (!strncmp(chan->name, name, strlen(name))) {
+			ret = chan;
+			break;
+		}
+		chan = local_channel_walk(chan);
+	}
+	ast_mutex_unlock(&modlock);
+	
+	return ret;
+}
+
+
 static void spy_release(struct ast_channel *chan, void *data) 
 {
 	struct chanspy_translation_helper *csth = data;
@@ -420,7 +439,7 @@
 	char *argv[5];
 	char *mygroup = NULL;
 	int bronly = 0;
-
+	int chosen = 0;
 
 	if (!(args = ast_strdupa((char *)data))) {
 		ast_log(LOG_ERROR, "Out of memory!\n");
@@ -493,9 +512,10 @@
 				char *group = NULL;
 				int igrp = 1;
 
-				if (peer == prev) {
+				if (peer == prev && !chosen) {
 					break;
 				}
+				chosen = 0;
 				group = pbx_builtin_getvar_helper(peer, "SPYGROUP");
 				if (mygroup) {
 					if (!group || strcmp(mygroup, group)) {
@@ -540,17 +560,17 @@
 							ALL_DONE(u, -1);
 						} else if (res > 1 && spec) {
 							snprintf(name, AST_NAME_STRLEN, "%s/%d", spec, res);
-							if (!silent)
-								ast_say_digits(chan, res, "", chan->language);
-							peer=local_get_channel_by_name(name);
+							if ((peer = local_get_channel_begin_name(name))) {
+								chosen = 1;
+							}
 							continue;
 						}
 					}
 				}
 			}
-
-			if ((peer = local_channel_walk(peer)) == NULL)
+			if ((peer = local_channel_walk(peer)) == NULL) {
 				break;
+			}
 		}
 		waitms = count ? 100 : 5000;
 	}




More information about the svn-commits mailing list