[asterisk-commits] irroot: branch irroot/distrotech-customers-1.8 r338496 - in /team/irroot/dist...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Sep 29 14:11:25 CDT 2011
Author: irroot
Date: Thu Sep 29 14:11:21 2011
New Revision: 338496
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=338496
Log:
Redo pickup macro patch to use channel datastore
Add documentation
Modified:
team/irroot/distrotech-customers-1.8/apps/app_directed_pickup.c
team/irroot/distrotech-customers-1.8/configs/features.conf.sample
team/irroot/distrotech-customers-1.8/include/asterisk/global_datastores.h
team/irroot/distrotech-customers-1.8/main/channel.c
team/irroot/distrotech-customers-1.8/main/features.c
team/irroot/distrotech-customers-1.8/main/global_datastores.c
Modified: team/irroot/distrotech-customers-1.8/apps/app_directed_pickup.c
URL: http://svnview.digium.com/svn/asterisk/team/irroot/distrotech-customers-1.8/apps/app_directed_pickup.c?view=diff&rev=338496&r1=338495&r2=338496
==============================================================================
--- team/irroot/distrotech-customers-1.8/apps/app_directed_pickup.c (original)
+++ team/irroot/distrotech-customers-1.8/apps/app_directed_pickup.c Thu Sep 29 14:11:21 2011
@@ -73,7 +73,10 @@
tries to find a channel which has defined a <variable>PICKUPMARK</variable>
channel variable with the same value as <replaceable>extension</replaceable>
(in this example, <literal>10</literal>). When no parameter is specified, the application
- will pickup a channel matching the pickup group of the active channel.</para>
+ will pickup a channel matching the pickup group of the active channel.
+ If the channel variable <variable>PICKUP_BRIDGE_MACRO</variable> is set this macro will run
+ on the picked up channel using the channel variable <variable>PICKUP_BRIDGE_MACRO_ARGS</variable>
+ as arguments.</para>
</description>
</application>
<application name="PickupChan" language="en_US">
@@ -94,7 +97,10 @@
</parameter>
</syntax>
<description>
- <para>This will pickup a specified <replaceable>channel</replaceable> if ringing.</para>
+ <para>This will pickup a specified <replaceable>channel</replaceable> if ringing.
+ If the channel variable <variable>PICKUP_BRIDGE_MACRO</variable> is set this macro will run
+ on the picked up channel using the channel variable <variable>PICKUP_BRIDGE_MACRO_ARGS</variable>
+ as arguments.</para>
</description>
</application>
***/
Modified: team/irroot/distrotech-customers-1.8/configs/features.conf.sample
URL: http://svnview.digium.com/svn/asterisk/team/irroot/distrotech-customers-1.8/configs/features.conf.sample?view=diff&rev=338496&r1=338495&r2=338496
==============================================================================
--- team/irroot/distrotech-customers-1.8/configs/features.conf.sample (original)
+++ team/irroot/distrotech-customers-1.8/configs/features.conf.sample Thu Sep 29 14:11:21 2011
@@ -79,6 +79,10 @@
;xfersound = beep ; to indicate an attended transfer is complete
;xferfailsound = beeperr ; to indicate a failed transfer
;pickupexten = *8 ; Configure the pickup extension. (default is *8)
+ ; You can set a channel variable PICKUP_BRIDGE_MACRO
+ ; to run a macro on a channel that is been picked up
+ ; arguments can be passed to it by setting PICKUP_BRIDGE_MACRO_ARGS.
+ ;
;pickupsound = beep ; to indicate a successful pickup (default: no sound)
;pickupfailsound = beeperr ; to indicate that the pickup failed (default: no sound)
;featuredigittimeout = 1000 ; Max time (ms) between digits for
Modified: team/irroot/distrotech-customers-1.8/include/asterisk/global_datastores.h
URL: http://svnview.digium.com/svn/asterisk/team/irroot/distrotech-customers-1.8/include/asterisk/global_datastores.h?view=diff&rev=338496&r1=338495&r2=338496
==============================================================================
--- team/irroot/distrotech-customers-1.8/include/asterisk/global_datastores.h (original)
+++ team/irroot/distrotech-customers-1.8/include/asterisk/global_datastores.h Thu Sep 29 14:11:21 2011
@@ -28,6 +28,7 @@
extern const struct ast_datastore_info dialed_interface_info;
extern const struct ast_datastore_info secure_call_info;
+extern const struct ast_datastore_info pickup_target_info;
struct ast_dialed_interface {
AST_LIST_ENTRY(ast_dialed_interface) list;
Modified: team/irroot/distrotech-customers-1.8/main/channel.c
URL: http://svnview.digium.com/svn/asterisk/team/irroot/distrotech-customers-1.8/main/channel.c?view=diff&rev=338496&r1=338495&r2=338496
==============================================================================
--- team/irroot/distrotech-customers-1.8/main/channel.c (original)
+++ team/irroot/distrotech-customers-1.8/main/channel.c Thu Sep 29 14:11:21 2011
@@ -7216,6 +7216,7 @@
char callee_warning = 0;
const char *bridge_macro;
const char *bridge_macro_args;
+ struct ast_datastore *ds_bridge_macro;
*fo = NULL;
@@ -7290,15 +7291,29 @@
ast_indicate(c0, AST_CONTROL_SRCUPDATE);
ast_indicate(c1, AST_CONTROL_SRCUPDATE);
- bridge_macro = pbx_builtin_getvar_helper(c0, "PICKUP_BRIDGE_MACRO");
- if (!ast_strlen_zero(bridge_macro)) {
- bridge_macro_args = pbx_builtin_getvar_helper(c0, "PICKUP_BRIDGE_MACRO_ARGS");
- ast_app_run_macro(c0, c1, bridge_macro, bridge_macro_args);
- }
- bridge_macro = pbx_builtin_getvar_helper(c1, "PICKUP_BRIDGE_MACRO");
- if (!ast_strlen_zero(bridge_macro)) {
- bridge_macro_args = pbx_builtin_getvar_helper(c1, "PICKUP_BRIDGE_MACRO_ARGS");
- ast_app_run_macro(c1, c0, bridge_macro, bridge_macro_args);
+ if ((ds_bridge_macro = ast_channel_datastore_find(c0, &pickup_target_info, NULL))) {
+ bridge_macro = pbx_builtin_getvar_helper(c0, "PICKUP_BRIDGE_MACRO");
+ if (!ast_strlen_zero(bridge_macro)) {
+ bridge_macro_args = pbx_builtin_getvar_helper(c0, "PICKUP_BRIDGE_MACRO_ARGS");
+ ast_app_run_macro(c0, c1, bridge_macro, bridge_macro_args);
+ }
+ ast_channel_lock(c0);
+ if (!ast_channel_datastore_remove(c0, ds_bridge_macro)) {
+ ast_datastore_free(ds_bridge_macro);
+ }
+ ast_channel_unlock(c0);
+ }
+ if ((ds_bridge_macro = ast_channel_datastore_find(c1, &pickup_target_info, NULL))) {
+ bridge_macro = pbx_builtin_getvar_helper(c1, "PICKUP_BRIDGE_MACRO");
+ if (!ast_strlen_zero(bridge_macro)) {
+ bridge_macro_args = pbx_builtin_getvar_helper(c1, "PICKUP_BRIDGE_MACRO_ARGS");
+ ast_app_run_macro(c1, c0, bridge_macro, bridge_macro_args);
+ }
+ ast_channel_lock(c1);
+ if (!ast_channel_datastore_remove(c1, ds_bridge_macro)) {
+ ast_datastore_free(ds_bridge_macro);
+ }
+ ast_channel_unlock(c1);
}
for (/* ever */;;) {
Modified: team/irroot/distrotech-customers-1.8/main/features.c
URL: http://svnview.digium.com/svn/asterisk/team/irroot/distrotech-customers-1.8/main/features.c?view=diff&rev=338496&r1=338495&r2=338496
==============================================================================
--- team/irroot/distrotech-customers-1.8/main/features.c (original)
+++ team/irroot/distrotech-customers-1.8/main/features.c Thu Sep 29 14:11:21 2011
@@ -7038,6 +7038,7 @@
struct ast_party_connected_line connected_caller;
struct ast_channel *chans[2] = { chan, target };
struct ast_datastore *ds_pickup;
+ struct ast_datastore *ds_bridge_macro;
const char *chan_name;/*!< A masquerade changes channel names. */
const char *target_name;/*!< A masquerade changes channel names. */
int res = -1;
@@ -7053,6 +7054,15 @@
return -1;
}
ast_channel_datastore_add(target, ds_pickup);
+
+ /* Mark the target so a macro can be run on it if needed. */
+ ds_bridge_macro = ast_datastore_alloc(&pickup_target_info, NULL);
+ if (ds_bridge_macro) {
+ ast_channel_datastore_add(target, ds_bridge_macro);
+ } else {
+ ast_log(LOG_WARNING,
+ "Unable to create channel datastore on '%s' for running macro\n", target_name);
+ }
ast_party_connected_line_init(&connected_caller);
ast_party_connected_line_copy(&connected_caller, &target->connected);
@@ -7106,6 +7116,9 @@
ast_channel_lock(target);
if (!ast_channel_datastore_remove(target, ds_pickup)) {
ast_datastore_free(ds_pickup);
+ }
+ if (res && ds_bridge_macro && !ast_channel_datastore_remove(target, ds_bridge_macro)) {
+ ast_datastore_free(ds_bridge_macro);
}
return res;
Modified: team/irroot/distrotech-customers-1.8/main/global_datastores.c
URL: http://svnview.digium.com/svn/asterisk/team/irroot/distrotech-customers-1.8/main/global_datastores.c?view=diff&rev=338496&r1=338495&r2=338496
==============================================================================
--- team/irroot/distrotech-customers-1.8/main/global_datastores.c (original)
+++ team/irroot/distrotech-customers-1.8/main/global_datastores.c Thu Sep 29 14:11:21 2011
@@ -110,3 +110,7 @@
.destroy = secure_call_store_destroy,
.duplicate = secure_call_store_duplicate,
};
+
+const struct ast_datastore_info pickup_target_info = {
+ .type = "pickup-call",
+};
More information about the asterisk-commits
mailing list