From 328e99f41d48d8f15832bf4f6c97beb0ef71fc0c Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Fri, 2 Aug 2013 14:13:04 +0000 Subject: Make a couple of changes to help AMI events to be more clear in what is occurring. * BridgeEnter now contains the unique ID of the channel that is to be swapped out, if applicable. * There is a ParkedCallSwap event that is sent when a parked channel has a new channel take its place. (closes issue ASTERISK-22193) reported by Mark Michelson Review: https://reviewboard.asterisk.org/r/2712 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@396107 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/bridge_channel.c | 2 +- main/cel.c | 3 +++ main/manager_bridges.c | 15 +++++++++++++-- main/stasis_bridges.c | 13 +++++++++++-- 4 files changed, 28 insertions(+), 5 deletions(-) (limited to 'main') diff --git a/main/bridge_channel.c b/main/bridge_channel.c index f0163ff2e..c782ec67d 100644 --- a/main/bridge_channel.c +++ b/main/bridge_channel.c @@ -1429,7 +1429,7 @@ int bridge_channel_internal_push(struct ast_bridge_channel *bridge_channel) bridge->v_table->name, bridge->uniqueid); - ast_bridge_publish_enter(bridge, bridge_channel->chan); + ast_bridge_publish_enter(bridge, bridge_channel->chan, swap ? swap->chan : NULL); if (swap) { ast_bridge_channel_leave_bridge(swap, BRIDGE_CHANNEL_STATE_END_NO_DISSOLVE); bridge_channel_internal_pull(swap); diff --git a/main/cel.c b/main/cel.c index 2b5306e21..befb2b257 100644 --- a/main/cel.c +++ b/main/cel.c @@ -1304,6 +1304,9 @@ static void cel_parking_cb( case PARKED_CALL_FAILED: reason = "ParkedCallFailed"; break; + case PARKED_CALL_SWAP: + reason = "ParkedCallSwap"; + break; } extra = ast_json_pack("{s: s}", "reason", reason); diff --git a/main/manager_bridges.c b/main/manager_bridges.c index 5d831b5b4..77533c600 100644 --- a/main/manager_bridges.c +++ b/main/manager_bridges.c @@ -58,6 +58,9 @@ static struct stasis_message_router *bridge_state_router; + + The uniqueid of the channel being swapped out of the bridge + @@ -247,9 +250,11 @@ static void channel_enter_cb(void *data, struct stasis_subscription *sub, struct stasis_topic *topic, struct stasis_message *message) { + static const char *swap_name = "SwapUniqueid: "; struct ast_bridge_blob *blob = stasis_message_data(message); RAII_VAR(struct ast_str *, bridge_text, NULL, ast_free); RAII_VAR(struct ast_str *, channel_text, NULL, ast_free); + const char *swap_id; bridge_text = ast_manager_build_bridge_state_string(blob->bridge, ""); channel_text = ast_manager_build_channel_state_string(blob->channel); @@ -257,11 +262,17 @@ static void channel_enter_cb(void *data, struct stasis_subscription *sub, return; } + swap_id = ast_json_string_get(ast_json_object_get(blob->blob, "swap")); + manager_event(EVENT_FLAG_CALL, "BridgeEnter", "%s" - "%s", + "%s" + "%s%s%s", ast_str_buffer(bridge_text), - ast_str_buffer(channel_text)); + ast_str_buffer(channel_text), + swap_id ? swap_name : "", + S_OR(swap_id, ""), + swap_id ? "\r\n" : ""); } static void channel_leave_cb(void *data, struct stasis_subscription *sub, diff --git a/main/stasis_bridges.c b/main/stasis_bridges.c index 251f9d7af..a3eeef675 100644 --- a/main/stasis_bridges.c +++ b/main/stasis_bridges.c @@ -380,11 +380,20 @@ struct stasis_message *ast_bridge_blob_create( return msg; } -void ast_bridge_publish_enter(struct ast_bridge *bridge, struct ast_channel *chan) +void ast_bridge_publish_enter(struct ast_bridge *bridge, struct ast_channel *chan, + struct ast_channel *swap) { RAII_VAR(struct stasis_message *, msg, NULL, ao2_cleanup); + RAII_VAR(struct ast_json *, blob, NULL, ao2_cleanup); - msg = ast_bridge_blob_create(ast_channel_entered_bridge_type(), bridge, chan, NULL); + if (swap) { + blob = ast_json_pack("{s: s}", "swap", ast_channel_uniqueid(swap)); + if (!blob) { + return; + } + } + + msg = ast_bridge_blob_create(ast_channel_entered_bridge_type(), bridge, chan, blob); if (!msg) { return; } -- cgit v1.2.3