diff options
-rwxr-xr-x | cdr.c | 12 | ||||
-rwxr-xr-x | include/asterisk/pbx.h | 23 | ||||
-rwxr-xr-x | pbx.c | 4 |
3 files changed, 36 insertions, 3 deletions
@@ -209,7 +209,19 @@ int ast_cdr_setvar(struct ast_cdr *cdr, const char *name, const char *value, int { struct ast_var_t *newvariable; struct varshead *headp; + const char *read_only[] = { "clid", "src", "dst", "dcontext", "channel", "dstchannel", + "lastapp", "lastdata", "start", "answer", "end", "duration", + "billsec", "disposition", "amaflags", "accountcode", "uniqueid", + "userfield", NULL }; + int x; + for(x = 0; read_only[x]; x++) { + if (!strcasecmp(name, read_only[x])) { + ast_log(LOG_ERROR, "Attempt to set a read-only variable!.\n"); + return -1; + } + } + if (!cdr) { ast_log(LOG_ERROR, "Attempt to set a variable on a nonexistent CDR record.\n"); return -1; diff --git a/include/asterisk/pbx.h b/include/asterisk/pbx.h index 07d8fbbaa..19331acff 100755 --- a/include/asterisk/pbx.h +++ b/include/asterisk/pbx.h @@ -602,6 +602,29 @@ int ast_async_goto_if_exists(struct ast_channel *chan, char* context, char *exte struct ast_custom_function* ast_custom_function_find(char *name); int ast_custom_function_unregister(struct ast_custom_function *acf); int ast_custom_function_register(struct ast_custom_function *acf); + +/*! executes a read operation on a function */ +/*! + * \param chan Channel to execute on + * \param in Data containing the function call string + * \param workspace A pointer to safe memory to use for a return value + * \param len the number of bytes in workspace + * This application executes an function in read mode on a given channel. + * It returns a pointer to workspace if the buffer contains any new data + * or NULL if there was a problem. + */ + +char *ast_func_read(struct ast_channel *chan, const char *in, char *workspace, size_t len); + +/*! executes a write operation on a function */ +/*! + * \param chan Channel to execute on + * \param in Data containing the function call string + * \param value A value parameter to pass for writing + * This application executes an function in write mode on a given channel. + * It has no return value. + */ +void ast_func_write(struct ast_channel *chan, const char *in, const char *value); #if defined(__cplusplus) || defined(c_plusplus) } @@ -207,8 +207,6 @@ static int pbx_builtin_saycharacters(struct ast_channel *, void *); static int pbx_builtin_sayphonetic(struct ast_channel *, void *); int pbx_builtin_setvar(struct ast_channel *, void *); static int pbx_builtin_importvar(struct ast_channel *, void *); -static char *ast_func_read(struct ast_channel *chan, const char *in, char *workspace, size_t len); -static void ast_func_write(struct ast_channel *chan, const char *in, const char *value); static struct varshead globals; @@ -1313,7 +1311,7 @@ char *ast_func_read(struct ast_channel *chan, const char *in, char *workspace, s return ret; } -static void ast_func_write(struct ast_channel *chan, const char *in, const char *value) +void ast_func_write(struct ast_channel *chan, const char *in, const char *value) { char *args = NULL, *function, *p; struct ast_custom_function *acfptr; |