/*! Forward a bridge's topics to an app */ static struct app_forwards *forwards_create_bridge(struct stasis_app *app, struct ast_bridge *bridge) { RAII_VAR(struct app_forwards *, forwards, NULL, ao2_cleanup); if (!app || !bridge) { return NULL; } forwards = forwards_create(app, bridge->uniqueid); if (!forwards) { return NULL; } forwards->forward_type = FORWARD_BRIDGE; forwards->topic_forward = stasis_forward_all(ast_bridge_topic(bridge), app->topic); if (!forwards->topic_forward) { return NULL; } forwards->topic_cached_forward = stasis_forward_all( ast_bridge_topic_cached(bridge), app->topic); if (!forwards->topic_cached_forward) { /* Half-subscribed is a bad thing */ stasis_forward_cancel(forwards->topic_forward); forwards->topic_forward = NULL; return NULL; } ao2_ref(forwards, +1); return forwards; }
/*! Forward a bridge's topics to an app */ static struct app_forwards *forwards_create_bridge(struct stasis_app *app, struct ast_bridge *bridge) { struct app_forwards *forwards; if (!app) { return NULL; } forwards = forwards_create(app, bridge ? bridge->uniqueid : BRIDGE_ALL); if (!forwards) { return NULL; } forwards->forward_type = FORWARD_BRIDGE; if (bridge) { forwards->topic_forward = stasis_forward_all(ast_bridge_topic(bridge), app->topic); } forwards->topic_cached_forward = stasis_forward_all( bridge ? ast_bridge_topic_cached(bridge) : ast_bridge_topic_all_cached(), app->topic); if ((!forwards->topic_forward && bridge) || !forwards->topic_cached_forward) { /* Half-subscribed is a bad thing */ forwards_unsubscribe(forwards); ao2_ref(forwards, -1); return NULL; } return forwards; }