static int simple_bridge_join(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel) { struct ast_channel *c0 = AST_LIST_FIRST(&bridge->channels)->chan; struct ast_channel *c1 = AST_LIST_LAST(&bridge->channels)->chan; /* * If this is the first channel we can't make it compatible... * unless we make it compatible with itself. O.o */ if (c0 == c1) { return 0; } return ast_channel_make_compatible(c0, c1); }
/*! \brief Join function which actually adds the channel into the array to be monitored */ static int multiplexed_bridge_join(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel) { struct ast_channel *c0 = AST_LIST_FIRST(&bridge->channels)->chan, *c1 = AST_LIST_LAST(&bridge->channels)->chan; struct multiplexed_thread *multiplexed_thread = bridge->bridge_pvt; ast_debug(1, "Adding channel '%s' to multiplexed thread '%p' for monitoring\n", bridge_channel->chan->name, multiplexed_thread); multiplexed_add_or_remove(multiplexed_thread, bridge_channel->chan, 1); /* If the second channel has not yet joined do not make things compatible */ if (c0 == c1) { return 0; } if (((c0->writeformat == c1->readformat) && (c0->readformat == c1->writeformat) && (c0->nativeformats == c1->nativeformats))) { return 0; } return ast_channel_make_compatible(c0, c1); }