summaryrefslogtreecommitdiff
path: root/channels/chan_skinny.c
diff options
context:
space:
mode:
authorJason Parker <jparker@digium.com>2007-07-24 15:35:58 +0000
committerJason Parker <jparker@digium.com>2007-07-24 15:35:58 +0000
commit3562d4eea2c2741774a18f5f16c0d0bcb0c5127c (patch)
tree1d22afdb0269df3f0d41238455fba2bbe18b8c36 /channels/chan_skinny.c
parent961165519ef4d1cc8c8ad68a58721dc5886fac13 (diff)
The chan_skinny Dial() syntax was funky. You had to do Dial(Skinny/line@device)
This allows you to just Dial(Skinny/line), as long as line isn't ambiguous. Note that this does not remove or deprecate the "old" syntax, as it's still quite useful - even moreso if shared lines get implemented. Initial patch by me, with some changes and suggestions from wedhorn. (closes issue #10263) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@76785 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/chan_skinny.c')
-rw-r--r--channels/chan_skinny.c42
1 files changed, 27 insertions, 15 deletions
diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c
index 3bf76e638..67ab62bc4 100644
--- a/channels/chan_skinny.c
+++ b/channels/chan_skinny.c
@@ -1267,37 +1267,49 @@ static struct skinny_line *find_line_by_instance(struct skinny_device *d, int in
static struct skinny_line *find_line_by_name(const char *dest)
{
struct skinny_line *l;
+ struct skinny_line *tmpl = NULL;
struct skinny_device *d;
char line[256];
char *at;
char *device;
+ int checkdevice = 0;
ast_copy_string(line, dest, sizeof(line));
at = strchr(line, '@');
- if (!at) {
- ast_log(LOG_NOTICE, "Device '%s' has no @ (at) sign!\n", dest);
- return NULL;
- }
- *at++ = '\0';
+ if (at)
+ *at++ = '\0';
device = at;
+
+ if (!ast_strlen_zero(device))
+ checkdevice = 1;
+
ast_mutex_lock(&devicelock);
for (d = devices; d; d = d->next) {
- if (!strcasecmp(d->name, device)) {
+ if (checkdevice && tmpl)
+ break;
+ else if (!checkdevice) {
+ /* This is a match, since we're checking for line on every device. */
+ } else if (!strcasecmp(d->name, device)) {
if (skinnydebug)
- ast_verbose("Found device: %s\n", d->name);
- /* Found the device */
- for (l = d->lines; l; l = l->next) {
- /* Search for the right line */
- if (!strcasecmp(l->name, line)) {
+ ast_verbose(VERBOSE_PREFIX_2 "Found device: %s\n", d->name);
+ } else
+ continue;
+
+ /* Found the device (or we don't care which device) */
+ for (l = d->lines; l; l = l->next) {
+ /* Search for the right line */
+ if (!strcasecmp(l->name, line)) {
+ if (tmpl) {
+ ast_verbose(VERBOSE_PREFIX_2 "Ambiguous line name: %s\n", line);
ast_mutex_unlock(&devicelock);
- return l;
- }
+ return NULL;
+ } else
+ tmpl = l;
}
}
}
- /* Device not found */
ast_mutex_unlock(&devicelock);
- return NULL;
+ return tmpl;
}
/* It's quicker/easier to find the subchannel when we know the instance number too */