- /*
- * Bridge between port instances if:
- * - two or more relations
- * - one or all are not mISDN
- */
- message = message_create(j_serial, relation->epoint_id, JOIN_TO_EPOINT, MESSAGE_BRIDGE);
- message->param.bridge_id = (relations>=2 && !allmISDN) ? j_serial : 0;
- PDEBUG(DEBUG_JOIN, "join%u EP%u requests bridge=%u\n", j_serial, relation->epoint_id, message->param.bridge_id);
- message_put(message);
+ /* core bridge */
+ if (relation->channel_state == 1
+ && relation->rx_state != NOTIFY_STATE_HOLD
+ && relation->rx_state != NOTIFY_STATE_SUSPEND
+ && relations>1 // no bridge with one member
+ && !allmISDN) { // no bridge if all members are mISDN
+ message = message_create(j_serial, relation->epoint_id, JOIN_TO_EPOINT, MESSAGE_BRIDGE);
+ message->param.bridge_id = bridge_id;
+ PDEBUG(DEBUG_JOIN, "join%u EP%u requests bridge=%u\n", j_serial, relation->epoint_id, bridge_id);
+ message_put(message);
+ } else {
+ message = message_create(j_serial, relation->epoint_id, JOIN_TO_EPOINT, MESSAGE_BRIDGE);
+ message->param.bridge_id = 0;
+ PDEBUG(DEBUG_JOIN, "join%u EP%u drop bridge=%u\n", j_serial, relation->epoint_id, bridge_id);
+ message_put(message);
+ }