[asterisk-commits] file: branch file/stasis_tweaking r390504 - in /team/file/stasis_tweaking: in...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Jun 5 11:25:39 CDT 2013


Author: file
Date: Wed Jun  5 11:25:37 2013
New Revision: 390504

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=390504
Log:
Make adding a channel to an endpoint an immediate operation.

Modified:
    team/file/stasis_tweaking/include/asterisk/channel.h
    team/file/stasis_tweaking/main/channel_internal_api.c
    team/file/stasis_tweaking/main/endpoints.c

Modified: team/file/stasis_tweaking/include/asterisk/channel.h
URL: http://svnview.digium.com/svn/asterisk/team/file/stasis_tweaking/include/asterisk/channel.h?view=diff&rev=390504&r1=390503&r2=390504
==============================================================================
--- team/file/stasis_tweaking/include/asterisk/channel.h (original)
+++ team/file/stasis_tweaking/include/asterisk/channel.h Wed Jun  5 11:25:37 2013
@@ -152,6 +152,7 @@
 #include "asterisk/framehook.h"
 #include "asterisk/stasis.h"
 #include "asterisk/json.h"
+#include "asterisk/endpoints.h"
 
 #define DATASTORE_INHERIT_FOREVER	INT_MAX
 
@@ -4262,4 +4263,16 @@
  */
 int ast_channel_move(struct ast_channel *dest, struct ast_channel *source);
 
+/*!
+ * \since 12
+ * \brief Forward channel stasis messages to the given endpoint
+ *
+ * \param chan The channel to forward from
+ * \param endpoint The endpoint to forward to
+ *
+ * \retval 0 Success
+ * \retval non-zero Failure
+ */
+int ast_channel_forward_endpoint(struct ast_channel *chan, struct ast_endpoint *endpoint);
+
 #endif /* _ASTERISK_CHANNEL_H */

Modified: team/file/stasis_tweaking/main/channel_internal_api.c
URL: http://svnview.digium.com/svn/asterisk/team/file/stasis_tweaking/main/channel_internal_api.c?view=diff&rev=390504&r1=390503&r2=390504
==============================================================================
--- team/file/stasis_tweaking/main/channel_internal_api.c (original)
+++ team/file/stasis_tweaking/main/channel_internal_api.c Wed Jun  5 11:25:37 2013
@@ -1406,8 +1406,7 @@
 	return chan ? chan->topic : ast_channel_topic_all();
 }
 
-int ast_endpoint_add_channel(struct ast_endpoint *endpoint,
-	struct ast_channel *chan)
+int ast_channel_forward_endpoint(struct ast_channel *chan, struct ast_endpoint *endpoint)
 {
 	ast_assert(chan != NULL);
 	ast_assert(endpoint != NULL);
@@ -1418,8 +1417,6 @@
 	if (chan->endpoint_forward == NULL) {
 		return -1;
 	}
-
-	ast_publish_channel_state(chan);
 
 	return 0;
 }

Modified: team/file/stasis_tweaking/main/endpoints.c
URL: http://svnview.digium.com/svn/asterisk/team/file/stasis_tweaking/main/endpoints.c?view=diff&rev=390504&r1=390503&r2=390504
==============================================================================
--- team/file/stasis_tweaking/main/endpoints.c (original)
+++ team/file/stasis_tweaking/main/endpoints.c Wed Jun  5 11:25:37 2013
@@ -119,30 +119,23 @@
 	ast_string_field_free_memory(endpoint);
 }
 
-static void endpoint_channel_snapshot(void *data,
-	struct stasis_subscription *sub, struct stasis_topic *topic,
-	struct stasis_message *message)
-{
-	struct ast_endpoint *endpoint = data;
-	struct ast_channel_snapshot *snapshot = stasis_message_data(message);
-	RAII_VAR(char *, existing_id, NULL, ao2_cleanup);
-	int publish = 0;
-
-	ast_assert(endpoint != NULL);
-	ast_assert(snapshot != NULL);
+
+int ast_endpoint_add_channel(struct ast_endpoint *endpoint,
+	struct ast_channel *chan)
+{
+	ast_assert(chan != NULL);
+	ast_assert(endpoint != NULL);
+
+	ast_channel_forward_endpoint(chan, endpoint);
 
 	ao2_lock(endpoint);
-	existing_id = ao2_find(endpoint->channel_ids, snapshot->uniqueid,
-		OBJ_POINTER);
-	if (!existing_id) {
-		ast_str_container_add(endpoint->channel_ids,
-			snapshot->uniqueid);
-		publish = 1;
-	}
+	ast_str_container_add(endpoint->channel_ids, ast_channel_uniqueid(chan));
 	ao2_unlock(endpoint);
-	if (publish) {
-		endpoint_publish_snapshot(endpoint);
-	}
+
+	ast_publish_channel_state(chan);
+	endpoint_publish_snapshot(endpoint);
+
+	return 0;
 }
 
 static void endpoint_cache_clear(void *data,
@@ -227,9 +220,6 @@
 		return NULL;
 	}
 	r |= stasis_message_router_add(endpoint->router,
-		ast_channel_snapshot_type(), endpoint_channel_snapshot,
-		endpoint);
-	r |= stasis_message_router_add(endpoint->router,
 		stasis_cache_clear_type(), endpoint_cache_clear,
 		endpoint);
 	r |= stasis_message_router_set_default(endpoint->router,




More information about the asterisk-commits mailing list