[svn-commits] kmoore: branch group/bridge_construction r388669 - in /team/group/bridge_cons...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Tue May 14 07:54:07 CDT 2013


Author: kmoore
Date: Tue May 14 07:54:02 2013
New Revision: 388669

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=388669
Log:
Remove the type field for bridge blobs

Similar to what was just done for channels, the JSON type field is
being removed from bridge blob messages and exchanged for individual
message types.

Review: https://reviewboard.asterisk.org/r/2528/

Modified:
    team/group/bridge_construction/include/asterisk/stasis_bridging.h
    team/group/bridge_construction/main/manager_bridging.c
    team/group/bridge_construction/main/stasis_bridging.c

Modified: team/group/bridge_construction/include/asterisk/stasis_bridging.h
URL: http://svnview.digium.com/svn/asterisk/team/group/bridge_construction/include/asterisk/stasis_bridging.h?view=diff&rev=388669&r1=388668&r2=388669
==============================================================================
--- team/group/bridge_construction/include/asterisk/stasis_bridging.h (original)
+++ team/group/bridge_construction/include/asterisk/stasis_bridging.h Tue May 14 07:54:02 2013
@@ -149,11 +149,19 @@
 
 /*!
  * \since 12
- * \brief Message type for \ref ast_bridge_blob messages.
- *
- * \retval Message type for \ref ast_bridge_blob messages.
- */
-struct stasis_message_type *ast_bridge_blob_type(void);
+ * \brief Message type for \ref channel enter bridge blob messages.
+ *
+ * \retval Message type for \ref channel enter bridge blob messages.
+ */
+struct stasis_message_type *ast_channel_entered_bridge_type(void);
+
+/*!
+ * \since 12
+ * \brief Message type for \ref channel leave bridge blob messages.
+ *
+ * \retval Message type for \ref channel leave bridge blob messages.
+ */
+struct stasis_message_type *ast_channel_left_bridge_type(void);
 
 /*!
  * \since 12
@@ -168,9 +176,10 @@
  * \return \ref ast_bridge_blob message.
  * \return \c NULL on error
  */
