98static char *
app =
"WaitForCondition";
103 double timeout = 0, poll = 0;
109 char *pos, *open_bracket, *expression, *optargs =
NULL;
126 if (!(open_bracket = strchr(pos,
'[')) || !strchr(open_bracket,
']')) {
127 ast_log(
LOG_ERROR,
"No expression detected. Did you forget to replace the $ signs?\n");
132 dollarsignrep = pos[0];
133 if (dollarsignrep ==
'$' || dollarsignrep ==
'[' || dollarsignrep ==
']'
134 || dollarsignrep ==
'{' || dollarsignrep ==
'}') {
135 ast_log(
LOG_ERROR,
"Dollar sign replacement cannot be %c.\n", dollarsignrep);
146 if (pos[0] != dollarsignrep) {
147 ast_log(
LOG_ERROR,
"Expression start does not match provided replacement: %c\n", pos[0]);
156 if (pos[0] ==
'\0') {
163 }
else if (pos[0] ==
']') {
171 if (pos[0] !=
'\0') {
173 if (pos[0] !=
'\0') {
177 if (sscanf(
args.timeout,
"%30lg", &timeout) != 1) {
181 timeout_ms = timeout * 1000.0;
185 if (sscanf(
args.interval,
"%30lg", &poll) != 1) {
190 ast_log(
LOG_WARNING,
"Polling interval cannot be less than 1ms. Default unchanged.\n");
193 poll_ms = poll * 1000.0;
198 for (i = 0; expression[i] !=
'\0'; i++) {
199 if (expression[i] == dollarsignrep) {
204 if (timeout_ms > 0) {
205 ast_debug(1,
"Waiting for condition for %f seconds: %s (checking every %d ms)", timeout, expression, poll_ms);
207 ast_debug(1,
"Waiting for condition, forever: %s (checking every %d ms)", expression, poll_ms);
AST_MODULE_INFO_STANDARD_EXTENDED(ASTERISK_GPL_KEY, "Wait until condition is true")
static int waitforcond_exec(struct ast_channel *chan, const char *data)
static int load_module(void)
static int unload_module(void)
Asterisk main include file. File version handling, generic pbx functions.
#define ast_strdupa(s)
duplicate a string in memory from the stack
General Asterisk PBX channel definitions.
int ast_safe_sleep(struct ast_channel *chan, int ms)
Wait for a specified amount of time, looking for hangups.
Application convenience functions, designed to give consistent look and feel to Asterisk apps.
#define AST_APP_ARG(name)
Define an application argument.
#define AST_DECLARE_APP_ARGS(name, arglist)
Declare a structure to hold an application's arguments.
#define AST_STANDARD_APP_ARGS(args, parse)
Performs the 'standard' argument separation process for an application.
Support for logging to various files, console and syslog Configuration in file logger....
#define ast_debug(level,...)
Log a DEBUG message.
Asterisk module definitions.
#define ASTERISK_GPL_KEY
The text the key() function should return.
int ast_unregister_application(const char *app)
Unregister an application.
#define ast_register_application_xml(app, execute)
Register an application using XML documentation.
Core PBX routines and definitions.
int pbx_builtin_setvar_helper(struct ast_channel *chan, const char *name, const char *value)
Add a variable to the channel variable stack, removing the most recently set value for the same name.
int pbx_checkcondition(const char *condition)
Evaluate a condition.
void pbx_substitute_variables_helper(struct ast_channel *c, const char *cp1, char *cp2, int count)
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Main Channel structure associated with a channel.
int ast_remaining_ms(struct timeval start, int max_ms)
Calculate remaining milliseconds given a starting timestamp and upper bound.
struct timeval ast_tvnow(void)
Returns current timeval. Meant to replace calls to gettimeofday().