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

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Jul 10 15:20:24 CDT 2013


Author: dlee
Date: Wed Jul 10 15:20:22 2013
New Revision: 394012

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=394012
Log:
Channel and endpoint topics

Modified:
    team/dlee/stasis-cache-split/include/asterisk/channel.h
    team/dlee/stasis-cache-split/include/asterisk/channel_internal.h
    team/dlee/stasis-cache-split/include/asterisk/stasis_channels.h
    team/dlee/stasis-cache-split/include/asterisk/stasis_endpoints.h
    team/dlee/stasis-cache-split/main/channel_internal_api.c
    team/dlee/stasis-cache-split/main/endpoints.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/channel.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/include/asterisk/channel.h?view=diff&rev=394012&r1=394011&r2=394012
==============================================================================
--- team/dlee/stasis-cache-split/include/asterisk/channel.h (original)
+++ team/dlee/stasis-cache-split/include/asterisk/channel.h Wed Jul 10 15:20:22 2013
@@ -4221,6 +4221,21 @@
 struct stasis_topic *ast_channel_topic(struct ast_channel *chan);
 
 /*!
+ * \since 12
+ * \brief A topic which publishes the events for a particular channel.
+ *
+ * \ref ast_channel_snapshot messages are replaced with \ref stasis_cache_update
+ *
+ * If the given \a chan is \c NULL, ast_channel_topic_all_cached() is returned.
+ *
+ * \param chan Channel, or \c NULL.
+ *
+ * \retval Topic for channel's events.
+ * \retval ast_channel_topic_all() if \a chan is \c NULL.
+ */
+struct stasis_topic *ast_channel_topic_cached(struct ast_channel *chan);
+
+/*!
  * \brief Get the bridge associated with a channel
  * \since 12.0.0
  *

Modified: team/dlee/stasis-cache-split/include/asterisk/channel_internal.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/include/asterisk/channel_internal.h?view=diff&rev=394012&r1=394011&r2=394012
==============================================================================
--- team/dlee/stasis-cache-split/include/asterisk/channel_internal.h (original)
+++ team/dlee/stasis-cache-split/include/asterisk/channel_internal.h Wed Jul 10 15:20:22 2013
@@ -23,5 +23,5 @@
 void ast_channel_internal_finalize(struct ast_channel *chan);
 int ast_channel_internal_is_finalized(struct ast_channel *chan);
 void ast_channel_internal_cleanup(struct ast_channel *chan);
-void ast_channel_internal_setup_topics(struct ast_channel *chan);
+int ast_channel_internal_setup_topics(struct ast_channel *chan);
 

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=394012&r1=394011&r2=394012
==============================================================================
--- team/dlee/stasis-cache-split/include/asterisk/stasis_channels.h (original)
+++ team/dlee/stasis-cache-split/include/asterisk/stasis_channels.h Wed Jul 10 15:20:22 2013
@@ -105,6 +105,8 @@
  */
 struct ast_multi_channel_blob;
 
+struct stasis_cache_all *ast_channel_cache_all(void);
+
 /*!
  * \since 12
  * \brief A topic which publishes the events for all channels.

Modified: team/dlee/stasis-cache-split/include/asterisk/stasis_endpoints.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/include/asterisk/stasis_endpoints.h?view=diff&rev=394012&r1=394011&r2=394012
==============================================================================
--- team/dlee/stasis-cache-split/include/asterisk/stasis_endpoints.h (original)
+++ team/dlee/stasis-cache-split/include/asterisk/stasis_endpoints.h Wed Jul 10 15:20:22 2013
@@ -30,6 +30,7 @@
 #include "asterisk/endpoints.h"
 #include "asterisk/json.h"
 #include "asterisk/stasis.h"
+#include "asterisk/stasis_cache_pattern.h"
 #include "asterisk/stringfields.h"
 
 /*! \addtogroup StasisTopicsAndMessages
@@ -144,6 +145,12 @@
 struct stasis_topic *ast_endpoint_topic(struct ast_endpoint *endpoint);
 
 /*!
+ * \internal
+ * \since 12
+ */
+struct stasis_cache_all *ast_endpoint_cache_all(void);
+
+/*!
  * \brief Topic for all endpoint releated messages.
  * \since 12
  */

