Asterisk - The Open Source Telephony Project GIT-master-27fb039
Loading...
Searching...
No Matches
Functions | Variables
func_timeout.c File Reference

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"
Include dependency graph for func_timeout.c:

Go to the source code of this file.

Functions

static void __reg_module (void)
 
static void __unreg_module (void)
 
struct ast_moduleAST_MODULE_SELF_SYM (void)
 
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_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Channel timeout dialplan functions" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, .support_level = AST_MODULE_SUPPORT_CORE, }
 
static const struct ast_module_infoast_module_info = &__mod_info
 
static struct ast_custom_function timeout_function
 

Detailed Description

Channel timeout related dialplan functions.

Author
Mark Spencer marks.nosp@m.ter@.nosp@m.digiu.nosp@m.m.co.nosp@m.m

Definition in file func_timeout.c.

Function Documentation

◆ __reg_module()

static void __reg_module ( void  )
static

Definition at line 215 of file func_timeout.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 215 of file func_timeout.c.

◆ AST_MODULE_SELF_SYM()

struct ast_module * AST_MODULE_SELF_SYM ( void  )

Definition at line 215 of file func_timeout.c.

◆ load_module()

static int load_module ( void  )
static

Definition at line 210 of file func_timeout.c.

211{
213}
static struct ast_custom_function timeout_function
#define ast_custom_function_register(acf)
Register a custom function.
Definition pbx.h:1562

References ast_custom_function_register, and timeout_function.

◆ timeout_read()

static int timeout_read ( struct ast_channel chan,
const char *  cmd,
char *  data,
char *  buf,
size_t  len 
)
static

Definition at line 78 of file func_timeout.c.

80{
81 struct timeval myt;
82
83 if (!chan)
84 return -1;
85
86 if (!data) {
87 ast_log(LOG_ERROR, "Must specify type of timeout to get.\n");
88 return -1;
89 }
90
91 switch (*data) {
92 case 'a':
93 case 'A':
95 ast_copy_string(buf, "0", len);
96 } else {
97 myt = ast_tvnow();
98 snprintf(buf, len, "%.3f", ast_tvdiff_ms(*ast_channel_whentohangup(chan), myt) / 1000.0);
99 }
100 break;
101
102 case 'r':
103 case 'R':
104 if (ast_channel_pbx(chan)) {
105 snprintf(buf, len, "%.3f", ast_channel_pbx(chan)->rtimeoutms / 1000.0);
106 }
107 break;
108
109 case 'd':
110 case 'D':
111 if (ast_channel_pbx(chan)) {
112 snprintf(buf, len, "%.3f", ast_channel_pbx(chan)->dtimeoutms / 1000.0);
113 }
114 break;
115
116 default:
117 ast_log(LOG_ERROR, "Unknown timeout type specified.\n");
118 return -1;
119 }
120
121 return 0;
122}
#define ast_log
Definition astobj2.c:42
struct timeval * ast_channel_whentohangup(struct ast_channel *chan)
struct ast_pbx * ast_channel_pbx(const struct ast_channel *chan)
char buf[BUFSIZE]
Definition eagi_proxy.c:66
static int len(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t buflen)
#define LOG_ERROR
void ast_copy_string(char *dst, const char *src, size_t size)
Size-limited null-terminating string copy.
Definition strings.h:425
int ast_tvzero(const struct timeval t)
Returns true if the argument is 0,0.
Definition time.h:117
int64_t ast_tvdiff_ms(struct timeval end, struct timeval start)
Computes the difference (in milliseconds) between two struct timeval instances.
Definition time.h:107
struct timeval ast_tvnow(void)
Returns current timeval. Meant to replace calls to gettimeofday().
Definition time.h:159

References ast_channel_pbx(), ast_channel_whentohangup(), ast_copy_string(), ast_log, ast_tvdiff_ms(), ast_tvnow(), ast_tvzero(), buf, len(), and LOG_ERROR.

◆ timeout_write()

static int timeout_write ( struct ast_channel chan,
const char *  cmd,
char *  data,
const char *  value 
)
static

Definition at line 124 of file func_timeout.c.

