diff --git a/main/manager_endpoints.c b/main/manager_endpoints.c index 1a36424af2d0d375c811a0ae546b764daa152ecd..f0ed28a2ceda36eebb286d4fb27a45058db53f6e 100644 --- a/main/manager_endpoints.c +++ b/main/manager_endpoints.c @@ -39,25 +39,22 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") static struct stasis_message_router *endpoint_router; -/*! \brief The \ref stasis subscription returned by the forwarding of the endpoint topic - * to the manager topic - */ -static struct stasis_subscription *topic_forwarder; - static void manager_endpoints_shutdown(void) { stasis_message_router_unsubscribe_and_join(endpoint_router); endpoint_router = NULL; +} - stasis_unsubscribe(topic_forwarder); - topic_forwarder = NULL; +static void endpoint_state_cb(void *data, struct stasis_subscription *sub, + struct stasis_topic *topic, + struct stasis_message *message) +{ + stasis_forward_message(ast_manager_get_topic(), stasis_caching_get_topic(ast_endpoint_topic_all_cached()), message); } int manager_endpoints_init(void) { - struct stasis_topic *manager_topic; struct stasis_topic *endpoint_topic; - struct stasis_message_router *message_router; int ret = 0; if (endpoint_router) { @@ -67,30 +64,19 @@ int manager_endpoints_init(void) ast_register_atexit(manager_endpoints_shutdown); - manager_topic = ast_manager_get_topic(); - if (!manager_topic) { - return -1; - } - message_router = ast_manager_get_message_router(); - if (!message_router) { - return -1; - } endpoint_topic = stasis_caching_get_topic(ast_endpoint_topic_all_cached()); if (!endpoint_topic) { return -1; } - topic_forwarder = stasis_forward_all(endpoint_topic, manager_topic); - if (!topic_forwarder) { - return -1; - } - endpoint_router = stasis_message_router_create(endpoint_topic); if (!endpoint_router) { return -1; } + ret |= stasis_message_router_add(endpoint_router, ast_endpoint_state_type(), endpoint_state_cb, NULL); + /* If somehow we failed to add any routes, just shut down the whole * thing and fail it. */