summaryrefslogtreecommitdiff
path: root/main/endpoints.c
diff options
context:
space:
mode:
authorGeorge Joseph <george.joseph@fairview5.com>2015-05-29 14:52:23 -0500
committerGeorge Joseph <george.joseph@fairview5.com>2015-05-29 14:52:23 -0500
commit1558a891293dd96ba71a3cedf0caa1968067ba5e (patch)
tree9eb0814bbf51f1fbf54d83b20efada205292211f /main/endpoints.c
parent35c699086ae2fd81b2473307ccb2ae79ad32375a (diff)
Revert "endpoint/stasis: Eliminate duplicate events on endpoint status change"
This reverts commit 35c699086ae2fd81b2473307ccb2ae79ad32375a. Change-Id: Ia98c2b4820cf579a5b9bb75e9e05d7a233205fb7
Diffstat (limited to 'main/endpoints.c')
-rw-r--r--main/endpoints.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/main/endpoints.c b/main/endpoints.c
index a64001403..ce0ab0292 100644
--- a/main/endpoints.c
+++ b/main/endpoints.c
@@ -74,6 +74,8 @@ struct ast_endpoint {
struct stasis_message_router *router;
/*! ast_str_container of channels associated with this endpoint */
struct ao2_container *channel_ids;
+ /*! Forwarding subscription from an endpoint to its tech endpoint */
+ struct stasis_forward *tech_forward;
};
static int endpoint_hash(const void *obj, int flags)
@@ -301,14 +303,13 @@ static struct ast_endpoint *endpoint_internal_create(const char *tech, const cha
return NULL;
}
- if (!ast_strlen_zero(resource)) {
-
- endpoint->topics = stasis_cp_single_create_only(ast_endpoint_cache_all(),
- endpoint->id);
- if (!endpoint->topics) {
- return NULL;
- }
+ endpoint->topics = stasis_cp_single_create(ast_endpoint_cache_all(),
+ endpoint->id);
+ if (!endpoint->topics) {
+ return NULL;
+ }
+ if (!ast_strlen_zero(resource)) {
endpoint->router = stasis_message_router_create_pool(ast_endpoint_topic(endpoint));
if (!endpoint->router) {
return NULL;
@@ -322,19 +323,11 @@ static struct ast_endpoint *endpoint_internal_create(const char *tech, const cha
return NULL;
}
- if (stasis_cp_single_forward(endpoint->topics, tech_endpoint->topics)) {
- return NULL;
- }
-
+ endpoint->tech_forward = stasis_forward_all(stasis_cp_single_topic(endpoint->topics),
+ stasis_cp_single_topic(tech_endpoint->topics));
endpoint_publish_snapshot(endpoint);
ao2_link(endpoints, endpoint);
} else {
- endpoint->topics = stasis_cp_single_create(ast_endpoint_cache_all(),
- endpoint->id);
- if (!endpoint->topics) {
- return NULL;
- }
-
ao2_link(tech_endpoints, endpoint);
}
@@ -382,6 +375,7 @@ void ast_endpoint_shutdown(struct ast_endpoint *endpoint)
}
ao2_unlink(endpoints, endpoint);
+ endpoint->tech_forward = stasis_forward_cancel(endpoint->tech_forward);
clear_msg = create_endpoint_snapshot_message(endpoint);
if (clear_msg) {