Author: dlee
Date: Thu Aug  8 13:20:48 2013
New Revision: 396407

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=396407
Log:
org

Modified:
    team/dlee/ASTERISK-21969/main/stasis_bridges.c
    team/dlee/ASTERISK-21969/res/stasis/app.c

Modified: team/dlee/ASTERISK-21969/main/stasis_bridges.c
URL: 
http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/main/stasis_bridges.c?view=diff&rev=396407&r1=396406&r2=396407
==============================================================================
--- team/dlee/ASTERISK-21969/main/stasis_bridges.c (original)
+++ team/dlee/ASTERISK-21969/main/stasis_bridges.c Thu Aug  8 13:20:48 2013
@@ -134,6 +134,7 @@
 static struct ast_manager_event_blob *blind_transfer_to_ami(struct 
stasis_message *message);
 static struct ast_json *ast_channel_entered_bridge_to_json(struct 
stasis_message *msg);
 static struct ast_json *ast_channel_left_bridge_to_json(struct stasis_message 
*msg);
+static struct ast_json *ast_bridge_merge_message_to_json(struct stasis_message 
*msg);
 
 static struct stasis_cp_all *bridge_cache_all;
 
@@ -141,7 +142,8 @@
  * @{ \brief Define bridge message types.
  */
 STASIS_MESSAGE_TYPE_DEFN(ast_bridge_snapshot_type);
-STASIS_MESSAGE_TYPE_DEFN(ast_bridge_merge_message_type);
+STASIS_MESSAGE_TYPE_DEFN(ast_bridge_merge_message_type,
+       .to_json = ast_bridge_merge_message_to_json);
 STASIS_MESSAGE_TYPE_DEFN(ast_channel_entered_bridge_type,
        .to_json = ast_channel_entered_bridge_to_json);
 STASIS_MESSAGE_TYPE_DEFN(ast_channel_left_bridge_type,
@@ -309,6 +311,19 @@
 
        ao2_ref(msg, +1);
        return msg;
+}
+
+static struct ast_json *ast_bridge_merge_message_to_json(struct stasis_message 
*msg)
+{
+       struct ast_bridge_merge_message *merge;
+
+       merge = stasis_message_data(msg);
+
+        return ast_json_pack("{s: s, s: o, s: o, s: o}",
+                "type", "BridgeMerged",
+                "timestamp", ast_json_timeval(*stasis_message_timestamp(msg), 
NULL),
+                "bridge", ast_bridge_snapshot_to_json(merge->to),
+                "bridge_from", ast_bridge_snapshot_to_json(merge->from));
 }
 
 void ast_bridge_publish_merge(struct ast_bridge *to, struct ast_bridge *from)

Modified: team/dlee/ASTERISK-21969/res/stasis/app.c
URL: 
http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/res/stasis/app.c?view=diff&rev=396407&r1=396406&r2=396407
==============================================================================
--- team/dlee/ASTERISK-21969/res/stasis/app.c (original)
+++ team/dlee/ASTERISK-21969/res/stasis/app.c Thu Aug  8 13:20:48 2013
@@ -39,6 +39,8 @@
        struct stasis_topic *topic;
        /*! Router for handling messages forwarded to \a topic. */
        struct stasis_message_router *router;
+       /*! Subscription to watch for bridge merge messages */
+       struct stasis_subscription *bridge_merge_sub;
        /*! Container of the channel forwards to this app's topic. */
        struct ao2_container *forwards;
        /*! Callback function for this application. */
@@ -268,6 +270,35 @@
         app_send(app, json);
 }
 
+static void bridge_merge_handler(void *data, struct stasis_subscription *sub,
+       struct stasis_topic *topic, struct stasis_message *message)
+{
+       struct app *app = data;
+       struct ast_bridge_merge_message *merge;
+       RAII_VAR(struct app_forwards *, forwards, NULL, ao2_cleanup);
+
+       if (stasis_message_type(message) != ast_bridge_merge_message_type()) {
+               return;
+       }
+
+       merge = stasis_message_data(message);
+
+       /* Find out if we're subscribed to either bridge */
+       forwards = ao2_find(app->forwards, merge->from->uniqueid,
+               OBJ_SEARCH_KEY);
+       if (!forwards) {
+               forwards = ao2_find(app->forwards, merge->to->uniqueid,
+                       OBJ_SEARCH_KEY);
+       }
+
+       if (!forwards) {
+               return;
+       }
+
+       /* Forward the message to the app */
+       stasis_forward_message(app->topic, topic, message);
+}
+
 struct app *app_create(const char *name, stasis_app_cb handler, void *data)
 {
        RAII_VAR(struct app *, app, NULL, ao2_cleanup);
@@ -295,6 +326,12 @@
                return NULL;
        }
 
+       app->bridge_merge_sub = stasis_subscribe(ast_bridge_topic_all(),
+               bridge_merge_handler, app);
+       if (!app->bridge_merge_sub) {
+               return NULL;
+       }
+
        app->router = stasis_message_router_create(app->topic);
        if (!app->router) {
                return NULL;
@@ -303,11 +340,6 @@
         res |= stasis_message_router_add_cache_update(app->router,
                ast_bridge_snapshot_type(), sub_bridge_update_handler, app);
 
-       /*
-        res |= stasis_message_router_add(app->router,
-               ast_bridge_merge_message_type(), sub_bridge_merge_handler,
-               app);
-       */
        res |= stasis_message_router_set_default(app->router,
                sub_default_handler, app);
 


--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to