#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 | |
static void | __reg_module (void) |
static void | __unreg_module (void) |
static int | acf_if (struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len) |
static int | exists (struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len) |
static int | iftime (struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len) |
static int | import_helper (struct ast_channel *chan, const char *cmd, char *data, char *buf, struct ast_str **str, ssize_t len) |
static int | import_read (struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len) |
static int | import_read2 (struct ast_channel *chan, const char *cmd, char *data, struct ast_str **str, ssize_t len) |
static int | isnull (struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len) |
static int | load_module (void) |
static int | set (struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len) |
static int | set2 (struct ast_channel *chan, const char *cmd, char *data, struct ast_str **str, ssize_t len) |
static int | unload_module (void) |
Variables | |
static struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Logical dialplan functions" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "8586c2a7d357cb591cc3a6607a8f62d1" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } |
static struct ast_module_info * | ast_module_info = &__mod_info |
static struct ast_custom_function | exists_function |
static struct ast_custom_function | if_function |
static struct ast_custom_function | if_time_function |
static struct ast_custom_function | import_function |
static struct ast_custom_function | isnull_function |
static struct ast_custom_function | set_function |
Definition in file func_logic.c.
static void __reg_module | ( | void | ) | [static] |
Definition at line 339 of file func_logic.c.
static void __unreg_module | ( | void | ) | [static] |
Definition at line 339 of file func_logic.c.
static int acf_if | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
char * | buf, | |||
size_t | len | |||
) | [static] |
Definition at line 166 of file func_logic.c.
References AST_APP_ARG, ast_copy_string(), AST_DECLARE_APP_ARGS, ast_log(), AST_NONSTANDARD_APP_ARGS, ast_strip(), ast_strlen_zero(), LOG_WARNING, pbx_checkcondition(), and S_OR.
00168 { 00169 AST_DECLARE_APP_ARGS(args1, 00170 AST_APP_ARG(expr); 00171 AST_APP_ARG(remainder); 00172 ); 00173 AST_DECLARE_APP_ARGS(args2, 00174 AST_APP_ARG(iftrue); 00175 AST_APP_ARG(iffalse); 00176 ); 00177 args2.iftrue = args2.iffalse = NULL; /* you have to set these, because if there is nothing after the '?', 00178 then args1.remainder will be NULL, not a pointer to a null string, and 00179 then any garbage in args2.iffalse will not be cleared, and you'll crash. 00180 -- and if you mod the ast_app_separate_args func instead, you'll really 00181 mess things up badly, because the rest of everything depends on null args 00182 for non-specified stuff. */ 00183 00184 AST_NONSTANDARD_APP_ARGS(args1, data, '?'); 00185 AST_NONSTANDARD_APP_ARGS(args2, args1.remainder, ':'); 00186 00187 if (ast_strlen_zero(args1.expr) || !(args2.iftrue || args2.iffalse)) { 00188 ast_log(LOG_WARNING, "Syntax IF(<expr>?[<true>][:<false>]) (expr must be non-null, and either <true> or <false> must be non-null)\n"); 00189 ast_log(LOG_WARNING, " In this case, <expr>='%s', <true>='%s', and <false>='%s'\n", args1.expr, args2.iftrue, args2.iffalse); 00190 return -1; 00191 } 00192 00193 args1.expr = ast_strip(args1.expr); 00194 if (args2.iftrue) 00195 args2.iftrue = ast_strip(args2.iftrue); 00196 if (args2.iffalse) 00197 args2.iffalse = ast_strip(args2.iffalse); 00198 00199 ast_copy_string(buf, pbx_checkcondition(args1.expr) ? (S_OR(args2.iftrue, "")) : (S_OR(args2.iffalse, "")), len); 00200 00201 return 0; 00202 }
static int exists | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
char * | buf, | |||
size_t | len | |||
) | [static] |
static int iftime | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
char * | buf, | |||
size_t | len | |||
) | [static] |
Definition at line 130 of file func_logic.c.
References ast_build_timing(), ast_check_timing(), ast_copy_string(), ast_destroy_timing(), ast_log(), ast_strip_quoted(), ast_strlen_zero(), LOG_WARNING, S_OR, and strsep().
00132 { 00133 struct ast_timing timing; 00134 char *expr; 00135 char *iftrue; 00136 char *iffalse; 00137 00138 data = ast_strip_quoted(data, "\"", "\""); 00139 expr = strsep(&data, "?"); 00140 iftrue = strsep(&data, ":"); 00141 iffalse = data; 00142 00143 if (ast_strlen_zero(expr) || !(iftrue || iffalse)) { 00144 ast_log(LOG_WARNING, 00145 "Syntax IFTIME(<timespec>?[<true>][:<false>])\n"); 00146 return -1; 00147 } 00148 00149 if (!ast_build_timing(&timing, expr)) { 00150 ast_log(LOG_WARNING, "Invalid Time Spec.\n"); 00151 ast_destroy_timing(&timing); 00152 return -1; 00153 } 00154 00155 if (iftrue) 00156 iftrue = ast_strip_quoted(iftrue, "\"", "\""); 00157 if (iffalse) 00158 iffalse = ast_strip_quoted(iffalse, "\"", "\""); 00159 00160 ast_copy_string(buf, ast_check_timing(&timing) ? S_OR(iftrue, "") : S_OR(iffalse, ""), len); 00161 ast_destroy_timing(&timing); 00162 00163 return 0; 00164 }
static int import_helper | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
char * | buf, | |||
struct ast_str ** | str, | |||
ssize_t | len | |||
) | [static] |
Definition at line 234 of file func_logic.c.
References args, AST_APP_ARG, ast_channel_get_by_name(), ast_channel_lock, ast_channel_unlock, ast_channel_unref, AST_DECLARE_APP_ARGS, AST_STANDARD_APP_ARGS, ast_str_substitute_variables(), ast_strlen_zero(), pbx_substitute_variables_helper(), and str.
Referenced by import_read(), and import_read2().
00235 { 00236 AST_DECLARE_APP_ARGS(args, 00237 AST_APP_ARG(channel); 00238 AST_APP_ARG(varname); 00239 ); 00240 AST_STANDARD_APP_ARGS(args, data); 00241 if (buf) { 00242 *buf = '\0'; 00243 } 00244 00245 if (!ast_strlen_zero(args.varname)) { 00246 struct ast_channel *chan2; 00247 00248 if ((chan2 = ast_channel_get_by_name(args.channel))) { 00249 char *s = alloca(strlen(args.varname) + 4); 00250 if (s) { 00251 sprintf(s, "${%s}", args.varname); 00252 ast_channel_lock(chan2); 00253 if (buf) { 00254 pbx_substitute_variables_helper(chan2, s, buf, len); 00255 } else { 00256 ast_str_substitute_variables(str, len, chan2, s); 00257 } 00258 ast_channel_unlock(chan2); 00259 } 00260 chan2 = ast_channel_unref(chan2); 00261 } 00262 } 00263 00264 return 0; 00265 }
static int import_read | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
char * | buf, | |||
size_t | len | |||
) | [static] |
Definition at line 267 of file func_logic.c.
References import_helper().
00268 { 00269 return import_helper(chan, cmd, data, buf, NULL, len); 00270 }
static int import_read2 | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
struct ast_str ** | str, | |||
ssize_t | len | |||
) | [static] |
Definition at line 272 of file func_logic.c.
References import_helper(), and str.
00273 { 00274 return import_helper(chan, cmd, data, NULL, str, len); 00275 }
static int isnull | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
char * | buf, | |||
size_t | len | |||
) | [static] |
static int load_module | ( | void | ) | [static] |
Definition at line 325 of file func_logic.c.
References ast_custom_function_register, exists_function, if_function, if_time_function, import_function, isnull_function, and set_function.
00326 { 00327 int res = 0; 00328 00329 res |= ast_custom_function_register(&isnull_function); 00330 res |= ast_custom_function_register(&set_function); 00331 res |= ast_custom_function_register(&exists_function); 00332 res |= ast_custom_function_register(&if_function); 00333 res |= ast_custom_function_register(&if_time_function); 00334 res |= ast_custom_function_register(&import_function); 00335 00336 return res; 00337 }
static int set | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
char * | buf, | |||
size_t | len | |||
) | [static] |
Definition at line 204 of file func_logic.c.
References ast_copy_string(), ast_log(), ast_strip(), ast_strlen_zero(), LOG_WARNING, pbx_builtin_setvar_helper(), and strsep().
Referenced by set2().
00206 { 00207 char *varname; 00208 char *val; 00209 00210 varname = strsep(&data, "="); 00211 val = data; 00212 00213 if (ast_strlen_zero(varname) || !val) { 00214 ast_log(LOG_WARNING, "Syntax SET(<varname>=[<value>])\n"); 00215 return -1; 00216 } 00217 00218 varname = ast_strip(varname); 00219 val = ast_strip(val); 00220 pbx_builtin_setvar_helper(chan, varname, val); 00221 ast_copy_string(buf, val, len); 00222 00223 return 0; 00224 }
static int set2 | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
struct ast_str ** | str, | |||
ssize_t | len | |||
) | [static] |
Definition at line 226 of file func_logic.c.
References ast_str_buffer(), ast_str_make_space(), ast_str_size(), set(), and str.
00227 { 00228 if (len > -1) { 00229 ast_str_make_space(str, len == 0 ? strlen(data) : len); 00230 } 00231 return set(chan, cmd, data, ast_str_buffer(*str), ast_str_size(*str)); 00232 }
static int unload_module | ( | void | ) | [static] |
Definition at line 311 of file func_logic.c.
References ast_custom_function_unregister(), exists_function, if_function, if_time_function, import_function, isnull_function, and set_function.
00312 { 00313 int res = 0; 00314 00315 res |= ast_custom_function_unregister(&isnull_function); 00316 res |= ast_custom_function_unregister(&set_function); 00317 res |= ast_custom_function_unregister(&exists_function); 00318 res |= ast_custom_function_unregister(&if_function); 00319 res |= ast_custom_function_unregister(&if_time_function); 00320 res |= ast_custom_function_unregister(&import_function); 00321 00322 return res; 00323 }
struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Logical dialplan functions" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "8586c2a7d357cb591cc3a6607a8f62d1" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } [static] |
Definition at line 339 of file func_logic.c.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 339 of file func_logic.c.
struct ast_custom_function exists_function [static] |
Initial value:
{ .name = "EXISTS", .read = exists, .read_max = 2, }
Definition at line 289 of file func_logic.c.
Referenced by load_module(), and unload_module().
struct ast_custom_function if_function [static] |
Initial value:
{ .name = "IF", .read = acf_if, }
Definition at line 295 of file func_logic.c.
Referenced by load_module(), and unload_module().
struct ast_custom_function if_time_function [static] |
Initial value:
{ .name = "IFTIME", .read = iftime, }
Definition at line 300 of file func_logic.c.
Referenced by load_module(), and unload_module().
struct ast_custom_function import_function [static] |
Initial value:
{ .name = "IMPORT", .read = import_read, .read2 = import_read2, }
Definition at line 305 of file func_logic.c.
Referenced by load_module(), and unload_module().
struct ast_custom_function isnull_function [static] |
Initial value:
{ .name = "ISNULL", .read = isnull, .read_max = 2, }
Definition at line 277 of file func_logic.c.
Referenced by load_module(), and unload_module().
struct ast_custom_function set_function [static] |
Initial value:
Definition at line 283 of file func_logic.c.
Referenced by load_module(), and unload_module().