summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorMark Michelson <mmichelson@digium.com>2013-08-02 14:13:04 +0000
committerMark Michelson <mmichelson@digium.com>2013-08-02 14:13:04 +0000
commit328e99f41d48d8f15832bf4f6c97beb0ef71fc0c (patch)
treec79646508e9ae44a0728fa38832ae112d02ece45 /main
parent41d6be2432a77cf9da5dbb3f0590a74340a2c54e (diff)
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
Diffstat (limited to 'main')
-rw-r--r--main/bridge_channel.c2
-rw-r--r--main/cel.c3
-rw-r--r--main/manager_bridges.c15
-rw-r--r--main/stasis_bridges.c13
4 files changed, 28 insertions, 5 deletions
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;
<syntax>
<bridge_snapshot/>
<channel_snapshot/>
+ <parameter name="SwapUniqueid">
+ <para>The uniqueid of the channel being swapped out of the bridge</para>
+ </parameter>
</syntax>
</managerEventInstance>
</managerEvent>
@@ -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;
}