aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--UPGRADE.txt3
-rw-r--r--apps/app_chanisavail.c14
2 files changed, 15 insertions, 2 deletions
diff --git a/UPGRADE.txt b/UPGRADE.txt
index 169969ae9..c54709eb8 100644
--- a/UPGRADE.txt
+++ b/UPGRADE.txt
@@ -31,3 +31,6 @@ Applications:
to make them more distinguishable from 'maxmsgs', which sets folder
size. The old variables will continue to work in this version, albeit
with a deprecation warning.
+* ChanIsAvail() now has a 't' option, which allows the specified device
+ to be queried for state without consulting the channel drivers. This
+ performs mostly a 'ChanExists' sort of function.
diff --git a/apps/app_chanisavail.c b/apps/app_chanisavail.c
index c6931d8db..885225557 100644
--- a/apps/app_chanisavail.c
+++ b/apps/app_chanisavail.c
@@ -61,12 +61,14 @@ static char *descrip =
" ${AVAILSTATUS} - the status code for the available channel\n"
" Options:\n"
" s - Consider the channel unavailable if the channel is in use at all\n"
+" t - Simply checks if specified channels exist in the channel list\n"
+" (implies option s) \n"
" j - Support jumping to priority n+101 if no channel is available\n";
static int chanavail_exec(struct ast_channel *chan, void *data)
{
- int res=-1, inuse=-1, option_state=0, priority_jump=0;
+ int res=-1, inuse=-1, option_state=0, priority_jump=0, string_compare=0;
int status;
struct ast_module_user *u;
char *info, tmp[512], trychan[512], *peers, *tech, *number, *rest, *cur;
@@ -90,6 +92,8 @@ static int chanavail_exec(struct ast_channel *chan, void *data)
if (args.options) {
if (strchr(args.options, 's'))
option_state = 1;
+ if (strchr(args.options, 't'))
+ string_compare = 1;
if (strchr(args.options, 'j'))
priority_jump = 1;
}
@@ -113,7 +117,13 @@ static int chanavail_exec(struct ast_channel *chan, void *data)
*number = '\0';
number++;
- if (option_state) {
+ if (string_compare) {
+ /* ast_parse_device_state checks for "SIP/1234" as a channel name.
+ ast_device_state will ask the SIP driver for the channel state. */
+
+ snprintf(trychan, sizeof(trychan), "%s/%s",cur,number);
+ status = inuse = ast_parse_device_state(trychan);
+ } else if (option_state) {
/* If the pbx says in use then don't bother trying further.
This is to permit testing if someone's on a call, even if the
channel can permit more calls (ie callwaiting, sip calls, etc). */