Channel timeout related dialplan functions. More...
#include "asterisk.h"
#include "asterisk/module.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/utils.h"
#include "asterisk/app.h"
Go to the source code of this file.
Functions | |
AST_MODULE_INFO_STANDARD (ASTERISK_GPL_KEY,"Channel timeout dialplan functions") | |
static int | load_module (void) |
static int | timeout_read (struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len) |
static int | timeout_write (struct ast_channel *chan, const char *cmd, char *data, const char *value) |
static int | unload_module (void) |
Variables | |
static struct ast_custom_function | timeout_function |
Channel timeout related dialplan functions.
Definition in file func_timeout.c.
AST_MODULE_INFO_STANDARD | ( | ASTERISK_GPL_KEY | , | |
"Channel timeout dialplan functions" | ||||
) |
static int load_module | ( | void | ) | [static] |
Definition at line 207 of file func_timeout.c.
References ast_custom_function_register.
00208 { 00209 return ast_custom_function_register(&timeout_function); 00210 }
static int timeout_read | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
char * | buf, | |||
size_t | len | |||
) | [static] |
Definition at line 77 of file func_timeout.c.
References ast_copy_string(), ast_log(), ast_tvdiff_ms(), ast_tvnow(), ast_tvzero(), ast_pbx::dtimeoutms, LOG_ERROR, ast_channel::pbx, ast_pbx::rtimeoutms, and ast_channel::whentohangup.
00079 { 00080 struct timeval myt; 00081 00082 if (!chan) 00083 return -1; 00084 00085 if (!data) { 00086 ast_log(LOG_ERROR, "Must specify type of timeout to get.\n"); 00087 return -1; 00088 } 00089 00090 switch (*data) { 00091 case 'a': 00092 case 'A': 00093 if (ast_tvzero(chan->whentohangup)) { 00094 ast_copy_string(buf, "0", len); 00095 } else { 00096 myt = ast_tvnow(); 00097 snprintf(buf, len, "%.3f", ast_tvdiff_ms(chan->whentohangup, myt) / 1000.0); 00098 } 00099 break; 00100 00101 case 'r': 00102 case 'R': 00103 if (chan->pbx) { 00104 snprintf(buf, len, "%.3f", chan->pbx->rtimeoutms / 1000.0); 00105 } 00106 break; 00107 00108 case 'd': 00109 case 'D': 00110 if (chan->pbx) { 00111 snprintf(buf, len, "%.3f", chan->pbx->dtimeoutms / 1000.0); 00112 } 00113 break; 00114 00115 default: 00116 ast_log(LOG_ERROR, "Unknown timeout type specified.\n"); 00117 return -1; 00118 } 00119 00120 return 0; 00121 }
static int timeout_write | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
const char * | value | |||
) | [static] |
Definition at line 123 of file func_timeout.c.
References ast_channel_setwhentohangup_tv(), ast_localtime(), ast_log(), ast_strftime(), ast_tvadd(), ast_tvnow(), ast_tvzero(), ast_verb, ast_verbose, ast_pbx::dtimeoutms, LOG_ERROR, ast_channel::pbx, ast_pbx::rtimeoutms, VERBOSITY_ATLEAST, and ast_channel::whentohangup.
00125 { 00126 double x = 0.0; 00127 long sec = 0L; 00128 char timestr[64]; 00129 struct ast_tm myt; 00130 struct timeval when = {0,}; 00131 int res; 00132 00133 if (!chan) 00134 return -1; 00135 00136 if (!data) { 00137 ast_log(LOG_ERROR, "Must specify type of timeout to set.\n"); 00138 return -1; 00139 } 00140 00141 if (!value) 00142 return -1; 00143 00144 res = sscanf(value, "%30ld%30lf", &sec, &x); 00145 if (res == 0 || sec < 0) { 00146 when.tv_sec = 0; 00147 when.tv_usec = 0; 00148 } else if (res == 1) { 00149 when.tv_sec = sec; 00150 } else if (res == 2) { 00151 when.tv_sec = sec; 00152 when.tv_usec = x * 1000000; 00153 } 00154 00155 switch (*data) { 00156 case 'a': 00157 case 'A': 00158 ast_channel_setwhentohangup_tv(chan, when); 00159 if (VERBOSITY_ATLEAST(3)) { 00160 if (!ast_tvzero(chan->whentohangup)) { 00161 when = ast_tvadd(when, ast_tvnow()); 00162 ast_strftime(timestr, sizeof(timestr), "%Y-%m-%d %H:%M:%S.%3q %Z", 00163 ast_localtime(&when, &myt, NULL)); 00164 ast_verbose("Channel will hangup at %s.\n", timestr); 00165 } else { 00166 ast_verbose("Channel hangup cancelled.\n"); 00167 } 00168 } 00169 break; 00170 00171 case 'r': 00172 case 'R': 00173 if (chan->pbx) { 00174 chan->pbx->rtimeoutms = when.tv_sec * 1000 + when.tv_usec / 1000; 00175 ast_verb(3, "Response timeout set to %.3f\n", chan->pbx->rtimeoutms / 1000.0); 00176 } 00177 break; 00178 00179 case 'd': 00180 case 'D': 00181 if (chan->pbx) { 00182 chan->pbx->dtimeoutms = when.tv_sec * 1000 + when.tv_usec / 1000; 00183 ast_verb(3, "Digit timeout set to %.3f\n", chan->pbx->dtimeoutms / 1000.0); 00184 } 00185 break; 00186 00187 default: 00188 ast_log(LOG_ERROR, "Unknown timeout type specified.\n"); 00189 break; 00190 } 00191 00192 return 0; 00193 }
static int unload_module | ( | void | ) | [static] |
Definition at line 202 of file func_timeout.c.
References ast_custom_function_unregister().
00203 { 00204 return ast_custom_function_unregister(&timeout_function); 00205 }
struct ast_custom_function timeout_function [static] |
Definition at line 195 of file func_timeout.c.