expose function execution routines and warn about trying to set a read-only cdr var

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5589 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.2-netsec
Anthony Minessale II 21 years ago
parent b0685838db
commit 6b7677e842

12
cdr.c

@ -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;

@ -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;

Loading…
Cancel
Save