implement TXTCIDNAME as a dialplan function and mark the application deprecated
[asterisk/asterisk.git] / devicestate.c
index c3e7c52..c85f9a8 100755 (executable)
@@ -1,12 +1,25 @@
 /*
 /*
- * Asterisk -- A telephony toolkit for Linux.
+ * Asterisk -- An open source telephony toolkit.
  *
  *
- * Device state management
- * 
- * Copyright (C) 2005, Digium, Inc.
+ * Copyright (C) 1999 - 2005, Digium, Inc.
+ *
+ * Mark Spencer <markster@digium.com>
+ *
+ * See http://www.asterisk.org for more information about
+ * the Asterisk project. Please do not directly contact
+ * any of the maintainers of this project for assistance;
+ * the project provides a web site, mailing lists and IRC
+ * channels for your use.
  *
  * This program is free software, distributed under the terms of
  *
  * This program is free software, distributed under the terms of
- * the GNU General Public License
+ * the GNU General Public License Version 2. See the LICENSE file
+ * at the top of the source tree.
+ */
+
+/*
+ *
+ * Device state management
+ * 
  */
 
 #include <sys/types.h>
  */
 
 #include <sys/types.h>
@@ -109,9 +122,16 @@ int ast_device_state(const char *device)
                return ast_parse_device_state(device);  /* No, try the generic function */
        else {
                res = chan_tech->devicestate(number);   /* Ask the channel driver for device state */
                return ast_parse_device_state(device);  /* No, try the generic function */
        else {
                res = chan_tech->devicestate(number);   /* Ask the channel driver for device state */
-               if (res == AST_DEVICE_UNKNOWN)
-                       return ast_parse_device_state(device);
-               else
+               if (res == AST_DEVICE_UNKNOWN) {
+                       res = ast_parse_device_state(device);
+                       /* at this point we know the device exists, but the channel driver
+                          could not give us a state; if there is no channel state available,
+                          it must be 'not in use'
+                       */
+                       if (res == AST_DEVICE_UNKNOWN)
+                               res = AST_DEVICE_NOT_INUSE;
+                       return res;
+               } else
                        return res;
        }
 }
                        return res;
        }
 }
@@ -173,22 +193,14 @@ static void do_state_change(const char *device)
        ast_hint_state_changed(device);
 }
 
        ast_hint_state_changed(device);
 }
 
-/*--- ast_device_state_changed: Accept change notification, add it to change queue */
-int ast_device_state_changed(const char *fmt, ...) 
+static int __ast_device_state_changed_literal(char *buf)
 {
 {
-       char buf[AST_MAX_EXTENSION];
        char *device;
        char *parse;
        struct state_change *change = NULL;
        char *device;
        char *parse;
        struct state_change *change = NULL;
-       va_list ap;
-
-       va_start(ap, fmt);
-       vsnprintf(buf, sizeof(buf), fmt, ap);
-       va_end(ap);
 
        parse = buf;
        device = strsep(&parse, "-");
 
        parse = buf;
        device = strsep(&parse, "-");
-
        if (change_thread != AST_PTHREADT_NULL)
                change = calloc(1, sizeof(*change) + strlen(device));
 
        if (change_thread != AST_PTHREADT_NULL)
                change = calloc(1, sizeof(*change) + strlen(device));
 
@@ -210,6 +222,25 @@ int ast_device_state_changed(const char *fmt, ...)
        return 1;
 }
 
        return 1;
 }
 
+int ast_device_state_changed_literal(const char *dev)
+{
+       char *buf;
+       buf = ast_strdupa(dev);
+       return __ast_device_state_changed_literal(buf);
+}
+
+/*--- ast_device_state_changed: Accept change notification, add it to change queue */
+int ast_device_state_changed(const char *fmt, ...) 
+{
+       char buf[AST_MAX_EXTENSION];
+       va_list ap;
+
+       va_start(ap, fmt);
+       vsnprintf(buf, sizeof(buf), fmt, ap);
+       va_end(ap);
+       return __ast_device_state_changed_literal(buf);
+}
+
 /*--- do_devstate_changes: Go through the dev state change queue and update changes in the dev state thread */
 static void *do_devstate_changes(void *data)
 {
 /*--- do_devstate_changes: Go through the dev state change queue and update changes in the dev state thread */
 static void *do_devstate_changes(void *data)
 {