#include "asterisk.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <zaptel/zaptel.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"
Include dependency graph for app_flash.c:
Go to the source code of this file.
Functions | |
AST_MODULE_INFO_STANDARD (ASTERISK_GPL_KEY,"Flash channel application") | |
static int | flash_exec (struct ast_channel *chan, void *data) |
static int | load_module (void) |
static int | unload_module (void) |
static int | zt_wait_event (int fd) |
Variables | |
static char * | app = "Flash" |
static char * | descrip |
static char * | synopsis = "Flashes a Zap Trunk" |
Definition in file app_flash.c.
AST_MODULE_INFO_STANDARD | ( | ASTERISK_GPL_KEY | , | |
"Flash channel application" | ||||
) |
static int flash_exec | ( | struct ast_channel * | chan, | |
void * | data | |||
) | [static] |
Definition at line 74 of file app_flash.c.
References ast_log(), ast_module_user_add, ast_module_user_remove, ast_safe_sleep(), ast_verbose(), errno, ast_channel::fds, LOG_WARNING, option_verbose, ast_channel::tech, ast_channel_tech::type, VERBOSE_PREFIX_3, and zt_wait_event().
Referenced by load_module().
00075 { 00076 int res = -1; 00077 int x; 00078 struct ast_module_user *u; 00079 struct zt_params ztp; 00080 u = ast_module_user_add(chan); 00081 if (!strcasecmp(chan->tech->type, "Zap")) { 00082 memset(&ztp, 0, sizeof(ztp)); 00083 res = ioctl(chan->fds[0], ZT_GET_PARAMS, &ztp); 00084 if (!res) { 00085 if (ztp.sigtype & __ZT_SIG_FXS) { 00086 x = ZT_FLASH; 00087 res = ioctl(chan->fds[0], ZT_HOOK, &x); 00088 if (!res || (errno == EINPROGRESS)) { 00089 if (res) { 00090 /* Wait for the event to finish */ 00091 zt_wait_event(chan->fds[0]); 00092 } 00093 res = ast_safe_sleep(chan, 1000); 00094 if (option_verbose > 2) 00095 ast_verbose(VERBOSE_PREFIX_3 "Flashed channel %s\n", chan->name); 00096 } else 00097 ast_log(LOG_WARNING, "Unable to flash channel %s: %s\n", chan->name, strerror(errno)); 00098 } else 00099 ast_log(LOG_WARNING, "%s is not an FXO Channel\n", chan->name); 00100 } else 00101 ast_log(LOG_WARNING, "Unable to get parameters of %s: %s\n", chan->name, strerror(errno)); 00102 } else 00103 ast_log(LOG_WARNING, "%s is not a Zap channel\n", chan->name); 00104 ast_module_user_remove(u); 00105 return res; 00106 }
static int load_module | ( | void | ) | [static] |
Definition at line 119 of file app_flash.c.
References ast_register_application(), and flash_exec().
00120 { 00121 return ast_register_application(app, flash_exec, synopsis, descrip); 00122 }
static int unload_module | ( | void | ) | [static] |
Definition at line 108 of file app_flash.c.
References ast_module_user_hangup_all, and ast_unregister_application().
00109 { 00110 int res; 00111 00112 res = ast_unregister_application(app); 00113 00114 ast_module_user_hangup_all(); 00115 00116 return res; 00117 }
static int zt_wait_event | ( | int | fd | ) | [inline, static] |
Definition at line 64 of file app_flash.c.
00065 { 00066 /* Avoid the silly zt_waitevent which ignores a bunch of events */ 00067 int i,j=0; 00068 i = ZT_IOMUX_SIGEVENT; 00069 if (ioctl(fd, ZT_IOMUX, &i) == -1) return -1; 00070 if (ioctl(fd, ZT_GETEVENT, &j) == -1) return -1; 00071 return j; 00072 }
char* app = "Flash" [static] |
Definition at line 53 of file app_flash.c.
char* descrip [static] |
Initial value:
"Performs a flash on a zap trunk. This can be used\n" "to access features provided on an incoming analogue circuit\n" "such as conference and call waiting. Use with SendDTMF() to\n" "perform external transfers\n"
Definition at line 57 of file app_flash.c.
char* synopsis = "Flashes a Zap Trunk" [static] |
Definition at line 55 of file app_flash.c.