]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
cel: Make sure channels in extra fields include their unique IDs as well
authorMatthew Jordan <mjordan@digium.com>
Thu, 14 Aug 2014 19:09:32 +0000 (19:09 +0000)
committerMatthew Jordan <mjordan@digium.com>
Thu, 14 Aug 2014 19:09:32 +0000 (19:09 +0000)
CEL typically tracks a lot of information using the unique ID of the channel.
This is typically needed due to tying events together using the linked ID of
the various channels involved in a "call", which is derived from the channel ID
of the oldest channel involved in a bridge (or in the case of a Dial, the
parent channel).

Previously, we had updated the extra fields to include the involved channel
names, but forgot to put in the unique ID. This patch corrects that error.

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/12@421037 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/cel.c
tests/test_cel.c

index b4c4b41f2f8f15a053f83705af578a2455ca1f8a..d4dcb25f37878f13a6dda18d29dc5e0af0539011 100644 (file)
@@ -1363,11 +1363,12 @@ static void cel_blind_transfer_cb(
                return;
        }
 
-       extra = ast_json_pack("{s: s, s: s, s: s}",
+       extra = ast_json_pack("{s: s, s: s, s: s, s: s, s: s}",
                "extension", transfer_msg->exten,
                "context", transfer_msg->context,
                "bridge_id", bridge_snapshot->uniqueid,
-               "transferee_channel_name", transfer_msg->transferee ? transfer_msg->transferee->name: "N/A");
+               "transferee_channel_name", transfer_msg->transferee ? transfer_msg->transferee->name : "N/A",
+               "transferee_channel_uniqueid", transfer_msg->transferee ? transfer_msg->transferee->uniqueid  : "N/A");
        if (extra) {
                cel_report_event(chan_snapshot, AST_CEL_BLINDTRANSFER, NULL, extra, NULL);
                ast_json_unref(extra);
@@ -1403,24 +1404,30 @@ static void cel_attended_transfer_cb(
        case AST_ATTENDED_TRANSFER_DEST_BRIDGE_MERGE:
        case AST_ATTENDED_TRANSFER_DEST_LINK:
        case AST_ATTENDED_TRANSFER_DEST_THREEWAY:
-               extra = ast_json_pack("{s: s, s: s, s: s, s: s, s: s}",
+               extra = ast_json_pack("{s: s, s: s, s: s, s: s, s: s, s: s, s: s, s: s}",
                        "bridge1_id", bridge1->uniqueid,
                        "channel2_name", channel2->name,
+                       "channel2_uniqueid", channel2->uniqueid,
                        "bridge2_id", bridge2->uniqueid,
                        "transferee_channel_name", xfer->transferee ? xfer->transferee->name : "N/A",
-                       "transfer_target_channel_name", xfer->target ? xfer->target->name : "N/A");
+                       "transferee_channel_uniqueid", xfer->transferee ? xfer->transferee->uniqueid : "N/A",
+                       "transfer_target_channel_name", xfer->target ? xfer->target->name : "N/A",
+                       "transfer_target_channel_uniqueid", xfer->target ? xfer->target->uniqueid : "N/A");
                if (!extra) {
                        return;
                }
                break;
        case AST_ATTENDED_TRANSFER_DEST_APP:
        case AST_ATTENDED_TRANSFER_DEST_LOCAL_APP:
-               extra = ast_json_pack("{s: s, s: s, s: s, s: s, s: s}",
+               extra = ast_json_pack("{s: s, s: s, s: s, s: s, s: s, s: s, s: s, s: s}",
                        "bridge1_id", bridge1->uniqueid,
                        "channel2_name", channel2->name,
+                       "channel2_uniqueid", channel2->uniqueid,
                        "app", xfer->dest.app,
                        "transferee_channel_name", xfer->transferee ? xfer->transferee->name : "N/A",
-                       "transfer_target_channel_name", xfer->target ? xfer->target->name : "N/A");
+                       "transferee_channel_uniqueid", xfer->transferee ? xfer->transferee->uniqueid : "N/A",
+                       "transfer_target_channel_name", xfer->target ? xfer->target->name : "N/A",
+                       "transfer_target_channel_uniqueid", xfer->target ? xfer->target->uniqueid : "N/A");
                if (!extra) {
                        return;
                }
@@ -1443,7 +1450,9 @@ static void cel_pickup_cb(
                return;
        }
 
-       extra = ast_json_pack("{s: s}", "pickup_channel", channel->name);
+       extra = ast_json_pack("{s: s, s: s}",
+               "pickup_channel", channel->name,
+               "pickup_channel_uniqueid", channel->uniqueid);
        if (!extra) {
                return;
        }
@@ -1465,7 +1474,9 @@ static void cel_local_cb(
                return;
        }
 
-       extra = ast_json_pack("{s: s}", "local_two", localtwo->name);
+       extra = ast_json_pack("{s: s, s: s}",
+               "local_two", localtwo->name,
+               "local_two_uniqueid", localtwo->uniqueid);
        if (!extra) {
                return;
        }
index 2d9b2c805731d78d57d4bff155af3d505ada6a67..89a23d29d16adf6158503622db51cb678ae09f50 100644 (file)
@@ -168,22 +168,27 @@ static void do_sleep(void)
 
 #define BLINDTRANSFER_EVENT(channel, bridge, extension, context) do { \
        RAII_VAR(struct ast_json *, extra, NULL, ast_json_unref); \
-       extra = ast_json_pack("{s: s, s: s, s: s}", \
+       extra = ast_json_pack("{s: s, s: s, s: s, s: s, s: s}", \
                "extension", extension, \
                "context", context, \
-               "bridge_id", bridge->uniqueid); \
+               "bridge_id", bridge->uniqueid, \
+               "transferee_channel_name", "N/A", \
+               "transferee_channel_uniqueid", "N/A"); \
        ast_test_validate(test, extra != NULL); \
        APPEND_EVENT(channel, AST_CEL_BLINDTRANSFER, NULL, extra); \
        } while (0)
 
 #define ATTENDEDTRANSFER_BRIDGE(channel1, bridge1, channel2, bridge2, channel3, channel4) do { \
        RAII_VAR(struct ast_json *, extra, NULL, ast_json_unref); \
-       extra = ast_json_pack("{s: s, s: s, s: s, s: s, s: s}", \
+       extra = ast_json_pack("{s: s, s: s, s: s, s: s, s: s, s: s, s: s, s: s}", \
                "bridge1_id", bridge1->uniqueid, \
                "channel2_name", ast_channel_name(channel2), \
+               "channel2_uniqueid", ast_channel_uniqueid(channel2), \
                "bridge2_id", bridge2->uniqueid, \
                "transferee_channel_name", ast_channel_name(channel4), \
-               "transfer_target_channel_name", ast_channel_name(channel3)); \
+               "transferee_channel_uniqueid", ast_channel_uniqueid(channel4), \
+               "transfer_target_channel_name", ast_channel_name(channel3), \
+               "transfer_target_channel_uniqueid", ast_channel_uniqueid(channel3)); \
        ast_test_validate(test, extra != NULL); \
        APPEND_EVENT(channel1, AST_CEL_ATTENDEDTRANSFER, NULL, extra); \
        } while (0)