Modified: team/dlee/stasis-cache-split/main/channel_internal_api.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/main/channel_internal_api.c?view=diff&rev=394012&r1=394011&r2=394012
==============================================================================
--- team/dlee/stasis-cache-split/main/channel_internal_api.c (original)
+++ team/dlee/stasis-cache-split/main/channel_internal_api.c Wed Jul 10 15:20:22 2013
@@ -44,6 +44,7 @@
 #include "asterisk/data.h"
 #include "asterisk/endpoints.h"
 #include "asterisk/indications.h"
+#include "asterisk/stasis_cache_pattern.h"
 #include "asterisk/stasis_channels.h"
 #include "asterisk/stasis_endpoints.h"
 #include "asterisk/stringfields.h"
@@ -203,7 +204,7 @@
 	char dtmf_digit_to_emulate;			/*!< Digit being emulated */
 	char sending_dtmf_digit;			/*!< Digit this channel is currently sending out. (zero if not sending) */
 	struct timeval sending_dtmf_tv;		/*!< The time this channel started sending the current digit. (Invalid if sending_dtmf_digit is zero.) */
-	struct stasis_topic *topic;			/*!< Topic for all channel's events */
+	struct stasis_cache_one *topics;		/*!< Topic for all channel's events */
 	struct stasis_subscription *forwarder;		/*!< Subscription for event forwarding to all topic */
 	struct stasis_subscription *endpoint_forward;	/*!< Subscription for event forwarding to endpoint's topic */
 };
@@ -1425,8 +1426,8 @@
 	chan->forwarder = stasis_unsubscribe(chan->forwarder);
 	chan->endpoint_forward = stasis_unsubscribe(chan->endpoint_forward);
 
-	ao2_cleanup(chan->topic);
-	chan->topic = NULL;
+	ao2_cleanup(chan->topics);
+	chan->topics = NULL;
 }
 
 void ast_channel_internal_finalize(struct ast_channel *chan)
@@ -1441,16 +1442,31 @@
 
 struct stasis_topic *ast_channel_topic(struct ast_channel *chan)
 {
-	return chan ? chan->topic : ast_channel_topic_all();
-}
-
-int ast_channel_forward_endpoint(struct ast_channel *chan, struct ast_endpoint *endpoint)
+	if (!chan) {
+		return ast_channel_topic_all();
+	}
+
+	return stasis_cache_one_topic(chan->topics);
+}
+
+struct stasis_topic *ast_channel_topic_cached(struct ast_channel *chan)
+{
+	if (!chan) {
+		return ast_channel_topic_all_cached();
+	}
+
+	return stasis_cache_one_topic_cached(chan->topics);
+}
+
+int ast_channel_forward_endpoint(struct ast_channel *chan,
+	struct ast_endpoint *endpoint)
 {
 	ast_assert(chan != NULL);
 	ast_assert(endpoint != NULL);
 
 	chan->endpoint_forward =
-		stasis_forward_all(chan->topic, ast_endpoint_topic(endpoint));
+		stasis_forward_all(ast_channel_topic(chan),
+			ast_endpoint_topic(endpoint));
 
 	if (chan->endpoint_forward == NULL) {
 		return -1;
@@ -1459,19 +1475,21 @@
 	return 0;
 }
 
-void ast_channel_internal_setup_topics(struct ast_channel *chan)
+int ast_channel_internal_setup_topics(struct ast_channel *chan)
 {
 	const char *topic_name = chan->uniqueid;
-	ast_assert(chan->topic == NULL);
-	ast_assert(chan->forwarder == NULL);
+	ast_assert(chan->topics == NULL);
 
 	if (ast_strlen_zero(topic_name)) {
 		topic_name = "<dummy-channel>";
 	}
 
-	chan->topic = stasis_topic_create(topic_name);
-	chan->forwarder = stasis_forward_all(chan->topic, ast_channel_topic_all());
-
-	ast_assert(chan->topic != NULL);
-	ast_assert(chan->forwarder != NULL);
-}
+	chan->topics = stasis_cache_one_create(
+		ast_channel_cache_all(), topic_name);
+
+	if (!chan->topics) {
+		return -1;
+	}
+
+	return 0;
+}

Modified: team/dlee/stasis-cache-split/main/endpoints.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/main/endpoints.c?view=diff&rev=394012&r1=394011&r2=394012
==============================================================================
--- team/dlee/stasis-cache-split/main/endpoints.c (original)
+++ team/dlee/stasis-cache-split/main/endpoints.c Wed Jul 10 15:20:22 2013
@@ -58,11 +58,7 @@
 	 */
 	int max_channels;
 	/*! Topic for this endpoint's messages */
