#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 | acf_import (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 | 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 | unload_module (void) |
Variables | |
static struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .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 = "a9c98e5d177805051735cb5b0b16b0a0" , .load = load_module, .unload = unload_module, } |
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 242 of file func_logic.c.
static void __unreg_module | ( | void | ) | [static] |
Definition at line 242 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 87 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.
00089 { 00090 AST_DECLARE_APP_ARGS(args1, 00091 AST_APP_ARG(expr); 00092 AST_APP_ARG(remainder); 00093 ); 00094 AST_DECLARE_APP_ARGS(args2, 00095 AST_APP_ARG(iftrue); 00096 AST_APP_ARG(iffalse); 00097 ); 00098 args2.iftrue = args2.iffalse = NULL; /* you have to set these, because if there is nothing after the '?', 00099 then args1.remainder will be NULL, not a pointer to a null string, and 00100 then any garbage in args2.iffalse will not be cleared, and you'll crash. 00101 -- and if you mod the ast_app_separate_args func instead, you'll really 00102 mess things up badly, because the rest of everything depends on null args 00103 for non-specified stuff. */ 00104 00105 AST_NONSTANDARD_APP_ARGS(args1, data, '?'); 00106 AST_NONSTANDARD_APP_ARGS(args2, args1.remainder, ':'); 00107 00108 if (ast_strlen_zero(args1.expr) || !(args2.iftrue || args2.iffalse)) { 00109 ast_log(LOG_WARNING, "Syntax IF(<expr>?[<true>][:<false>]) (expr must be non-null, and either <true> or <false> must be non-null)\n"); 00110 ast_log(LOG_WARNING, " In this case, <expr>='%s', <true>='%s', and <false>='%s'\n", args1.expr, args2.iftrue, args2.iffalse); 00111 return -1; 00112 } 00113 00114 args1.expr = ast_strip(args1.expr); 00115 if (args2.iftrue) 00116 args2.iftrue = ast_strip(args2.iftrue); 00117 if (args2.iffalse) 00118 args2.iffalse = ast_strip(args2.iffalse); 00119 00120 ast_copy_string(buf, pbx_checkcondition(args1.expr) ? (S_OR(args2.iftrue, "")) : (S_OR(args2.iffalse, "")), len); 00121 00122 return 0; 00123 }
static int acf_import | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
char * | buf, | |||
size_t | len | |||
) | [static] |
Definition at line 147 of file func_logic.c.
References AST_APP_ARG, ast_channel_unlock, AST_DECLARE_APP_ARGS, ast_get_channel_by_name_locked(), AST_STANDARD_APP_ARGS, ast_strlen_zero(), pbx_substitute_variables_helper(), and s.
00148 { 00149 AST_DECLARE_APP_ARGS(args, 00150 AST_APP_ARG(channel); 00151 AST_APP_ARG(varname); 00152 ); 00153 AST_STANDARD_APP_ARGS(args, data); 00154 buf[0] = 0; 00155 if (!ast_strlen_zero(args.varname)) { 00156 struct ast_channel *chan2 = ast_get_channel_by_name_locked(args.channel); 00157 if (chan2) { 00158 char *s = alloca(strlen(args.varname) + 4); 00159 if (s) { 00160 sprintf(s, "${%s}", args.varname); 00161 pbx_substitute_variables_helper(chan2, s, buf, len); 00162 } 00163 ast_channel_unlock(chan2); 00164 } 00165 } 00166 return 0; 00167 }
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 53 of file func_logic.c.
References ast_build_timing(), ast_check_timing(), ast_copy_string(), ast_log(), ast_strip_quoted(), ast_strlen_zero(), LOG_WARNING, S_OR, and strsep().
00055 { 00056 struct ast_timing timing; 00057 char *expr; 00058 char *iftrue; 00059 char *iffalse; 00060 00061 data = ast_strip_quoted(data, "\"", "\""); 00062 expr = strsep(&data, "?"); 00063 iftrue = strsep(&data, ":"); 00064 iffalse = data; 00065 00066 if (ast_strlen_zero(expr) || !(iftrue || iffalse)) { 00067 ast_log(LOG_WARNING, 00068 "Syntax IFTIME(<timespec>?[<true>][:<false>])\n"); 00069 return -1; 00070 } 00071 00072 if (!ast_build_timing(&timing, expr)) { 00073 ast_log(LOG_WARNING, "Invalid Time Spec.\n"); 00074 return -1; 00075 } 00076 00077 if (iftrue) 00078 iftrue = ast_strip_quoted(iftrue, "\"", "\""); 00079 if (iffalse) 00080 iffalse = ast_strip_quoted(iffalse, "\"", "\""); 00081 00082 ast_copy_string(buf, ast_check_timing(&timing) ? S_OR(iftrue, "") : S_OR(iffalse, ""), len); 00083 00084 return 0; 00085 }
static int isnull | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
char * | buf, | |||
size_t | len | |||
) | [static] |
Definition at line 37 of file func_logic.c.
00039 { 00040 strcpy(buf, data && *data ? "0" : "1"); 00041 00042 return 0; 00043 }
static int load_module | ( | void | ) | [static] |
Definition at line 228 of file func_logic.c.
References ast_custom_function_register, exists_function, if_function, if_time_function, import_function, isnull_function, and set_function.
00229 { 00230 int res = 0; 00231 00232 res |= ast_custom_function_register(&isnull_function); 00233 res |= ast_custom_function_register(&set_function); 00234 res |= ast_custom_function_register(&exists_function); 00235 res |= ast_custom_function_register(&if_function); 00236 res |= ast_custom_function_register(&if_time_function); 00237 res |= ast_custom_function_register(&import_function); 00238 00239 return res; 00240 }
static int set | ( | struct ast_channel * | chan, | |
const char * | cmd, | |||
char * | data, | |||
char * | buf, | |||
size_t | len | |||
) | [static] |
Definition at line 125 of file func_logic.c.
References ast_copy_string(), ast_log(), ast_strip(), ast_strlen_zero(), chan, LOG_WARNING, pbx_builtin_setvar_helper(), and strsep().
00127 { 00128 char *varname; 00129 char *val; 00130 00131 varname = strsep(&data, "="); 00132 val = data; 00133 00134 if (ast_strlen_zero(varname) || !val) { 00135 ast_log(LOG_WARNING, "Syntax SET(<varname>=[<value>])\n"); 00136 return -1; 00137 } 00138 00139 varname = ast_strip(varname); 00140 val = ast_strip(val); 00141 pbx_builtin_setvar_helper(chan, varname, val); 00142 ast_copy_string(buf, val, len); 00143 00144 return 0; 00145 }
static int unload_module | ( | void | ) | [static] |
Definition at line 214 of file func_logic.c.
References ast_custom_function_unregister(), exists_function, if_function, if_time_function, import_function, isnull_function, and set_function.
00215 { 00216 int res = 0; 00217 00218 res |= ast_custom_function_unregister(&isnull_function); 00219 res |= ast_custom_function_unregister(&set_function); 00220 res |= ast_custom_function_unregister(&exists_function); 00221 res |= ast_custom_function_unregister(&if_function); 00222 res |= ast_custom_function_unregister(&if_time_function); 00223 res |= ast_custom_function_unregister(&import_function); 00224 00225 return res; 00226 }
struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .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 = "a9c98e5d177805051735cb5b0b16b0a0" , .load = load_module, .unload = unload_module, } [static] |
Definition at line 242 of file func_logic.c.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 242 of file func_logic.c.
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 [static] |