[asterisk-commits] dlee: branch dlee/stasis-cache-split r394000 - in /team/dlee/stasis-cache-spl...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Jul 10 14:08:40 CDT 2013


Author: dlee
Date: Wed Jul 10 14:08:38 2013
New Revision: 394000

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=394000
Log:
all and all_cached topics

Modified:
    team/dlee/stasis-cache-split/include/asterisk/bridging.h
    team/dlee/stasis-cache-split/include/asterisk/stasis_bridging.h
    team/dlee/stasis-cache-split/include/asterisk/stasis_cache_pattern.h
    team/dlee/stasis-cache-split/include/asterisk/stasis_channels.h
    team/dlee/stasis-cache-split/main/bridging.c
    team/dlee/stasis-cache-split/main/stasis_bridging.c
    team/dlee/stasis-cache-split/main/stasis_channels.c
    team/dlee/stasis-cache-split/main/stasis_endpoints.c

Modified: team/dlee/stasis-cache-split/include/asterisk/bridging.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/include/asterisk/bridging.h?view=diff&rev=394000&r1=393999&r2=394000
==============================================================================
--- team/dlee/stasis-cache-split/include/asterisk/bridging.h (original)
+++ team/dlee/stasis-cache-split/include/asterisk/bridging.h Wed Jul 10 14:08:38 2013
@@ -402,6 +402,8 @@
 	struct ast_bridge_technology *technology;
 	/*! Private information unique to the bridge technology */
 	void *tech_pvt;
+	/*! Per-bridge topics */
+	struct stasis_cache_one *topics;
 	/*! Call ID associated with the bridge */
 	struct ast_callid *callid;
 	/*! Linked list of channels participating in the bridge */

Modified: team/dlee/stasis-cache-split/include/asterisk/stasis_bridging.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/include/asterisk/stasis_bridging.h?view=diff&rev=394000&r1=393999&r2=394000
==============================================================================
--- team/dlee/stasis-cache-split/include/asterisk/stasis_bridging.h (original)
+++ team/dlee/stasis-cache-split/include/asterisk/stasis_bridging.h Wed Jul 10 14:08:38 2013
@@ -392,6 +392,15 @@
 	const char *bridge_id);
 
 /*!
+ * \internal
+ * \brief Initialize the topics for a single bridge.
+ * \return 0 on success.
+ * \return Non-zero on error.
+ */
+int bridge_topics_init(struct ast_bridge *bridge);
+
+/*!
+ * \internal
  * \brief Initialize the stasis bridging topic and message types
  * \retval 0 on success
  * \retval -1 on failure

Modified: team/dlee/stasis-cache-split/include/asterisk/stasis_cache_pattern.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/include/asterisk/stasis_cache_pattern.h?view=diff&rev=394000&r1=393999&r2=394000
==============================================================================
--- team/dlee/stasis-cache-split/include/asterisk/stasis_cache_pattern.h (original)
+++ team/dlee/stasis-cache-split/include/asterisk/stasis_cache_pattern.h Wed Jul 10 14:08:38 2013
@@ -83,9 +83,11 @@
  * \brief Create the 'one' side of the cache pattern.
  *
  * \param all All side which aggregates this topic.
+ * \param name Base name for the topics.
  * \return One side instance
  */
-struct stasis_cache_one *stasis_cache_one_create(struct stasis_cache_all *all);
+struct stasis_cache_one *stasis_cache_one_create(struct stasis_cache_all *all,
+	const char *name);
 
 /*!
  * \brief Call to cancel forwarding of toward the cache aggregator.

Modified: team/dlee/stasis-cache-split/include/asterisk/stasis_channels.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/include/asterisk/stasis_channels.h?view=diff&rev=394000&r1=393999&r2=394000
==============================================================================
--- team/dlee/stasis-cache-split/include/asterisk/stasis_channels.h (original)
+++ team/dlee/stasis-cache-split/include/asterisk/stasis_channels.h Wed Jul 10 14:08:38 2013
@@ -53,7 +53,7 @@
 		AST_STRING_FIELD(caller_name);      /*!< Caller ID Name */
 		AST_STRING_FIELD(caller_number);    /*!< Caller ID Number */
 		AST_STRING_FIELD(caller_dnid);      /*!< Dialed ID Number */
