Index: apps/app_chanisavail.c =================================================================== --- apps/app_chanisavail.c (revision 51351) +++ apps/app_chanisavail.c (working copy) @@ -61,12 +61,14 @@ " ${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 @@ 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 @@ *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). */