As per bug 8859 (Add option to revert old ChanIsAvail() with 's' option behavior...
authorSteve Murphy <murf@digium.com>
Wed, 24 Jan 2007 20:35:54 +0000 (20:35 +0000)
committerSteve Murphy <murf@digium.com>
Wed, 24 Jan 2007 20:35:54 +0000 (20:35 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@52086 65c4cc65-6c06-0410-ace0-fbb531ad65f3

UPGRADE.txt
apps/app_chanisavail.c

index 169969a..c54709e 100644 (file)
@@ -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.
index c6931d8..8852255 100644 (file)
@@ -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).  */