-		AST_STRING_FIELD(caller_ani);       /*< Caller ID ANI Number */
+		AST_STRING_FIELD(caller_ani);       /*!< Caller ID ANI Number */
 		AST_STRING_FIELD(caller_rdnis);     /*!< Caller ID RDNIS Number */
 		AST_STRING_FIELD(caller_subaddr);   /*!< Caller subaddress */
 		AST_STRING_FIELD(dialed_subaddr);   /*!< Dialed subaddress */
@@ -541,7 +541,9 @@
 
 /*!
  * \brief Initialize the stasis channel topic and message types
- */
-void ast_stasis_channels_init(void);
+ * \return 0 on success
+ * \return Non-zero on error
+ */
+int ast_stasis_channels_init(void);
 
 #endif /* STASIS_CHANNELS_H_ */

Modified: team/dlee/stasis-cache-split/main/bridging.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/main/bridging.c?view=diff&rev=394000&r1=393999&r2=394000
==============================================================================
--- team/dlee/stasis-cache-split/main/bridging.c (original)
+++ team/dlee/stasis-cache-split/main/bridging.c Wed Jul 10 14:08:38 2013
@@ -1575,6 +1575,13 @@
 	ast_uuid_generate_str(self->uniqueid, sizeof(self->uniqueid));
 	ast_set_flag(&self->feature_flags, flags);
 	self->allowed_capabilities = capabilities;
+
+	if (bridge_topics_init(self) != 0) {
+		ast_log(LOG_WARNING, "Bridge %s: Could not initialize topics\n",
+			self->uniqueid);
+		ao2_ref(self, -1);
+		return NULL;
+	}
 
 	/* Use our helper function to find the "best" bridge technology. */
 	self->technology = find_best_technology(capabilities, self);

Modified: team/dlee/stasis-cache-split/main/stasis_bridging.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/main/stasis_bridging.c?view=diff&rev=394000&r1=393999&r2=394000
==============================================================================
--- team/dlee/stasis-cache-split/main/stasis_bridging.c (original)
+++ team/dlee/stasis-cache-split/main/stasis_bridging.c Wed Jul 10 14:08:38 2013
@@ -33,6 +33,7 @@
 
 #include "asterisk/astobj2.h"
 #include "asterisk/stasis.h"
+#include "asterisk/stasis_cache_pattern.h"
 #include "asterisk/channel.h"
 #include "asterisk/stasis_bridging.h"
 #include "asterisk/stasis_channels.h"
@@ -356,6 +357,8 @@
 static struct ast_manager_event_blob *attended_transfer_to_ami(struct stasis_message *message);
 static struct ast_manager_event_blob *blind_transfer_to_ami(struct stasis_message *message);
 
+static struct stasis_cache_all *bridge_cache_all;
+
 /*!
  * @{ \brief Define bridge message types.
  */
@@ -366,6 +369,35 @@
 STASIS_MESSAGE_TYPE_DEFN(ast_blind_transfer_type, .to_ami = blind_transfer_to_ami);
 STASIS_MESSAGE_TYPE_DEFN(ast_attended_transfer_type, .to_ami = attended_transfer_to_ami);
 /*! @} */
+
+struct stasis_cache *ast_bridge_cache(void)
+{
+	return stasis_cache_all_cache(bridge_cache_all);
+}
+
+struct stasis_topic *ast_bridge_topic_all(void)
+{
+	return stasis_cache_all_topic(bridge_cache_all);
+}
+
+struct stasis_topic *ast_bridge_topic_all_cached(void)
+{
+	return stasis_cache_all_topic_cached(bridge_cache_all);
+}
+
+int bridge_topics_init(struct ast_bridge *bridge)
+{
+	if (ast_strlen_zero(bridge->uniqueid)) {
+		ast_log(LOG_ERROR, "Bridge id initialization required\n");
+		return -1;
+	}
+	bridge->topics = stasis_cache_one_create(bridge_cache_all,
+		bridge->uniqueid);
+	if (!bridge->topics) {
+		return -1;
+	}
+	return 0;
+}
 
 /*! \brief Destructor for bridge snapshots */
 static void bridge_snapshot_dtor(void *obj)
@@ -988,6 +1020,17 @@
 	return snapshot;
 }
 
