diff --git a/UPGRADE.txt b/UPGRADE.txt index 169969ae96..c54709eb88 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 c6931d8dba..8852255574 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). */