Merge "astobj2: Create function to copy weak proxied objects from container."
[asterisk/asterisk.git] / apps / app_flash.c
index f1e652a..d55993e 100644 (file)
 
 /*! \file
  *
- * \brief App to flash a zap trunk
+ * \brief App to flash a DAHDI trunk
  *
  * \author Mark Spencer <markster@digium.com>
- * 
+ *
  * \ingroup applications
  */
+
 /*** MODULEINFO
-       <depend>zaptel</depend>
+       <depend>dahdi</depend>
+       <support_level>core</support_level>
  ***/
 
 #include "asterisk.h"
 
-ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/ioctl.h>
-#ifdef __linux__
-#include <linux/zaptel.h>
-#else
-#include <zaptel.h>
-#endif /* __linux__ */
+#include <dahdi/user.h>
 
 #include "asterisk/lock.h"
 #include "asterisk/file.h"
-#include "asterisk/logger.h"
 #include "asterisk/channel.h"
 #include "asterisk/pbx.h"
 #include "asterisk/module.h"
 #include "asterisk/translate.h"
 #include "asterisk/image.h"
-#include "asterisk/options.h"
-
-static char *app = "Flash";
 
-static char *synopsis = "Flashes a Zap Trunk";
-
-static char *descrip = 
-"  Flash(): Sends a flash on a zap trunk.  This is only a hack for\n"
-"people who want to perform transfers and such via AGI and is generally\n"
-"quite useless oths application will only work on Zap trunks.\n";
+/*** DOCUMENTATION
+       <application name="Flash" language="en_US">
+               <synopsis>
+                       Flashes a DAHDI Trunk.
+               </synopsis>
+               <syntax />
+               <description>
+                       <para>Performs a flash on a DAHDI trunk. This can be used to access features
+                       provided on an incoming analogue circuit such as conference and call waiting.
+                       Use with SendDTMF() to perform external transfers.</para>
+               </description>
+               <see-also>
+                       <ref type="application">SendDTMF</ref>
+               </see-also>
+       </application>
+ ***/
 
-LOCAL_USER_DECL;
+static char *app = "Flash";
 
-static inline int zt_wait_event(int fd)
+static inline int dahdi_wait_event(int fd)
 {
-       /* Avoid the silly zt_waitevent which ignores a bunch of events */
+       /* Avoid the silly dahdi_waitevent which ignores a bunch of events */
        int i,j=0;
-       i = ZT_IOMUX_SIGEVENT;
-       if (ioctl(fd, ZT_IOMUX, &i) == -1) return -1;
-       if (ioctl(fd, ZT_GETEVENT, &j) == -1) return -1;
+       i = DAHDI_IOMUX_SIGEVENT;
+       if (ioctl(fd, DAHDI_IOMUX, &i) == -1) return -1;
+       if (ioctl(fd, DAHDI_GETEVENT, &j) == -1) return -1;
        return j;
 }
 
-static int flash_exec(struct ast_channel *chan, void *data)
+static int flash_exec(struct ast_channel *chan, const char *data)
 {
        int res = -1;
        int x;
-       struct localuser *u;
-       struct zt_params ztp;
-       LOCAL_USER_ADD(u);
-       if (!strcasecmp(chan->tech->type, "Zap")) {
-               memset(&ztp, 0, sizeof(ztp));
-               res = ioctl(chan->fds[0], ZT_GET_PARAMS, &ztp);
-               if (!res) {
-                       if (ztp.sigtype & __ZT_SIG_FXS) {
-                               x = ZT_FLASH;
-                               res = ioctl(chan->fds[0], ZT_HOOK, &x);
-                               if (!res || (errno == EINPROGRESS)) {
-                                       if (res) {
-                                               /* Wait for the event to finish */
-                                               zt_wait_event(chan->fds[0]);
-                                       }
-                                       res = ast_safe_sleep(chan, 1000);
-                                       if (option_verbose > 2)
-                                               ast_verbose(VERBOSE_PREFIX_3 "Flashed channel %s\n", chan->name);
-                               } else
-                                       ast_log(LOG_WARNING, "Unable to flash channel %s: %s\n", chan->name, strerror(errno));
+       struct dahdi_params dahdip;
+
+       if (strcasecmp(ast_channel_tech(chan)->type, "DAHDI")) {
+               ast_log(LOG_WARNING, "%s is not a DAHDI channel\n", ast_channel_name(chan));
+               return -1;
+       }
+
+       memset(&dahdip, 0, sizeof(dahdip));
+       res = ioctl(ast_channel_fd(chan, 0), DAHDI_GET_PARAMS, &dahdip);
+       if (!res) {
+               if (dahdip.sigtype & __DAHDI_SIG_FXS) {
+                       x = DAHDI_FLASH;
+                       res = ioctl(ast_channel_fd(chan, 0), DAHDI_HOOK, &x);
+                       if (!res || (errno == EINPROGRESS)) {
+                               if (res) {
+                                       /* Wait for the event to finish */
+                                       dahdi_wait_event(ast_channel_fd(chan, 0));
+                               }
+                               res = ast_safe_sleep(chan, 1000);
+                               ast_verb(3, "Flashed channel %s\n", ast_channel_name(chan));
                        } else
-                               ast_log(LOG_WARNING, "%s is not an FXO Channel\n", chan->name);
+                               ast_log(LOG_WARNING, "Unable to flash channel %s: %s\n", ast_channel_name(chan), strerror(errno));
                } else
-                       ast_log(LOG_WARNING, "Unable to get parameters of %s: %s\n", chan->name, strerror(errno));
+                       ast_log(LOG_WARNING, "%s is not an FXO Channel\n", ast_channel_name(chan));
        } else
-               ast_log(LOG_WARNING, "%s is not a Zap channel\n", chan->name);
-       LOCAL_USER_REMOVE(u);
-       return res;
-}
-
-static int unload_module(void *mod)
-{
-       int res;
-
-       res = ast_unregister_application(app);
-
-       STANDARD_HANGUP_LOCALUSERS;
+               ast_log(LOG_WARNING, "Unable to get parameters of %s: %s\n", ast_channel_name(chan), strerror(errno));
 
        return res;
 }
 
-static int load_module(void *mod)
+static int unload_module(void)
 {
-       return ast_register_application(app, flash_exec, synopsis, descrip);
+       return ast_unregister_application(app);
 }
 
-static const char *description(void)
+static int load_module(void)
 {
-       return "Flash zap trunk application";
+       return ast_register_application_xml(app, flash_exec);
 }
 
-static const char *key(void)
-{
-       return ASTERISK_GPL_KEY;
-}
-
-STD_MOD1;
-
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Flash channel application");