126{
127 double x = 0.0;
128 long sec = 0L;
129 char timestr[64];
130 struct ast_tm myt;
131 struct timeval when = {0,};
132 int res;
133
134 if (!chan)
135 return -1;
136
137 if (!data) {
138 ast_log(LOG_ERROR, "Must specify type of timeout to set.\n");
139 return -1;
140 }
141
142 if (!value)
143 return -1;
144
145 res = sscanf(value, "%30ld%30lf", &sec, &x);
146 if (res == 0 || sec < 0) {
147 when.tv_sec = 0;
148 when.tv_usec = 0;
149 } else if (res == 1) {
150 when.tv_sec = sec;
151 } else if (res == 2) {
152 when.tv_sec = sec;
153 when.tv_usec = x * 1000000;
154 }
155
156 switch (*data) {
157 case 'a':
158 case 'A':
159 ast_channel_lock(chan);
161 ast_channel_unlock(chan);
162 if (VERBOSITY_ATLEAST(3)) {
164 when = ast_tvadd(when, ast_tvnow());
165 ast_strftime(timestr, sizeof(timestr), "%Y-%m-%d %H:%M:%S.%3q %Z",
166 ast_localtime(&when, &myt, NULL));
167 ast_verb(3, "Channel will hangup at %s.\n", timestr);
168 } else {
169 ast_verb(3, "Channel hangup cancelled.\n");
170 }
171 }
172 break;
173
174 case 'r':
175 case 'R':
176 if (ast_channel_pbx(chan)) {
177 ast_channel_pbx(chan)->rtimeoutms = when.tv_sec * 1000 + when.tv_usec / 1000;
178 ast_verb(3, "Response timeout set to %.3f\n", ast_channel_pbx(chan)->rtimeoutms / 1000.0);
179 }
180 break;
181
182 case 'd':
183 case 'D':
184 if (ast_channel_pbx(chan)) {
185 ast_channel_pbx(chan)->dtimeoutms = when.tv_sec * 1000 + when.tv_usec / 1000;
186 ast_verb(3, "Digit timeout set to %.3f\n", ast_channel_pbx(chan)->dtimeoutms / 1000.0);
187 }
188 break;
189
190 default:
191 ast_log(LOG_ERROR, "Unknown timeout type specified.\n");
192 break;
193 }
194
195 return 0;
196}
#define ast_channel_lock(chan)
Definition channel.h:2982
void ast_channel_setwhentohangup_tv(struct ast_channel *chan, struct timeval offset)
Set when to hang a channel up.
Definition channel.c:510
#define ast_channel_unlock(chan)
Definition channel.h:2983
#define VERBOSITY_ATLEAST(level)
#define ast_verb(level,...)
struct ast_tm * ast_localtime(const struct timeval *timep, struct ast_tm *p_tm, const char *zone)
Timezone-independent version of localtime_r(3).
Definition localtime.c:1739
int ast_strftime(char *buf, size_t len, const char *format, const struct ast_tm *tm)
Special version of strftime(3) that handles fractions of a second. Takes the same arguments as strfti...
Definition localtime.c:2524
#define NULL
Definition resample.c:96
int rtimeoutms
Definition pbx.h:217
int dtimeoutms
Definition pbx.h:216
int value
Definition syslog.c:37
struct timeval ast_tvadd(struct timeval a, struct timeval b)
Returns the sum of two timevals a + b.
Definition extconf.c:2280

References ast_channel_lock, ast_channel_pbx(), ast_channel_setwhentohangup_tv(), ast_channel_unlock, ast_channel_whentohangup(), ast_localtime(), ast_log, ast_strftime(), ast_tvadd(), ast_tvnow(), ast_tvzero(), ast_verb, ast_pbx::dtimeoutms, LOG_ERROR, NULL, ast_pbx::rtimeoutms, value, and VERBOSITY_ATLEAST.

◆ unload_module()

static int unload_module ( void  )
static

Definition at line 205 of file func_timeout.c.

206{
208}
int ast_custom_function_unregister(struct ast_custom_function *acf)
Unregister a custom function.

References ast_custom_function_unregister(), and timeout_function.

Variable Documentation

◆ __mod_info

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Channel timeout dialplan functions" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, .support_level = AST_MODULE_SUPPORT_CORE, }
static

Definition at line 215 of file func_timeout.c.

◆ ast_module_info

const struct ast_module_info* ast_module_info = &__mod_info
static

Definition at line 215 of file func_timeout.c.

◆ timeout_function

struct ast_custom_function timeout_function
static

Definition at line 198 of file func_timeout.c.

198 {
199 .name = "TIMEOUT",
200 .read = timeout_read,
201 .read_max = 22,
202 .write = timeout_write,
203};
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)

Referenced by load_module(), and unload_module().