[Asterisk-code-review] ParkAndAnnounce: Add variable inheritance (asterisk[master])

Jonathan Rose asteriskteam at digium.com
Thu Sep 3 14:12:10 CDT 2015


Jonathan Rose has uploaded a new change for review.

  https://gerrit.asterisk.org/1180

Change subject: ParkAndAnnounce: Add variable inheritance
......................................................................

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.

Change-Id: Ie47e618330114ad2ea91e2edcef1cb6f341eed6e
---
M res/parking/parking_applications.c
1 file changed, 57 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/80/1180/1

diff --git a/res/parking/parking_applications.c b/res/parking/parking_applications.c
index 34b081b..ce7cb72 100644
--- a/res/parking/parking_applications.c
+++ b/res/parking/parking_applications.c
@@ -694,6 +694,60 @@
 	return pa_data;
 }
 
+static void append_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;
@@ -715,6 +769,9 @@
 
 	snprintf(buf, sizeof(buf), "%d", parkingspace);
 	oh.vars = ast_variable_new("_PARKEDAT", buf, "");
+
+	append_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,

-- 
To view, visit https://gerrit.asterisk.org/1180
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie47e618330114ad2ea91e2edcef1cb6f341eed6e
Gerrit-PatchSet: 1
Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-Owner: Jonathan Rose <jrose at digium.com>



More information about the asterisk-code-review mailing list