#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 = "88eaa8f5c1bd988bedd71113385e0886" , .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 343 of file func_logic.c.
static void __unreg_module | ( | void | ) | [static] |
Definition at line 343 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 170 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.
00172 { 00173 AST_DECLARE_APP_ARGS(args1, 00174 AST_APP_ARG(expr); 00175 AST_APP_ARG(remainder); 00176 ); 00177 AST_DECLARE_APP_ARGS(args2, 00178 AST_APP_ARG(iftrue); 00179 AST_APP_ARG(iffalse); 00180 ); 00181 args2.iftrue = args2.iffalse = NULL; /* you have to set these, because if there is nothing after the '?', 00182 then args1.remainder will be NULL, not a pointer to a null string, and 00183 then any garbage in args2.iffalse will not be cleared, and you'll crash. 00184 -- and if you mod the ast_app_separate_args func instead, you'll really 00185 mess things up badly, because the rest of everything depends on null args 00186 for non-specified stuff. */ 00187 00188 AST_NONSTANDARD_APP_ARGS(args1, data, '?'); 00189 AST_NONSTANDARD_APP_ARGS(args2, args1.remainder, ':'); 00190 00191 if (ast_strlen_zero(args1.expr) || !(args2.iftrue || args2.iffalse)) { 00192 ast_log(LOG_WARNING, "Syntax IF(<expr>?[<true>][:<false>]) (expr must be non-null, and either <true> or <false> must be non-null)\n"); 00193 ast_log(LOG_WARNING, " In this case, <expr>='%s', <true>='%s', and <false>='%s'\n", args1.expr, args2.iftrue, args2.iffalse); 00194 return -1; 00195 } 00196 00197 args1.expr = ast_strip(args1.expr); 00198 if (args2.iftrue) 00199 args2.iftrue = ast_strip(args2.iftrue); 00200 if (args2.iffalse) 00201 args2.iffalse = ast_strip(args2.iffalse); 00202 00203 ast_copy_string(buf, pbx_checkcondition(args1.expr) ? (S_OR(args2.iftrue, "")) : (S_OR(args2.iffalse, "")), len); 00204 00205 return 0; 00206 }
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 134 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().
00136 { 00137 struct ast_timing timing; 00138 char *expr; 00139 char *iftrue; 00140 char *iffalse; 00141 00142 data = ast_strip_quoted(data, "\"", "\""); 00143 expr = strsep(&data, "?"); 00144 iftrue = strsep(&data, ":"); 00145 iffalse = data; 00146 00147 if (ast_strlen_zero(expr) || !(iftrue || iffalse)) { 00148 ast_log(LOG_WARNING, 00149 "Syntax IFTIME(<timespec>?[<true>][:<false>])\n"); 00150 return -1; 00151 } 00152 00153 if (!ast_build_timing(&timing, expr)) { 00154 ast_log(LOG_WARNING, "Invalid Time Spec.\n"); 00155 ast_destroy_timing(&timing); 00156 return -1; 00157 } 00158 00159 if (iftrue) 00160 iftrue = ast_strip_quoted(iftrue, "\"", "\""); 00161 if (iffalse) 00162 iffalse = ast_strip_quoted(iffalse, "\"", "\""); 00163 00164 ast_copy_string(buf, ast_check_timing(&timing) ? S_OR(iftrue, "") : S_OR(iffalse, ""), len); 00165 ast_destroy_timing(&timing); 00166 00167 return 0; 00168 }
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 238 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().
00239 { 00240 AST_DECLARE_APP_ARGS(args, 00241 AST_APP_ARG(channel); 00242 AST_APP_ARG(varname); 00243 ); 00244 AST_STANDARD_APP_ARGS(args, data); 00245 if (buf) { 00246 *buf = '\0'; 00247 } 00248 00249 if (!ast_strlen_zero(args.varname)) { 00250 struct ast_channel *chan2; 00251 00252 if ((chan2 = ast_channel_get_by_name(args.channel))) { 00253 char *s = alloca(strlen(args.varname) + 4); 00254 if (s) { 00255 sprintf(s, "${%s}", args.varname); 00256 ast_channel_lock(chan2); 00257 if (buf) { 00258 pbx_substitute_variables_helper(chan2, s, buf, len); 00259 } else { 00260 ast_str_substitute_variables(str, len, chan2, s); 00261 } 00262 ast_channel_unlock(chan2); 00263 } 00264 chan2 = ast_channel_unref(chan2); 00265 } 00266 } 00267 00268 return 0; 00269 }
static int import_read | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
char * | buf, | |||
size_t | len | |||
) | [static] |
Definition at line 271 of file func_logic.c.
References import_helper().
00272 { 00273 return import_helper(chan, cmd, data, buf, NULL, len); 00274 }
static int import_read2 | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
struct ast_str ** | str, | |||
ssize_t | len | |||
) | [static] |
Definition at line 276 of file func_logic.c.
References import_helper(), and str.
00277 { 00278 return import_helper(chan, cmd, data, NULL, str, len); 00279 }
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 329 of file func_logic.c.
References ast_custom_function_register, exists_function, if_function, if_time_function, import_function, isnull_function, and set_function.
00330 { 00331 int res = 0; 00332 00333 res |= ast_custom_function_register(&isnull_function); 00334 res |= ast_custom_function_register(&set_function); 00335 res |= ast_custom_function_register(&exists_function); 00336 res |= ast_custom_function_register(&if_function); 00337 res |= ast_custom_function_register(&if_time_function); 00338 res |= ast_custom_function_register(&import_function); 00339 00340 return res; 00341 }
static int set | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
char * | buf, | |||
size_t | len | |||
) | [static] |
Definition at line 208 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().
00210 { 00211 char *varname; 00212 char *val; 00213 00214 varname = strsep(&data, "="); 00215 val = data; 00216 00217 if (ast_strlen_zero(varname) || !val) { 00218 ast_log(LOG_WARNING, "Syntax SET(<varname>=[<value>])\n"); 00219 return -1; 00220 } 00221 00222 varname = ast_strip(varname); 00223 val = ast_strip(val); 00224 pbx_builtin_setvar_helper(chan, varname, val); 00225 ast_copy_string(buf, val, len); 00226 00227 return 0; 00228 }
static int set2 | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
struct ast_str ** | str, | |||
ssize_t | len | |||
) | [static] |
Definition at line 230 of file func_logic.c.
References ast_str_buffer(), ast_str_make_space(), ast_str_size(), set(), and str.
00231 { 00232 if (len > -1) { 00233 ast_str_make_space(str, len == 0 ? strlen(data) : len); 00234 } 00235 return set(chan, cmd, data, ast_str_buffer(*str), ast_str_size(*str)); 00236 }
static int unload_module | ( | void | ) | [static] |
Definition at line 315 of file func_logic.c.
References ast_custom_function_unregister(), exists_function, if_function, if_time_function, import_function, isnull_function, and set_function.
00316 { 00317 int res = 0; 00318 00319 res |= ast_custom_function_unregister(&isnull_function); 00320 res |= ast_custom_function_unregister(&set_function); 00321 res |= ast_custom_function_unregister(&exists_function); 00322 res |= ast_custom_function_unregister(&if_function); 00323 res |= ast_custom_function_unregister(&if_time_function); 00324 res |= ast_custom_function_unregister(&import_function); 00325 00326 return res; 00327 }
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 = "88eaa8f5c1bd988bedd71113385e0886" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } [static] |
Definition at line 343 of file func_logic.c.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 343 of file func_logic.c.
struct ast_custom_function exists_function [static] |
Initial value:
{ .name = "EXISTS", .read = exists, .read_max = 2, }
Definition at line 293 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 299 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 304 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 309 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 281 of file func_logic.c.
Referenced by load_module(), and unload_module().
struct ast_custom_function set_function [static] |
Initial value:
Definition at line 287 of file func_logic.c.
Referenced by load_module(), and unload_module().