package com.voxeo.moho.sip; import javax.media.mscontrol.join.Joinable.Direction; import org.apache.log4j.Logger; import com.voxeo.moho.MixerImpl; import com.voxeo.moho.Participant; import com.voxeo.moho.Participant.JoinType; import com.voxeo.moho.ParticipantContainer; import com.voxeo.moho.common.event.MohoJoinCompleteEvent; import com.voxeo.moho.event.JoinCompleteEvent; import com.voxeo.moho.event.JoinCompleteEvent.Cause; public class OtherParticipantJoinDelegate extends JoinDelegate { private static final Logger LOG = Logger.getLogger(OtherParticipantJoinDelegate.class); protected Participant otherParticipant; protected OtherParticipantJoinDelegate(final SIPCallImpl call1, final Participant participant, final JoinType type, final Direction direction) { _call1 = call1; otherParticipant = participant; _direction = direction; _joinType = type; } @Override public void doJoin() throws Exception { super.doJoin(); _call1.unlinkDirectlyPeer(); if (_call1.getMediaObject() == null) { _call1.join(Direction.DUPLEX); return; } JoinDelegate.bridgeJoin(_call1, otherParticipant, _direction); if (otherParticipant instanceof MixerImpl.ClampDtmfMixerAdapter) { MixerImpl.ClampDtmfMixerAdapter adapter = (MixerImpl.ClampDtmfMixerAdapter) otherParticipant; _call1.addParticipant(adapter.getMixer(), _joinType, _direction, adapter); ((ParticipantContainer) otherParticipant).addParticipant(_call1, _joinType, _direction, adapter); } else { _call1.addParticipant(otherParticipant, _joinType, _direction, null); ((ParticipantContainer) otherParticipant).addParticipant(_call1, _joinType, _direction, null); } done(Cause.JOINED, null); } public synchronized void done(final Cause cause, Exception exception) { if (done) { return; } if (exception != null) { LOG.error("Join complete in error cause:" + cause + " for joinDelegate" + this, exception); } else { LOG.debug("Join complete with cause:" + cause + " for joinDelegate" + this); } _cause = cause; _exception = exception; _call1.joinDone(otherParticipant, this); JoinCompleteEvent joinCompleteEvent = new MohoJoinCompleteEvent(_call1, otherParticipant, cause, exception, true); _call1.dispatch(joinCompleteEvent); JoinCompleteEvent peerJoinCompleteEvent = new MohoJoinCompleteEvent(otherParticipant, _call1, cause, exception, false); otherParticipant.dispatch(peerJoinCompleteEvent); _settableJoint.done(joinCompleteEvent); done = true; } }