ParkAndAnnounce: Add variable inheritance

In Asterisk 11, the announcer channel would receive channel variables
from the channel being parked by means of normal channel inheritance.
This functionality was lost during the big res_parking project in
Asterisk 12. This patch restores that functionality.

ASTERISK-25369 #close
Review: https://gerrit.asterisk.org/#/c/1180/

Change-Id: Ie47e618330114ad2ea91e2edcef1cb6f341eed6e
changes/27/1227/1
Jonathan Rose 10 years ago
parent 0901a82adb
commit 7b5bcbeebe

@ -689,6 +689,68 @@ static struct park_announce_subscription_data *park_announce_subscription_data_c
return pa_data;
}
/*! \internal
* \brief Gathers inheritable channel variables from a channel by name.
*
* \param oh outgoing helper struct we are bestowing inheritable variables to
* \param channel_id name or uniqueID of the channel to inherit variables from
*
* \return Nothing
*/
static void inherit_channel_vars_from_id(struct outgoing_helper *oh, const char *channel_id)
{
struct ast_channel *chan = ast_channel_get_by_name(channel_id);
struct ast_var_t *current;
struct ast_variable *newvar;
const char *varname;
int vartype;
if (!chan) {
/* Already gone */
return;
}
ast_channel_lock(chan);
AST_LIST_TRAVERSE(ast_channel_varshead((struct ast_channel *) chan), current, entries) {
varname = ast_var_full_name(current);
if (!varname) {
continue;
}
vartype = 0;
if (varname[0] == '_') {
vartype = 1;
if (varname[1] == '_') {
vartype = 2;
}
}
switch (vartype) {
case 1:
newvar = ast_variable_new(&varname[1], ast_var_value(current), "");
break;
case 2:
newvar = ast_variable_new(varname, ast_var_value(current), "");
break;
default:
continue;
}
if (newvar) {
ast_debug(1, "Inheriting variable %s from %s.\n",
newvar->name, ast_channel_name(chan));
if (oh->vars) {
newvar->next = oh->vars;
oh->vars = newvar;
}
}
}
ast_channel_unlock(chan);
ast_channel_cleanup(chan);
}
static void announce_to_dial(char *dial_string, char *announce_string, int parkingspace, struct ast_channel_snapshot *parkee_snapshot)
{
struct ast_channel *dchan;
@ -710,6 +772,9 @@ static void announce_to_dial(char *dial_string, char *announce_string, int parki
snprintf(buf, sizeof(buf), "%d", parkingspace);
oh.vars = ast_variable_new("_PARKEDAT", buf, "");
inherit_channel_vars_from_id(&oh, parkee_snapshot->uniqueid);
dchan = __ast_request_and_dial(dial_tech, cap_slin, NULL, NULL, dial_string, 30000,
&outstate,
parkee_snapshot->caller_number,

Loading…
Cancel
Save