X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=joinpbx.cpp;h=929065779125b2087890f9f0708d8e0285b9841c;hp=4b0654013d49121edd05587601627a46c6d1c3d9;hb=306ed3c7f18a99e74d26738a9b1e3fd3209ef9bc;hpb=b0bd74e35e935aa976b68c594def4e8d2c22ef95 diff --git a/joinpbx.cpp b/joinpbx.cpp index 4b06540..9290657 100644 --- a/joinpbx.cpp +++ b/joinpbx.cpp @@ -367,15 +367,13 @@ void JoinPBX::bridge(void) } /* - * request data from endpoint/port if: + * Bridge between port instances if: * - two relations - * - any without mISDN - * in this case we bridge + * - one or all are not mISDN */ - message = message_create(j_serial, relation->epoint_id, JOIN_TO_EPOINT, MESSAGE_mISDNSIGNAL); - message->param.mISDNsignal.message = mISDNSIGNAL_JOINDATA; - message->param.mISDNsignal.joindata = (relations==2 && !allmISDN); - PDEBUG(DEBUG_JOIN, "join%d EP%d set joindata=%d\n", j_serial, relation->epoint_id, message->param.mISDNsignal.joindata); + 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); relation = relation->next; @@ -413,43 +411,6 @@ void JoinPBX::bridge(void) } } -/* - * bridging is only possible with two connected endpoints - */ -void JoinPBX::bridge_data(unsigned int epoint_from, struct join_relation *relation_from, union parameter *param) -{ - struct join_relation *relation_to; - - /* if we are alone */ - if (!j_relation->next) - return; - - /* if we are more than two */ - if (j_relation->next->next) - return; - - /* skip if source endpoint has NOT audio mode CONNECT */ - if (relation_from->channel_state != 1) - return; - - /* get destination relation */ - relation_to = j_relation; - if (relation_to == relation_from) { - /* oops, we are the first, so destination is: */ - relation_to = relation_to->next; - } - - /* skip if destination endpoint has NOT audio mode CONNECT */ - if (relation_to->channel_state != 1) - return; - - /* now we may send our data to the endpoint where it - * will be delivered to the port - */ -//printf("from %d, to %d\n", relation_from->epoint_id, relation_to->epoint_id); - message_forward(j_serial, relation_to->epoint_id, JOIN_TO_EPOINT, param); -} - /* release join from endpoint * if the join has two relations, all relations are freed and the join will be * destroyed @@ -651,7 +612,7 @@ void JoinPBX::message_epoint(unsigned int epoint_id, int message_type, union par // joinpbx_debug(join,"Join::message_epoint"); // } if (options.deb & DEBUG_JOIN) { - if (message_type != MESSAGE_DATA) { + if (message_type) { cl = join_first; while(cl) { if (cl->j_type == JOIN_TYPE_PBX) @@ -731,7 +692,7 @@ void JoinPBX::message_epoint(unsigned int epoint_id, int message_type, union par switch(message_type) { /* process audio path message */ case MESSAGE_AUDIOPATH: - PDEBUG(DEBUG_JOIN, "join received channel message: %d.\n", param->audiopath); + PDEBUG(DEBUG_JOIN, "join received channel message: audiopath=%d, current relation's channel_state=%d\n", param->audiopath, relation->channel_state); if (relation->channel_state != param->audiopath) { relation->channel_state = param->audiopath; trigger_work(&j_updatebridge); @@ -772,12 +733,6 @@ void JoinPBX::message_epoint(unsigned int epoint_id, int message_type, union par } return; - /* audio data */ - case MESSAGE_DATA: - /* now send audio data to the other endpoint */ - bridge_data(epoint_id, relation, param); - return; - /* relations sends a connect */ case MESSAGE_CONNECT: /* outgoing setup type becomes connected */ @@ -963,8 +918,7 @@ int JoinPBX::out_setup(unsigned int epoint_id, int message_type, union parameter epoint = new Endpoint(0, j_serial); if (!epoint) FATAL("No memory for Endpoint instance\n"); - if (!(epoint->ep_app = new DEFAULT_ENDPOINT_APP(epoint, 1))) // outgoing - FATAL("No memory for Endpoint Application instance\n"); + epoint->ep_app = new_endpointapp(epoint, 1, EAPP_TYPE_PBX); // outgoing relation->epoint_id = epoint->ep_serial; /* send setup message to new endpoint */ //printf("JOLLY DEBUG: %d\n",join_countrelations(j_serial));