-struct stasis_message *ast_bridge_blob_create(struct ast_bridge *bridge,
-					struct ast_channel *chan,
-					struct ast_json *blob);
+struct stasis_message *ast_bridge_blob_create(struct stasis_message_type *type,
+	struct ast_bridge *bridge,
+	struct ast_channel *chan,
+	struct ast_json *blob);
 
 /*!
  * \since 12

Modified: team/group/bridge_construction/main/manager_bridging.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bridge_construction/main/manager_bridging.c?view=diff&rev=388669&r1=388668&r2=388669
==============================================================================
--- team/group/bridge_construction/main/manager_bridging.c (original)
+++ team/group/bridge_construction/main/manager_bridging.c Tue May 14 07:54:02 2013
@@ -245,28 +245,36 @@
 		ast_str_buffer(from_text));
 }
 
-static void bridge_blob_cb(void *data, struct stasis_subscription *sub,
+static void channel_enter_cb(void *data, struct stasis_subscription *sub,
 				    struct stasis_topic *topic,
 				    struct stasis_message *message)
 {
 	struct ast_bridge_blob *blob = stasis_message_data(message);
-	const char *type = ast_bridge_blob_json_type(blob);
 	RAII_VAR(struct ast_str *, bridge_text, NULL, ast_free);
 	RAII_VAR(struct ast_str *, channel_text, NULL, ast_free);
-	char *event;
-
-	if (!strcmp("leave", type)) {
-		event = "BridgeLeave";
-	} else if (!strcmp("enter", type)) {
-		event = "BridgeEnter";
-	} else {
-		return;
-	}
 
 	bridge_text = ast_manager_build_bridge_state_string(blob->bridge, "");
 	channel_text = ast_manager_build_channel_state_string(blob->channel);
 
-	manager_event(EVENT_FLAG_CALL, event,
+	manager_event(EVENT_FLAG_CALL, "BridgeEnter",
+		"%s"
+		"%s",
+		ast_str_buffer(bridge_text),
+		ast_str_buffer(channel_text));
+}
+
+static void channel_leave_cb(void *data, struct stasis_subscription *sub,
+				    struct stasis_topic *topic,
+				    struct stasis_message *message)
+{
+	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);
+
+	bridge_text = ast_manager_build_bridge_state_string(blob->bridge, "");
+	channel_text = ast_manager_build_channel_state_string(blob->channel);
+
+	manager_event(EVENT_FLAG_CALL, "BridgeLeave",
 		"%s"
 		"%s",
 		ast_str_buffer(bridge_text),
@@ -438,8 +446,13 @@
 					 NULL);
 
 	ret |= stasis_message_router_add(bridge_state_router,
-					 ast_bridge_blob_type(),
-					 bridge_blob_cb,
+					 ast_channel_entered_bridge_type(),
+					 channel_enter_cb,
+					 NULL);
+
+	ret |= stasis_message_router_add(bridge_state_router,
+					 ast_channel_left_bridge_type(),
+					 channel_leave_cb,
 					 NULL);
 
 	ret |= ast_manager_register_xml_core("BridgeList", 0, manager_bridges_list);

Modified: team/group/bridge_construction/main/stasis_bridging.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bridge_construction/main/stasis_bridging.c?view=diff&rev=388669&r1=388668&r2=388669
==============================================================================
--- team/group/bridge_construction/main/stasis_bridging.c (original)
+++ team/group/bridge_construction/main/stasis_bridging.c Tue May 14 07:54:02 2013
@@ -41,14 +41,14 @@
 
 #define SNAPSHOT_CHANNELS_BUCKETS 13
 
-/*! \brief Message type for bridge snapshot messages */
-static struct stasis_message_type *bridge_snapshot_type;
-
-/*! \brief Message type for bridge blob messages */
-static struct stasis_message_type *bridge_blob_type;
-
-/*! \brief Message type for bridge merge messages */
-static struct stasis_message_type *bridge_merge_message_type;
+/*!
+ * @{ \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_channel_entered_bridge_type);
+STASIS_MESSAGE_TYPE_DEFN(ast_channel_left_bridge_type);
+/*! @} */
 
 /*! \brief Aggregate topic for bridge messages */
 static struct stasis_topic *bridge_topic_all;
@@ -101,11 +101,6 @@
 	return snapshot;
 }
 
-struct stasis_message_type *ast_bridge_snapshot_type(void)
-{
-	return bridge_snapshot_type;
-}
-
 struct stasis_topic *ast_bridge_topic(struct ast_bridge *bridge)
 {
 	struct stasis_topic *bridge_topic = stasis_topic_pool_get_topic(bridge_topic_pool, bridge->uniqueid);
@@ -157,11 +152,6 @@
 	}
 
 	stasis_publish(stasis_topic_pool_get_topic(bridge_topic_pool, obj->bridge->uniqueid), msg);
-}
-
-struct stasis_message_type *ast_bridge_merge_message_type(void)
-{
-	return bridge_merge_message_type;
 }
 
 /*! \brief Destructor for bridge merge messages */
@@ -218,11 +208,6 @@
 	}
 
 	stasis_publish(ast_bridge_topic_all(), msg);
-}
-
-struct stasis_message_type *ast_bridge_blob_type(void)
-{
-	return bridge_blob_type;
 }
 
 static void bridge_blob_dtor(void *obj)
@@ -236,21 +221,14 @@
 	event->blob = NULL;
 }
 
-struct stasis_message *ast_bridge_blob_create(struct ast_bridge *bridge,
-					struct ast_channel *chan,
-					struct ast_json *blob)
+struct stasis_message *ast_bridge_blob_create(
+	struct stasis_message_type *message_type,
+	struct ast_bridge *bridge,
+	struct ast_channel *chan,
+	struct ast_json *blob)
 {
 	RAII_VAR(struct ast_bridge_blob *, obj, NULL, ao2_cleanup);
 	RAII_VAR(struct stasis_message *, msg, NULL, ao2_cleanup);
-	struct ast_json *type;
-
-	ast_assert(blob != NULL);
-
-	type = ast_json_object_get(blob, "type");
-	if (type == NULL) {
-		ast_log(LOG_ERROR, "Invalid ast_bridge_blob; missing type field\n");
-		return NULL;
-	}
 
 	obj = ao2_alloc(sizeof(*obj), bridge_blob_dtor);
 	if (!obj) {
@@ -271,9 +249,11 @@
 		}
 	}
 
