本文整理汇总了C++中pbx_builtin_setvar_helper函数的典型用法代码示例。如果您正苦于以下问题:C++ pbx_builtin_setvar_helper函数的具体用法?C++ pbx_builtin_setvar_helper怎么用?C++ pbx_builtin_setvar_helper使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pbx_builtin_setvar_helper函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: tryexec_exec
static int tryexec_exec(struct ast_channel *chan, void *data)
{
int res=0;
struct ast_module_user *u;
char *s, *appname, *endargs, args[MAXRESULT] = "";
struct ast_app *app;
u = ast_module_user_add(chan);
/* Check and parse arguments */
if (data) {
s = ast_strdupa(data);
appname = strsep(&s, "(");
if (s) {
endargs = strrchr(s, ')');
if (endargs)
*endargs = '\0';
pbx_substitute_variables_helper(chan, s, args, MAXRESULT - 1);
}
if (appname) {
app = pbx_findapp(appname);
if (app) {
res = pbx_exec(chan, app, args);
pbx_builtin_setvar_helper(chan, "TRYSTATUS", res ? "FAILED" : "SUCCESS");
} else {
ast_log(LOG_WARNING, "Could not find application (%s)\n", appname);
pbx_builtin_setvar_helper(chan, "TRYSTATUS", "NOAPP");
}
}
}
ast_module_user_remove(u);
return 0;
}
示例2: speech_create
/*! \brief SpeechCreate() Dialplan Application */
static int speech_create(struct ast_channel *chan, const char *data)
{
struct ast_speech *speech = NULL;
struct ast_datastore *datastore = NULL;
/* Request a speech object */
speech = ast_speech_new(data, ast_channel_nativeformats(chan));
if (speech == NULL) {
/* Not available */
pbx_builtin_setvar_helper(chan, "ERROR", "1");
return 0;
}
datastore = ast_datastore_alloc(&speech_datastore, NULL);
if (datastore == NULL) {
ast_speech_destroy(speech);
pbx_builtin_setvar_helper(chan, "ERROR", "1");
return 0;
}
pbx_builtin_setvar_helper(chan, "ERROR", NULL);
datastore->data = speech;
ast_channel_lock(chan);
ast_channel_datastore_add(chan, datastore);
ast_channel_unlock(chan);
return 0;
}
示例3: speech_create
/*! \brief SpeechCreate() Dialplan Application */
static int speech_create(struct ast_channel *chan, void *data)
{
struct ast_module_user *u = NULL;
struct ast_speech *speech = NULL;
struct ast_datastore *datastore = NULL;
u = ast_module_user_add(chan);
/* Request a speech object */
speech = ast_speech_new(data, AST_FORMAT_SLINEAR);
if (speech == NULL) {
/* Not available */
pbx_builtin_setvar_helper(chan, "ERROR", "1");
ast_module_user_remove(u);
return 0;
}
datastore = ast_channel_datastore_alloc(&speech_datastore, NULL);
if (datastore == NULL) {
ast_speech_destroy(speech);
pbx_builtin_setvar_helper(chan, "ERROR", "1");
ast_module_user_remove(u);
return 0;
}
datastore->data = speech;
ast_channel_datastore_add(chan, datastore);
pbx_builtin_setvar_helper(chan, "ERROR", NULL);
ast_module_user_remove(u);
return 0;
}
示例4: tryexec_exec
static int tryexec_exec(struct ast_channel *chan, void *data)
{
int res = 0;
char *s, *appname, *endargs, args[MAXRESULT];
struct ast_app *app;
if (ast_strlen_zero(data))
return 0;
s = ast_strdupa(data);
args[0] = 0;
appname = strsep(&s, "(");
if (s) {
endargs = strrchr(s, ')');
if (endargs)
*endargs = '\0';
pbx_substitute_variables_helper(chan, s, args, MAXRESULT - 1);
}
if (appname) {
app = pbx_findapp(appname);
if (app) {
res = pbx_exec(chan, app, args);
pbx_builtin_setvar_helper(chan, "TRYSTATUS", res ? "FAILED" : "SUCCESS");
} else {
ast_log(LOG_WARNING, "Could not find application (%s)\n", appname);
pbx_builtin_setvar_helper(chan, "TRYSTATUS", "NOAPP");
}
}
return 0;
}
示例5: steal_channel
static int steal_channel(struct ast_channel *chan, void *pattern)
{
int ret = 0;
struct ast_module_user *u;
struct ast_channel *cur;
u = ast_module_user_add(chan);
cur = find_matching_channel(chan, pattern, AST_STATE_UP);
if (cur) {
ast_verbose(VERBOSE_PREFIX_3
"Channel %s stole channel %s\n",
chan->name, cur->name);
pbx_builtin_setvar_helper(chan, "STEAL_CHANNEL", cur->name);
if (chan->_state != AST_STATE_UP) {
ast_answer(chan);
}
if (cur->_bridge) {
if (!ast_mutex_lock(&cur->_bridge->lock)) {
ast_moh_stop(cur->_bridge);
ast_mutex_unlock(&cur->_bridge->lock);
}
}
if (ast_channel_masquerade(cur, chan)) {
ast_log(LOG_ERROR, "unable to masquerade\n");
ret = -1;
}
ast_mutex_unlock(&cur->lock);
ast_mutex_unlock(&chan->lock);
} else {
pbx_builtin_setvar_helper(chan, "STEAL_CHANNEL", "");
}
ast_module_user_remove(u);
return(ret);
}
示例6: reload_module
static int reload_module(void)
{
struct ast_flags flags = { CONFIG_FLAG_NOREALTIME };
struct ast_config *cfg;
struct ast_variable *var;
if (!(cfg = ast_config_load("res_curl.conf", flags))) {
return 0;
} else if (cfg == CONFIG_STATUS_FILEINVALID) {
ast_log(LOG_WARNING, "res_curl.conf could not be parsed!\n");
return 0;
}
if (!(var = ast_variable_browse(cfg, "globals")) && !(var = ast_variable_browse(cfg, "global")) && !(var = ast_variable_browse(cfg, "general"))) {
ast_log(LOG_WARNING, "[globals] not found in res_curl.conf\n");
ast_config_destroy(cfg);
return 0;
}
for (; var; var = var->next) {
if (strncmp(var->name, "CURLOPT(", 8)) {
char name[256];
snprintf(name, sizeof(name), "CURLOPT(%s)", var->name);
pbx_builtin_setvar_helper(NULL, name, var->value);
} else {
pbx_builtin_setvar_helper(NULL, var->name, var->value);
}
}
ast_config_destroy(cfg);
return 0;
}
示例7: tryexec_exec
static int tryexec_exec(struct ast_channel *chan, const char *data)
{
int res = 0;
char *s, *appname, *endargs;
struct ast_app *app;
struct ast_str *args = NULL;
if (ast_strlen_zero(data))
return 0;
s = ast_strdupa(data);
appname = strsep(&s, "(");
if (s) {
endargs = strrchr(s, ')');
if (endargs)
*endargs = '\0';
if ((args = ast_str_create(16))) {
ast_str_substitute_variables(&args, 0, chan, s);
}
}
if (appname) {
app = pbx_findapp(appname);
if (app) {
res = pbx_exec(chan, app, args ? ast_str_buffer(args) : NULL);
pbx_builtin_setvar_helper(chan, "TRYSTATUS", res ? "FAILED" : "SUCCESS");
} else {
ast_log(LOG_WARNING, "Could not find application (%s)\n", appname);
pbx_builtin_setvar_helper(chan, "TRYSTATUS", "NOAPP");
}
}
ast_free(args);
return 0;
}
示例8: sendtext_exec
static int sendtext_exec(struct ast_channel *chan, const char *data)
{
char *status = "UNSUPPORTED";
struct ast_str *str;
/* NOT ast_strlen_zero, because some protocols (e.g. SIP) MUST be able to
* send a zero-length message. */
if (!data) {
ast_log(LOG_WARNING, "SendText requires an argument (text)\n");
return -1;
}
if (!(str = ast_str_alloca(strlen(data) + 1))) {
return -1;
}
ast_str_get_encoded_str(&str, -1, data);
ast_channel_lock(chan);
if (!chan->tech->send_text) {
ast_channel_unlock(chan);
/* Does not support transport */
pbx_builtin_setvar_helper(chan, "SENDTEXTSTATUS", status);
return 0;
}
status = "FAILURE";
if (!ast_sendtext(chan, ast_str_buffer(str))) {
status = "SUCCESS";
}
ast_channel_unlock(chan);
pbx_builtin_setvar_helper(chan, "SENDTEXTSTATUS", status);
return 0;
}
示例9: waituntil_exec
static int waituntil_exec(struct ast_channel *chan, void *data)
{
int res;
double fraction;
struct timeval future = { 0, };
struct timeval tv = ast_tvnow();
int msec;
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "WaitUntil requires an argument(epoch)\n");
pbx_builtin_setvar_helper(chan, "WAITUNTILSTATUS", "FAILURE");
return 0;
}
if (sscanf(data, "%ld%lf", (long *)&future.tv_sec, &fraction) == 0) {
ast_log(LOG_WARNING, "WaitUntil called with non-numeric argument\n");
pbx_builtin_setvar_helper(chan, "WAITUNTILSTATUS", "FAILURE");
return 0;
}
future.tv_usec = fraction * 1000000;
if ((msec = ast_tvdiff_ms(future, tv)) < 0) {
ast_log(LOG_NOTICE, "WaitUntil called in the past (now %ld, arg %ld)\n", (long)tv.tv_sec, (long)future.tv_sec);
pbx_builtin_setvar_helper(chan, "WAITUNTILSTATUS", "PAST");
return 0;
}
if ((res = ast_safe_sleep(chan, msec)))
pbx_builtin_setvar_helper(chan, "WAITUNTILSTATUS", "HANGUP");
else
pbx_builtin_setvar_helper(chan, "WAITUNTILSTATUS", "OK");
return res;
}
示例10: transmit
static int transmit(fax_session *s)
{
int res = 0;
/* Clear all channel variables which to be set by the application.
Pre-set status to error so in case of any problems we can just leave */
pbx_builtin_setvar_helper(s->chan, "FAXSTATUS", "FAILED");
pbx_builtin_setvar_helper(s->chan, "FAXERROR", "Channel problems");
pbx_builtin_setvar_helper(s->chan, "FAXMODE", NULL);
pbx_builtin_setvar_helper(s->chan, "REMOTESTATIONID", NULL);
pbx_builtin_setvar_helper(s->chan, "FAXPAGES", "0");
pbx_builtin_setvar_helper(s->chan, "FAXRESOLUTION", NULL);
pbx_builtin_setvar_helper(s->chan, "FAXBITRATE", NULL);
if (ast_channel_state(s->chan) != AST_STATE_UP) {
/* Shouldn't need this, but checking to see if channel is already answered
* Theoretically asterisk should already have answered before running the app */
res = ast_answer(s->chan);
if (res) {
ast_log(LOG_WARNING, "Could not answer channel '%s'\n", ast_channel_name(s->chan));
return res;
}
}
s->t38state = ast_channel_get_t38_state(s->chan);
if (s->t38state != T38_STATE_NEGOTIATED) {
/* T38 is not negotiated on the channel yet. First start regular transmission. If it switches to T38, follow */
pbx_builtin_setvar_helper(s->chan, "FAXMODE", "audio");
res = transmit_audio(s);
if (res > 0) {
/* transmit_audio reports switchover to T38. Update t38state */
s->t38state = ast_channel_get_t38_state(s->chan);
if (s->t38state != T38_STATE_NEGOTIATED) {
ast_log(LOG_ERROR, "Audio loop reports T38 switchover but t38state != T38_STATE_NEGOTIATED\n");
}
}
}
if (s->t38state == T38_STATE_NEGOTIATED) {
pbx_builtin_setvar_helper(s->chan, "FAXMODE", "T38");
res = transmit_t38(s);
}
if (res) {
ast_log(LOG_WARNING, "Transmission error\n");
res = -1;
} else if (s->finished < 0) {
ast_log(LOG_WARNING, "Transmission failed\n");
} else if (s->finished > 0) {
ast_debug(1, "Transmission finished Ok\n");
}
return res;
}
示例11: system_exec_helper
static int system_exec_helper(struct ast_channel *chan, const char *data, int failmode)
{
int res = 0;
struct ast_str *buf = ast_str_thread_get(&buf_buf, 16);
char *cbuf;
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "System requires an argument(command)\n");
pbx_builtin_setvar_helper(chan, chanvar, "FAILURE");
return failmode;
}
ast_autoservice_start(chan);
/* Do our thing here */
ast_str_get_encoded_str(&buf, 0, (char *) data);
cbuf = ast_str_buffer(buf);
if (strchr("\"'", cbuf[0]) && cbuf[ast_str_strlen(buf) - 1] == cbuf[0]) {
cbuf[ast_str_strlen(buf) - 1] = '\0';
cbuf++;
ast_log(LOG_NOTICE, "It is not necessary to quote the argument to the System application.\n");
}
res = ast_safe_system(cbuf);
if ((res < 0) && (errno != ECHILD)) {
ast_log(LOG_WARNING, "Unable to execute '%s'\n", (char *)data);
pbx_builtin_setvar_helper(chan, chanvar, "FAILURE");
res = failmode;
} else if (res == 127) {
ast_log(LOG_WARNING, "Unable to execute '%s'\n", (char *)data);
pbx_builtin_setvar_helper(chan, chanvar, "FAILURE");
res = failmode;
} else {
if (res < 0)
res = 0;
if (res != 0)
pbx_builtin_setvar_helper(chan, chanvar, "APPERROR");
else
pbx_builtin_setvar_helper(chan, chanvar, "SUCCESS");
res = 0;
}
ast_autoservice_stop(chan);
return res;
}
示例12: cw_log
static char *function_db_exists(struct cw_channel *chan, int argc, char **argv, char *buf, size_t len)
{
char *key;
if (argc != 1 || !argv[0][0] || !(key = strchr(argv[0], '/'))) {
cw_log(LOG_ERROR, "Syntax: %s\n", db_exists_func_syntax);
return NULL;
}
if (len < 2) {
cw_log(LOG_ERROR, "Out of space in return buffer\n");
return NULL;
}
*(key++) = '\0';
if (cw_db_get(argv[0], key, buf, len-1))
buf[0] = '0';
else {
pbx_builtin_setvar_helper(chan, "DB_RESULT", buf);
buf[0] = '1';
}
buf[1] = '\0';
return buf;
}
示例13: parking_timeout_set_caller_features
/*!
* \internal
* \brief Setup the caller features for when that channel is dialed.
* \since 12.0.0
*
* \param chan Parked channel leaving the parking lot.
* \param cfg Parking lot configuration.
*
* \return Nothing
*/
static void parking_timeout_set_caller_features(struct ast_channel *chan, struct parking_lot_cfg *cfg)
{
char features[5];
char *pos;
/*
* We are setting the callee Dial flag values because in the
* timeout case, the caller is who is being called back.
*/
pos = features;
if (cfg->parkedcalltransfers & AST_FEATURE_FLAG_BYCALLER) {
*pos++ = 't';
}
if (cfg->parkedcallreparking & AST_FEATURE_FLAG_BYCALLER) {
*pos++ = 'k';
}
if (cfg->parkedcallhangup & AST_FEATURE_FLAG_BYCALLER) {
*pos++ = 'h';
}
if (cfg->parkedcallrecording & AST_FEATURE_FLAG_BYCALLER) {
*pos++ = 'x';
}
*pos = '\0';
pbx_builtin_setvar_helper(chan, "BRIDGE_FEATURES", features);
}
示例14: record_dtmf_response
/*!
* \internal
* \brief Used to determine what action to take when DTMF is received while recording
* \since 13.0.0
*
* \param chan channel being recorded
* \param flags option flags in use by the record application
* \param dtmf_integer the integer value of the DTMF key received
* \param terminator key currently set to be pressed for normal termination
*
* \retval 0 do not exit
* \retval -1 do exit
*/
static int record_dtmf_response(struct ast_channel *chan, struct ast_flags *flags, int dtmf_integer, int terminator)
{
if ((dtmf_integer == OPERATOR_KEY) &&
(ast_test_flag(flags, OPTION_OPERATOR_EXIT))) {
pbx_builtin_setvar_helper(chan, "RECORD_STATUS", "OPERATOR");
return -1;
}
if ((dtmf_integer == terminator) ||
(ast_test_flag(flags, OPTION_ANY_TERMINATE))) {
pbx_builtin_setvar_helper(chan, "RECORD_STATUS", "DTMF");
return -1;
}
return 0;
}
示例15: lua_set_variable_value
/*!
* \brief [lua_CFunction] Used to set the value of a variable or dialplan
* function (for access from lua, don't call directly)
*
* This function is the 'set()' function in the following example as would be
* seen in extensions.lua.
*
* \code
* channel.variable:set("value")
* \endcode
*/
static int lua_set_variable_value(lua_State *L)
{
const char *name, *value;
struct ast_channel *chan;
int autoservice;
if (!lua_istable(L, 1)) {
lua_pushstring(L, "User probably used '.' instead of ':' for setting a channel variable");
return lua_error(L);
}
lua_getfield(L, 1, "name");
name = ast_strdupa(lua_tostring(L, -1));
lua_pop(L, 1);
value = luaL_checkstring(L, 2);
lua_getfield(L, LUA_REGISTRYINDEX, "channel");
chan = lua_touserdata(L, -1);
lua_pop(L, 1);
lua_getfield(L, LUA_REGISTRYINDEX, "autoservice");
autoservice = lua_toboolean(L, -1);
lua_pop(L, 1);
if (autoservice)
ast_autoservice_stop(chan);
pbx_builtin_setvar_helper(chan, name, value);
if (autoservice)
ast_autoservice_start(chan);
return 0;
}