package org.mobicents.javax.media.mscontrol.mixer; import jain.protocol.ip.mgcp.message.parms.ConnectionIdentifier; import java.net.URI; import java.net.URISyntaxException; import java.util.Iterator; import java.util.concurrent.CopyOnWriteArrayList; import javax.media.mscontrol.Configuration; import javax.media.mscontrol.MediaConfig; import javax.media.mscontrol.MediaEvent; import javax.media.mscontrol.MediaEventListener; import javax.media.mscontrol.MediaObject; import javax.media.mscontrol.MsControlException; import javax.media.mscontrol.Parameter; import javax.media.mscontrol.Parameters; import javax.media.mscontrol.join.Joinable; import javax.media.mscontrol.mixer.MediaMixer; import javax.media.mscontrol.mixer.MixerAdapter; import javax.media.mscontrol.mixer.MixerEvent; import javax.media.mscontrol.resource.Action; import javax.media.mscontrol.resource.AllocationEventListener; import javax.media.mscontrol.resource.enums.ParameterEnum; import org.apache.log4j.Logger; import org.mobicents.javax.media.mscontrol.AbstractJoinableContainer; import org.mobicents.javax.media.mscontrol.MediaConfigImpl; import org.mobicents.javax.media.mscontrol.MediaObjectState; import org.mobicents.javax.media.mscontrol.MediaSessionImpl; import org.mobicents.javax.media.mscontrol.ParametersImpl; import org.mobicents.javax.media.mscontrol.resource.ExtendedParameter; import org.mobicents.jsr309.mgcp.MgcpWrapper; /** * * @author amit bhayani * */ public class MediaMixerImpl extends AbstractJoinableContainer implements MediaMixer { public static Logger logger = Logger.getLogger(MediaMixerImpl.class); private String CONF_ENDPOINT_NAME = "/mobicents/media/cnf/$"; private URI uri = null; private MediaConfigImpl config = null; private Parameters params = null; protected CopyOnWriteArrayList<MediaEventListener<? extends MediaEvent<?>>> mediaEventListenerList = new CopyOnWriteArrayList<MediaEventListener<? extends MediaEvent<?>>>(); public MediaMixerImpl(MediaSessionImpl mediaSession, MgcpWrapper mgcpWrapper, MediaConfigImpl config) { super(); this.mediaSession = mediaSession; this.mgcpWrapper = mgcpWrapper; this.endpoint = (String) config.getParameters().get(ExtendedParameter.ENDPOINT_LOCAL_NAME); this.CONF_ENDPOINT_NAME = this.endpoint; this.maxJoinees = Integer.parseInt((String) config.getParameters().get(ParameterEnum.MAX_PORTS)); this.config = config; try { this.uri = new URI(mediaSession.getURI().toString() + "/MediaMixer." + this.id); } catch (URISyntaxException e) { // Ignore } } public MediaMixerImpl(MediaSessionImpl mediaSession, MgcpWrapper mgcpWrapper, MediaConfigImpl config, Parameters params) { this(mediaSession, mgcpWrapper, config); this.params = params; } public MixerAdapter createMixerAdapter(Configuration<MixerAdapter> paramConfiguration) throws MsControlException { // TODO Auto-generated method stub return null; } public MixerAdapter createMixerAdapter(Configuration<MixerAdapter> paramConfiguration, Parameters paramParameters) throws MsControlException { // TODO Auto-generated method stub return null; } public MixerAdapter createMixerAdapter(MediaConfig paramMediaConfig, Parameters paramParameters) throws MsControlException { // TODO Auto-generated method stub return null; } @Override protected void checkState() { if (this.state.equals(MediaObjectState.RELEASED)) { throw new IllegalStateException("State of container " + this.getURI() + "is released"); } } @Override protected MediaObjectState getState() { return this.state; } @Override public URI getURI() { return this.uri; } @Override protected void joined(ConnectionIdentifier thisConnId, ConnectionIdentifier otherConnId) { // TODO Auto-generated method stub } @Override protected void resetContainer() { this.endpoint = CONF_ENDPOINT_NAME; } @Override protected void unjoined(ConnectionIdentifier thisConnId, ConnectionIdentifier otherConnId) { // TODO Auto-generated method stub } public void confirm() throws MsControlException { // TODO Auto-generated method stub } public MediaConfig getConfig() { // TODO Auto-generated method stub return null; } public <R> R getResource(Class<R> resource) throws MsControlException { // TODO Auto-generated method stub return null; } public void triggerRTC(Action rtca) { // TODO Auto-generated method stub } public Parameters createParameters() { return new ParametersImpl(); } public Parameters getParameters(Parameter[] params) { // TODO Auto-generated method stub return null; } public void release() { checkState(); try { Joinable[] joinableArray = this.getJoinees(); for (Joinable joinable : joinableArray) { this.unjoinInitiate(joinable, this); } } catch (MsControlException e) { logger.error("release of NetworkConnection failed ", e); } this.state = MediaObjectState.RELEASED; this.mediaSession.getMedMxrList().remove(this); } public void setParameters(Parameters params) { // TODO Auto-generated method stub } public void addListener(MediaEventListener<MixerEvent> listener) { this.mediaEventListenerList.add(listener); } public void removeListener(MediaEventListener<MixerEvent> listener) { this.mediaEventListenerList.remove(listener); } public Iterator<MediaObject> getMediaObjects() { // TODO Auto-generated method stub return null; } public <T extends MediaObject> Iterator<T> getMediaObjects(Class<T> paramClass) { // TODO Auto-generated method stub return null; } public void addListener(AllocationEventListener paramAllocationEventListener) { // TODO Auto-generated method stub } public void removeListener(AllocationEventListener paramAllocationEventListener) { // TODO Auto-generated method stub } }