-	obj->blob = ast_json_ref(blob);
-
-	msg = stasis_message_create(ast_bridge_blob_type(), obj);
+	if (blob) {
+		obj->blob = ast_json_ref(blob);
+	}
+
+	msg = stasis_message_create(message_type, obj);
 	if (!msg) {
 		return NULL;
 	}
@@ -294,12 +274,8 @@
 void ast_bridge_publish_enter(struct ast_bridge *bridge, struct ast_channel *chan)
 {
 	RAII_VAR(struct stasis_message *, msg, NULL, ao2_cleanup);
-	RAII_VAR(struct ast_json *, enter_json, NULL, ast_json_unref);
-
-	enter_json = ast_json_pack("{s: s}",
-			"type", "enter");
-
-	msg = ast_bridge_blob_create(bridge, chan, enter_json);
+
+	msg = ast_bridge_blob_create(ast_channel_entered_bridge_type(), bridge, chan, NULL);
 	if (!msg) {
 		return;
 	}
@@ -312,12 +288,8 @@
 void ast_bridge_publish_leave(struct ast_bridge *bridge, struct ast_channel *chan)
 {
 	RAII_VAR(struct stasis_message *, msg, NULL, ao2_cleanup);
-	RAII_VAR(struct ast_json *, leave_json, NULL, ast_json_unref);
-
-	leave_json = ast_json_pack("{s: s}",
-			"type", "leave");
-
-	msg = ast_bridge_blob_create(bridge, chan, leave_json);
+
+	msg = ast_bridge_blob_create(ast_channel_left_bridge_type(), bridge, chan, NULL);
 	if (!msg) {
 		return;
 	}
@@ -349,12 +321,10 @@
 
 void ast_stasis_bridging_shutdown(void)
 {
-	ao2_cleanup(bridge_snapshot_type);
-	bridge_snapshot_type = NULL;
-	ao2_cleanup(bridge_blob_type);
-	bridge_blob_type = NULL;
-	ao2_cleanup(bridge_merge_message_type);
-	bridge_merge_message_type = NULL;
+	STASIS_MESSAGE_TYPE_CLEANUP(ast_bridge_snapshot_type);
+	STASIS_MESSAGE_TYPE_CLEANUP(ast_bridge_merge_message_type);
+	STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_entered_bridge_type);
+	STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_left_bridge_type);
 	ao2_cleanup(bridge_topic_all);
 	bridge_topic_all = NULL;
 	bridge_topic_all_cached = stasis_caching_unsubscribe(bridge_topic_all_cached);
@@ -375,16 +345,14 @@
 
 int ast_stasis_bridging_init(void)
 {
-	bridge_snapshot_type = stasis_message_type_create("ast_bridge_snapshot");
-	bridge_blob_type = stasis_message_type_create("ast_bridge_blob");
-	bridge_merge_message_type = stasis_message_type_create("ast_bridge_merge_message");
+	STASIS_MESSAGE_TYPE_INIT(ast_bridge_snapshot_type);
+	STASIS_MESSAGE_TYPE_INIT(ast_bridge_merge_message_type);
+	STASIS_MESSAGE_TYPE_INIT(ast_channel_entered_bridge_type);
+	STASIS_MESSAGE_TYPE_INIT(ast_channel_left_bridge_type);
 	bridge_topic_all = stasis_topic_create("ast_bridge_topic_all");
 	bridge_topic_all_cached = stasis_caching_topic_create(bridge_topic_all, bridge_snapshot_get_id);
 	bridge_topic_pool = stasis_topic_pool_create(bridge_topic_all);
-	return !bridge_snapshot_type
-		|| !bridge_blob_type
-		|| !bridge_merge_message_type
-		|| !bridge_topic_all
+	return !bridge_topic_all
 		|| !bridge_topic_all_cached
 		|| !bridge_topic_pool ? -1 : 0;
 }




More information about the svn-commits mailing list