+/*! \brief snapshot ID getter for caching topic */
+static const char *bridge_snapshot_get_id(struct stasis_message *msg)
+{
+	struct ast_bridge_snapshot *snapshot;
+	if (stasis_message_type(msg) != ast_bridge_snapshot_type()) {
+		return NULL;
+	}
+	snapshot = stasis_message_data(msg);
+	return snapshot->uniqueid;
+}
+
 static void stasis_bridging_cleanup(void)
 {
 	STASIS_MESSAGE_TYPE_CLEANUP(ast_bridge_snapshot_type);
@@ -996,29 +1039,30 @@
 	STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_left_bridge_type);
 	STASIS_MESSAGE_TYPE_CLEANUP(ast_blind_transfer_type);
 	STASIS_MESSAGE_TYPE_CLEANUP(ast_attended_transfer_type);
-}
-
-/*! \brief snapshot ID getter for caching topic */
-__attribute__((unused)) static const char *bridge_snapshot_get_id(struct stasis_message *msg)
-{
-	struct ast_bridge_snapshot *snapshot;
-	if (stasis_message_type(msg) != ast_bridge_snapshot_type()) {
-		return NULL;
-	}
-	snapshot = stasis_message_data(msg);
-	return snapshot->uniqueid;
+
+	ao2_cleanup(bridge_cache_all);
+	bridge_cache_all = NULL;
 }
 
 int ast_stasis_bridging_init(void)
 {
+	int res = 0;
+
 	ast_register_cleanup(stasis_bridging_cleanup);
 
-	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);
-	STASIS_MESSAGE_TYPE_INIT(ast_blind_transfer_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_attended_transfer_type);
-
-	return 0;
-}
+	bridge_cache_all = stasis_cache_all_create("ast_bridge_topic_all",
+		bridge_snapshot_get_id);
+
+	if (!bridge_cache_all) {
+		return -1;
+	}
+
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_bridge_snapshot_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_bridge_merge_message_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_entered_bridge_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_left_bridge_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_blind_transfer_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_attended_transfer_type);
+
+	return res;
+}

Modified: team/dlee/stasis-cache-split/main/stasis_channels.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/main/stasis_channels.c?view=diff&rev=394000&r1=393999&r2=394000
==============================================================================
--- team/dlee/stasis-cache-split/main/stasis_channels.c (original)
+++ team/dlee/stasis-cache-split/main/stasis_channels.c Wed Jul 10 14:08:38 2013
@@ -59,7 +59,30 @@
 
 #define NUM_MULTI_CHANNEL_BLOB_BUCKETS 7
 
-__attribute__((unused)) static const char *channel_snapshot_get_id(struct stasis_message *message)
+static struct stasis_cache_all *channel_cache_all;
+static struct stasis_cache *channel_cache_by_name;
+
+struct stasis_cache *ast_channel_cache(void)
+{
+	return stasis_cache_all_cache(channel_cache_all);
+}
+
+struct stasis_topic *ast_channel_topic_all(void)
+{
+	return stasis_cache_all_topic(channel_cache_all);
+}
+
+struct stasis_topic *ast_channel_topic_all_cached(void)
+{
+	return stasis_cache_all_topic_cached(channel_cache_all);
+}
+
+struct stasis_cache *ast_channel_cache_by_name(void)
+{
+	return channel_cache_by_name;
+}
+
+static const char *channel_snapshot_get_id(struct stasis_message *message)
 {
 	struct ast_channel_snapshot *snapshot;
 	if (ast_channel_snapshot_type() != stasis_message_type(message)) {
@@ -69,7 +92,7 @@
 	return snapshot->uniqueid;
 }
 
-__attribute__((unused)) static const char *channel_snapshot_get_name(struct stasis_message *message)
+static const char *channel_snapshot_get_name(struct stasis_message *message)
 {
 	struct ast_channel_snapshot *snapshot;
 	if (ast_channel_snapshot_type() != stasis_message_type(message)) {
@@ -825,27 +848,47 @@
 	STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_moh_stop_type);
 	STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_monitor_start_type);
 	STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_monitor_stop_type);
