[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