@@ -1565,7 +1570,8 @@ AST_TEST_DEFINE(test_cel_dial_pickup)
                RAII_VAR(struct ast_json *, extra, NULL, ast_json_unref);
                SCOPED_CHANNELLOCK(lock, chan_callee);
 
-               extra = ast_json_pack("{s: s}", "pickup_channel", ast_channel_name(chan_charlie));
+               extra = ast_json_pack("{s: s, s: s}", "pickup_channel", ast_channel_name(chan_charlie),
+                       "pickup_channel_uniqueid", ast_channel_uniqueid(chan_charlie));
                ast_test_validate(test, extra != NULL);
 
                APPEND_EVENT(chan_callee, AST_CEL_PICKUP, NULL, extra);
@@ -1638,7 +1644,8 @@ AST_TEST_DEFINE(test_cel_local_optimize)
        stasis_publish(ast_channel_topic(chan_alice), local_opt_begin);
        stasis_publish(ast_channel_topic(chan_alice), local_opt_end);
 
-       extra = ast_json_pack("{s: s}", "local_two", bob_snapshot->name);
+       extra = ast_json_pack("{s: s, s: s}", "local_two", bob_snapshot->name,
+               "local_two_uniqueid", bob_snapshot->uniqueid);
        ast_test_validate(test, extra != NULL);
 
        APPEND_EVENT_SNAPSHOT(alice_snapshot, AST_CEL_LOCAL_OPTIMIZE, NULL, extra, NULL);