-	struct stasis_topic *topic;
-	/*!
-	 * Forwarding subscription sending messages to ast_endpoint_topic_all()
-	 */
-	struct stasis_subscription *forward;
+	struct stasis_cache_one *topics;
 	/*! Router for handling this endpoint's messages */
 	struct stasis_message_router *router;
 	/*! ast_str_container of channels associated with this endpoint */
@@ -88,7 +84,7 @@
 	RAII_VAR(struct stasis_message *, message, NULL, ao2_cleanup);
 
 	ast_assert(endpoint != NULL);
-	ast_assert(endpoint->topic != NULL);
+	ast_assert(endpoint->topics != NULL);
 
 	snapshot = ast_endpoint_snapshot_create(endpoint);
 	if (!snapshot) {
@@ -98,7 +94,7 @@
 	if (!message) {
 		return;
 	}
-	stasis_publish(endpoint->topic, message);
+	stasis_publish(ast_endpoint_topic(endpoint), message);
 }
 
 static void endpoint_dtor(void *obj)
@@ -110,11 +106,8 @@
 	ao2_cleanup(endpoint->router);
 	endpoint->router = NULL;
 
-	stasis_unsubscribe(endpoint->forward);
-	endpoint->forward = NULL;
-
-	ao2_cleanup(endpoint->topic);
-	endpoint->topic = NULL;
+	ao2_cleanup(endpoint->topics);
+	endpoint->topics = NULL;
 
 	ao2_cleanup(endpoint->channel_ids);
 	endpoint->channel_ids = NULL;
@@ -214,18 +207,13 @@
 		return NULL;
 	}
 
-	endpoint->topic = stasis_topic_create(endpoint->id);
-	if (!endpoint->topic) {
-		return NULL;
-	}
-
-	endpoint->forward =
-		stasis_forward_all(endpoint->topic, ast_endpoint_topic_all());
-	if (!endpoint->forward) {
-		return NULL;
-	}
-
-	endpoint->router = stasis_message_router_create(endpoint->topic);
+	endpoint->topics = stasis_cache_one_create(ast_endpoint_cache_all(),
+		endpoint->id);
+	if (!endpoint->topics) {
+		return NULL;
+	}
+
+	endpoint->router = stasis_message_router_create(ast_endpoint_topic(endpoint));
 	if (!endpoint->router) {
 		return NULL;
 	}
@@ -271,7 +259,7 @@
 		RAII_VAR(struct stasis_message *, message, NULL, ao2_cleanup);
 		message = stasis_cache_clear_create(clear_msg);
 		if (message) {
-			stasis_publish(endpoint->topic, message);
+			stasis_publish(ast_endpoint_topic(endpoint), message);
 		}
 	}
 
@@ -283,11 +271,6 @@
 const char *ast_endpoint_get_resource(const struct ast_endpoint *endpoint)
 {
 	return endpoint->resource;
-}
-
-struct stasis_topic *ast_endpoint_topic(struct ast_endpoint *endpoint)
-{
-	return endpoint ? endpoint->topic : ast_endpoint_topic_all();
 }
 
 void ast_endpoint_set_state(struct ast_endpoint *endpoint,

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=394012&r1=394011&r2=394012
==============================================================================
--- team/dlee/stasis-cache-split/main/stasis_channels.c (original)
+++ team/dlee/stasis-cache-split/main/stasis_channels.c Wed Jul 10 15:20:22 2013
@@ -61,6 +61,11 @@
 
 static struct stasis_cache_all *channel_cache_all;
 static struct stasis_cache *channel_cache_by_name;
+
+struct stasis_cache_all *ast_channel_cache_all(void)
+{
+	return channel_cache_all;
+}
 
 struct stasis_cache *ast_channel_cache(void)
 {

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=394012&r1=394011&r2=394012
==============================================================================
--- team/dlee/stasis-cache-split/main/stasis_endpoints.c (original)
+++ team/dlee/stasis-cache-split/main/stasis_endpoints.c Wed Jul 10 15:20:22 2013
@@ -75,6 +75,11 @@
 
 static struct stasis_cache_all *endpoint_cache_all;
 
+struct stasis_cache_all *ast_endpoint_cache_all(void)
+{
+	return endpoint_cache_all;
+}
+
 struct stasis_cache *ast_endpoint_cache(void)
 {
 	return stasis_cache_all_cache(endpoint_cache_all);




More information about the asterisk-commits mailing list