summaryrefslogtreecommitdiff
path: root/main/pbx.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/pbx.c')
-rw-r--r--main/pbx.c90
1 files changed, 45 insertions, 45 deletions
diff --git a/main/pbx.c b/main/pbx.c
index bbf5ad74b..a5a2c08fd 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -3260,7 +3260,7 @@ const char *ast_str_retrieve_variable(struct ast_str **str, ssize_t maxlen, stru
if (c) {
ast_channel_lock(c);
- places[0] = &c->varshead;
+ places[0] = ast_channel_varshead(c);
}
/*
* Make a copy of var because parse_variable_name() modifies the string.
@@ -3292,16 +3292,16 @@ const char *ast_str_retrieve_variable(struct ast_str **str, ssize_t maxlen, stru
if (!strncmp(var + 4, "ING", 3)) {
if (!strcmp(var + 7, "PRES")) { /* CALLINGPRES */
ast_str_set(str, maxlen, "%d",
- ast_party_id_presentation(&c->caller.id));
+ ast_party_id_presentation(&ast_channel_caller(c)->id));
s = ast_str_buffer(*str);
} else if (!strcmp(var + 7, "ANI2")) { /* CALLINGANI2 */
- ast_str_set(str, maxlen, "%d", c->caller.ani2);
+ ast_str_set(str, maxlen, "%d", ast_channel_caller(c)->ani2);
s = ast_str_buffer(*str);
} else if (!strcmp(var + 7, "TON")) { /* CALLINGTON */
- ast_str_set(str, maxlen, "%d", c->caller.id.number.plan);
+ ast_str_set(str, maxlen, "%d", ast_channel_caller(c)->id.number.plan);
s = ast_str_buffer(*str);
} else if (!strcmp(var + 7, "TNS")) { /* CALLINGTNS */
- ast_str_set(str, maxlen, "%d", c->dialed.transit_network_select);
+ ast_str_set(str, maxlen, "%d", ast_channel_dialed(c)->transit_network_select);
s = ast_str_buffer(*str);
}
}
@@ -3987,11 +3987,11 @@ void ast_str_substitute_variables_full(struct ast_str **buf, ssize_t maxlen, str
struct varshead old;
struct ast_channel *bogus = ast_dummy_channel_alloc();
if (bogus) {
- memcpy(&old, &bogus->varshead, sizeof(old));
- memcpy(&bogus->varshead, headp, sizeof(bogus->varshead));
+ memcpy(&old, ast_channel_varshead(bogus), sizeof(old));
+ memcpy(ast_channel_varshead(bogus), headp, sizeof(*ast_channel_varshead(bogus)));
cp4 = ast_func_read2(c, finalvars, &substr3, 0) ? NULL : ast_str_buffer(substr3);
/* Don't deallocate the varshead that was passed in */
- memcpy(&bogus->varshead, &old, sizeof(bogus->varshead));
+ memcpy(ast_channel_varshead(bogus), &old, sizeof(*ast_channel_varshead(bogus)));
ast_channel_unref(bogus);
} else {
ast_log(LOG_ERROR, "Unable to allocate bogus channel for variable substitution. Function results may be blank.\n");
@@ -4186,11 +4186,11 @@ void pbx_substitute_variables_helper_full(struct ast_channel *c, struct varshead
struct varshead old;
struct ast_channel *c = ast_dummy_channel_alloc();
if (c) {
- memcpy(&old, &c->varshead, sizeof(old));
- memcpy(&c->varshead, headp, sizeof(c->varshead));
+ memcpy(&old, ast_channel_varshead(c), sizeof(old));
+ memcpy(ast_channel_varshead(c), headp, sizeof(*ast_channel_varshead(c)));
cp4 = ast_func_read(c, vars, workspace, VAR_BUF_SIZE) ? NULL : workspace;
/* Don't deallocate the varshead that was passed in */
- memcpy(&c->varshead, &old, sizeof(c->varshead));
+ memcpy(ast_channel_varshead(c), &old, sizeof(*ast_channel_varshead(c)));
c = ast_channel_unref(c);
} else {
ast_log(LOG_ERROR, "Unable to allocate bogus channel for variable substitution. Function results may be blank.\n");
@@ -4277,7 +4277,7 @@ void pbx_substitute_variables_helper_full(struct ast_channel *c, struct varshead
void pbx_substitute_variables_helper(struct ast_channel *c, const char *cp1, char *cp2, int count)
{
size_t used;
- pbx_substitute_variables_helper_full(c, (c) ? &c->varshead : NULL, cp1, cp2, count, &used);
+ pbx_substitute_variables_helper_full(c, (c) ? ast_channel_varshead(c) : NULL, cp1, cp2, count, &used);
}
void pbx_substitute_variables_varshead(struct varshead *headp, const char *cp1, char *cp2, int count)
@@ -5075,7 +5075,7 @@ static int collect_digits(struct ast_channel *c, int waittime, char *buf, int bu
buf[pos] = '\0'; /* make sure it is properly terminated */
while (ast_matchmore_extension(c, ast_channel_context(c), buf, 1,
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL))) {
/* As long as we're willing to wait, and as long as it's not defined,
keep reading digits until we can't possibly get a right answer anymore. */
digit = ast_waitfordigit(c, waittime);
@@ -5147,7 +5147,7 @@ static enum ast_pbx_result __ast_pbx_run(struct ast_channel *c,
/* loop on priorities in this context/exten */
while (!(res = ast_spawn_extension(c, ast_channel_context(c), ast_channel_exten(c), ast_channel_priority(c),
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL),
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL),
&found, 1))) {
if (!ast_check_hangup(c)) {
ast_channel_priority_set(c, ast_channel_priority(c) + 1);
@@ -5161,17 +5161,17 @@ static enum ast_pbx_result __ast_pbx_run(struct ast_channel *c,
}
if (c->_softhangup & AST_SOFTHANGUP_TIMEOUT) {
if (ast_exists_extension(c, ast_channel_context(c), "T", 1,
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL))) {
set_ext_pri(c, "T", 1);
/* If the AbsoluteTimeout is not reset to 0, we'll get an infinite loop */
- memset(&c->whentohangup, 0, sizeof(c->whentohangup));
+ memset(ast_channel_whentohangup(c), 0, sizeof(*ast_channel_whentohangup(c)));
ast_channel_clear_softhangup(c, AST_SOFTHANGUP_TIMEOUT);
continue;
} else if (ast_exists_extension(c, ast_channel_context(c), "e", 1,
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL))) {
raise_exception(c, "ABSOLUTETIMEOUT", 1);
/* If the AbsoluteTimeout is not reset to 0, we'll get an infinite loop */
- memset(&c->whentohangup, 0, sizeof(c->whentohangup));
+ memset(ast_channel_whentohangup(c), 0, sizeof(*ast_channel_whentohangup(c)));
ast_channel_clear_softhangup(c, AST_SOFTHANGUP_TIMEOUT);
continue;
}
@@ -5198,7 +5198,7 @@ static enum ast_pbx_result __ast_pbx_run(struct ast_channel *c,
/* Don't cycle on incomplete - this will happen if the only extension that matches is our "incomplete" extension */
if (!ast_matchmore_extension(c, ast_channel_context(c), ast_channel_exten(c), 1,
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL))) {
invalid = 1;
} else {
ast_copy_string(dst_exten, ast_channel_exten(c), sizeof(dst_exten));
@@ -5211,7 +5211,7 @@ static enum ast_pbx_result __ast_pbx_run(struct ast_channel *c,
if ((res == AST_PBX_ERROR)
&& ast_exists_extension(c, ast_channel_context(c), "e", 1,
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL))) {
/* if we are already on the 'e' exten, don't jump to it again */
if (!strcmp(ast_channel_exten(c), "e")) {
ast_verb(2, "Spawn extension (%s, %s, %d) exited ERROR while already on 'e' exten on '%s'\n", ast_channel_context(c), ast_channel_exten(c), ast_channel_priority(c), ast_channel_name(c));
@@ -5228,17 +5228,17 @@ static enum ast_pbx_result __ast_pbx_run(struct ast_channel *c,
}
if (c->_softhangup & AST_SOFTHANGUP_TIMEOUT) {
if (ast_exists_extension(c, ast_channel_context(c), "T", 1,
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL))) {
set_ext_pri(c, "T", 1);
/* If the AbsoluteTimeout is not reset to 0, we'll get an infinite loop */
- memset(&c->whentohangup, 0, sizeof(c->whentohangup));
+ memset(ast_channel_whentohangup(c), 0, sizeof(*ast_channel_whentohangup(c)));
ast_channel_clear_softhangup(c, AST_SOFTHANGUP_TIMEOUT);
continue;
} else if (ast_exists_extension(c, ast_channel_context(c), "e", 1,
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL))) {
raise_exception(c, "ABSOLUTETIMEOUT", 1);
/* If the AbsoluteTimeout is not reset to 0, we'll get an infinite loop */
- memset(&c->whentohangup, 0, sizeof(c->whentohangup));
+ memset(ast_channel_whentohangup(c), 0, sizeof(*ast_channel_whentohangup(c)));
ast_channel_clear_softhangup(c, AST_SOFTHANGUP_TIMEOUT);
continue;
}
@@ -5263,19 +5263,19 @@ static enum ast_pbx_result __ast_pbx_run(struct ast_channel *c,
if (invalid
|| !ast_exists_extension(c, ast_channel_context(c), ast_channel_exten(c), 1,
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL))) {
/*!\note
* If there is no match at priority 1, it is not a valid extension anymore.
* Try to continue at "i" (for invalid) or "e" (for exception) or exit if
* neither exist.
*/
if (ast_exists_extension(c, ast_channel_context(c), "i", 1,
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL))) {
ast_verb(3, "Sent into invalid extension '%s' in context '%s' on %s\n", ast_channel_exten(c), ast_channel_context(c), ast_channel_name(c));
pbx_builtin_setvar_helper(c, "INVALID_EXTEN", ast_channel_exten(c));
set_ext_pri(c, "i", 1);
} else if (ast_exists_extension(c, ast_channel_context(c), "e", 1,
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL))) {
raise_exception(c, "INVALID", 1);
} else {
ast_log(LOG_WARNING, "Channel '%s' sent into invalid extension '%s' in context '%s', but no invalid handler\n",
@@ -5313,19 +5313,19 @@ static enum ast_pbx_result __ast_pbx_run(struct ast_channel *c,
timeout = 1;
if (!timeout
&& ast_exists_extension(c, ast_channel_context(c), dst_exten, 1,
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) { /* Prepare the next cycle */
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL))) { /* Prepare the next cycle */
set_ext_pri(c, dst_exten, 1);
} else {
/* No such extension */
if (!timeout && !ast_strlen_zero(dst_exten)) {
/* An invalid extension */
if (ast_exists_extension(c, ast_channel_context(c), "i", 1,
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL))) {
ast_verb(3, "Invalid extension '%s' in context '%s' on %s\n", dst_exten, ast_channel_context(c), ast_channel_name(c));
pbx_builtin_setvar_helper(c, "INVALID_EXTEN", dst_exten);
set_ext_pri(c, "i", 1);
} else if (ast_exists_extension(c, ast_channel_context(c), "e", 1,
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL))) {
raise_exception(c, "INVALID", 1);
} else {
ast_log(LOG_WARNING,
@@ -5337,11 +5337,11 @@ static enum ast_pbx_result __ast_pbx_run(struct ast_channel *c,
} else {
/* A simple timeout */
if (ast_exists_extension(c, ast_channel_context(c), "t", 1,
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL))) {
ast_verb(3, "Timeout on %s\n", ast_channel_name(c));
set_ext_pri(c, "t", 1);
} else if (ast_exists_extension(c, ast_channel_context(c), "e", 1,
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL))) {
raise_exception(c, "RESPONSETIMEOUT", 1);
} else {
ast_log(LOG_WARNING,
@@ -5372,13 +5372,13 @@ static enum ast_pbx_result __ast_pbx_run(struct ast_channel *c,
if ((!args || !args->no_hangup_chan)
&& !ast_test_flag(c, AST_FLAG_BRIDGE_HANGUP_RUN)
&& ast_exists_extension(c, ast_channel_context(c), "h", 1,
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL))) {
set_ext_pri(c, "h", 1);
if (ast_channel_cdr(c) && ast_opt_end_cdr_before_h_exten) {
ast_cdr_end(ast_channel_cdr(c));
}
while ((res = ast_spawn_extension(c, ast_channel_context(c), ast_channel_exten(c), ast_channel_priority(c),
- S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL),
+ S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, NULL),
&found, 1)) == 0) {
ast_channel_priority_set(c, ast_channel_priority(c) + 1);
}
@@ -9854,14 +9854,14 @@ static int pbx_builtin_waitexten(struct ast_channel *chan, const char *data)
/* Call is hungup for some reason. */
res = -1;
} else if (ast_exists_extension(chan, ast_channel_context(chan), ast_channel_exten(chan), ast_channel_priority(chan) + 1,
- S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, NULL))) {
ast_verb(3, "Timeout on %s, continuing...\n", ast_channel_name(chan));
} else if (ast_exists_extension(chan, ast_channel_context(chan), "t", 1,
- S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, NULL))) {
ast_verb(3, "Timeout on %s, going to 't'\n", ast_channel_name(chan));
set_ext_pri(chan, "t", 0); /* 0 will become 1, next time through the loop */
} else if (ast_exists_extension(chan, ast_channel_context(chan), "e", 1,
- S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, NULL))) {
raise_exception(chan, "RESPONSETIMEOUT", 0); /* 0 will become 1, next time through the loop */
} else {
ast_log(LOG_WARNING, "Timeout but no rule 't' or 'e' in context '%s'\n",
@@ -9980,9 +9980,9 @@ static int pbx_builtin_background(struct ast_channel *chan, const char *data)
if (!ast_test_flag(chan, AST_FLAG_DISABLE_WORKAROUNDS)
&& (exten[0] = res)
&& ast_canmatch_extension(chan, args.context, exten, 1,
- S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL))
+ S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, NULL))
&& !ast_matchmore_extension(chan, args.context, exten, 1,
- S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL))) {
+ S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, NULL))) {
char buf[2] = { 0, };
snprintf(buf, sizeof(buf), "%c", res);
ast_channel_exten_set(chan, buf);
@@ -10020,7 +10020,7 @@ int pbx_builtin_serialize_variables(struct ast_channel *chan, struct ast_str **b
ast_channel_lock(chan);
- AST_LIST_TRAVERSE(&chan->varshead, variables, entries) {
+ AST_LIST_TRAVERSE(ast_channel_varshead(chan), variables, entries) {
if ((var = ast_var_name(variables)) && (val = ast_var_value(variables))
/* && !ast_strlen_zero(var) && !ast_strlen_zero(val) */
) {
@@ -10050,7 +10050,7 @@ const char *pbx_builtin_getvar_helper(struct ast_channel *chan, const char *name
if (chan) {
ast_channel_lock(chan);
- places[0] = &chan->varshead;
+ places[0] = ast_channel_varshead(chan);
}
for (i = 0; i < 2; i++) {
@@ -10091,7 +10091,7 @@ void pbx_builtin_pushvar_helper(struct ast_channel *chan, const char *name, cons
if (chan) {
ast_channel_lock(chan);
- headp = &chan->varshead;
+ headp = ast_channel_varshead(chan);
} else {
ast_rwlock_wrlock(&globalslock);
headp = &globals;
@@ -10124,7 +10124,7 @@ int pbx_builtin_setvar_helper(struct ast_channel *chan, const char *name, const
if (chan) {
ast_channel_lock(chan);
- headp = &chan->varshead;
+ headp = ast_channel_varshead(chan);
} else {
ast_rwlock_wrlock(&globalslock);
headp = &globals;
@@ -10699,7 +10699,7 @@ static int __ast_goto_if_exists(struct ast_channel *chan, const char *context, c
goto_func = (async) ? ast_async_goto : ast_explicit_goto;
if (ast_exists_extension(chan, context, exten, priority,
- S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL)))
+ S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, NULL)))
return goto_func(chan, context, exten, priority);
else {
return AST_PBX_GOTO_FAILED;
@@ -10750,7 +10750,7 @@ static int pbx_parseable_goto(struct ast_channel *chan, const char *goto_string,
if (sscanf(pri, "%30d", &ipri) != 1) {
ipri = ast_findlabel_extension(chan, context ? context : ast_channel_context(chan),
exten ? exten : ast_channel_exten(chan), pri,
- S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL));
+ S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, NULL));
if (ipri < 1) {
ast_log(LOG_WARNING, "Priority '%s' must be a number > 0, or valid label\n", pri);
return -1;