-}
-
-void ast_stasis_channels_init(void)
-{
+
+	ao2_cleanup(channel_cache_by_name);
+	channel_cache_by_name = NULL;
+	ao2_cleanup(channel_cache_all);
+	channel_cache_all = NULL;
+}
+
+int ast_stasis_channels_init(void)
+{
+	int res = 0;
 	ast_register_cleanup(stasis_channels_cleanup);
 
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_snapshot_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_dial_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_varset_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_user_event_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_hangup_request_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_dtmf_begin_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_dtmf_end_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_hold_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_unhold_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_chanspy_start_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_chanspy_stop_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_fax_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_hangup_handler_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_moh_start_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_moh_stop_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_monitor_start_type);
-	STASIS_MESSAGE_TYPE_INIT(ast_channel_monitor_stop_type);
-}
+	channel_cache_all = stasis_cache_all_create("ast_channel_topic_all",
+		channel_snapshot_get_id);
+	if (!channel_cache_all) {
+		return -1;
+	}
+
+	channel_cache_by_name = stasis_cache_create_secondary(
+		ast_channel_cache(), channel_snapshot_get_name);
+	if (!channel_cache_by_name) {
+		return -1;
+	}
+
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_snapshot_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_dial_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_varset_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_user_event_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_hangup_request_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_dtmf_begin_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_dtmf_end_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_hold_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_unhold_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_chanspy_start_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_chanspy_stop_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_fax_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_hangup_handler_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_moh_start_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_moh_stop_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_monitor_start_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_monitor_stop_type);
+
+	return res;
+}

Modified: team/dlee/stasis-cache-split/main/stasis_endpoints.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/main/stasis_endpoints.c?view=diff&rev=394000&r1=393999&r2=394000
==============================================================================
--- team/dlee/stasis-cache-split/main/stasis_endpoints.c (original)
+++ team/dlee/stasis-cache-split/main/stasis_endpoints.c Wed Jul 10 14:08:38 2013
@@ -73,6 +73,23 @@
 	</managerEvent>
 ***/
 
+static struct stasis_cache_all *endpoint_cache_all;
+
+struct stasis_cache *ast_endpoint_cache(void)
+{
+	return stasis_cache_all_cache(endpoint_cache_all);
+}
+
+struct stasis_topic *ast_endpoint_topic_all(void)
+{
+	return stasis_cache_all_topic(endpoint_cache_all);
+}
+
+struct stasis_topic *ast_endpoint_topic_all_cached(void)
+{
+	return stasis_cache_all_topic_cached(endpoint_cache_all);
+}
+
 static struct ast_manager_event_blob *peerstatus_to_ami(struct stasis_message *msg);
 
 STASIS_MESSAGE_TYPE_DEFN(ast_endpoint_snapshot_type);
@@ -204,7 +221,7 @@
  * \return \c NULL if the message_type of the message isn't a handled snapshot.
  * \since 12
  */
-__attribute__((unused)) static const char *endpoint_snapshot_get_id(struct stasis_message *message)
+static const char *endpoint_snapshot_get_id(struct stasis_message *message)
 {
 	struct ast_endpoint_snapshot *snapshot;
 
@@ -259,19 +276,26 @@
 
 static void endpoints_stasis_shutdown(void)
 {
+	STASIS_MESSAGE_TYPE_CLEANUP(ast_endpoint_snapshot_type);
+	STASIS_MESSAGE_TYPE_CLEANUP(ast_endpoint_state_type);
+
+	ao2_cleanup(endpoint_cache_all);
+	endpoint_cache_all = NULL;
 }
 
 int ast_endpoint_stasis_init(void)
 {
+	int res = 0;
 	ast_register_atexit(endpoints_stasis_shutdown);
 
-	if (STASIS_MESSAGE_TYPE_INIT(ast_endpoint_snapshot_type) != 0) {
+	endpoint_cache_all = stasis_cache_all_create("endpoint_topic_all",
+		endpoint_snapshot_get_id);
+	if (!endpoint_cache_all) {
 		return -1;
 	}
 
-	if (STASIS_MESSAGE_TYPE_INIT(ast_endpoint_state_type) != 0) {
-		return -1;
-	}
-
-	return 0;
-}
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_endpoint_snapshot_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_endpoint_state_type);
+
+	return res;
+}




More information about the asterisk-commits mailing list