package org.mobicents.javax.media.mscontrol; import jain.protocol.ip.mgcp.message.parms.CallIdentifier; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.media.mscontrol.Configuration; import javax.media.mscontrol.MediaConfig; import javax.media.mscontrol.MediaObject; import javax.media.mscontrol.MediaSession; import javax.media.mscontrol.MsControlException; import javax.media.mscontrol.Parameter; import javax.media.mscontrol.Parameters; import javax.media.mscontrol.mediagroup.MediaGroup; import javax.media.mscontrol.mixer.MediaMixer; import javax.media.mscontrol.networkconnection.NetworkConnection; import javax.media.mscontrol.vxml.VxmlDialog; import org.apache.log4j.Logger; import org.mobicents.javax.media.mscontrol.mediagroup.MediaGroupImpl; import org.mobicents.javax.media.mscontrol.mixer.MediaMixerImpl; import org.mobicents.javax.media.mscontrol.networkconnection.NetworkConnectionImpl; import org.mobicents.jsr309.mgcp.MgcpWrapper; /** * * @author amit bhayani * */ public class MediaSessionImpl implements MediaSession { private static final Logger logger = Logger.getLogger(MediaSessionImpl.class); private MgcpWrapper mgcpWrapper; private CallIdentifier callIdentifier = null; private URI uri = null; List<NetworkConnection> netConnList = new ArrayList<NetworkConnection>(); List<MediaGroup> medGrpList = new ArrayList<MediaGroup>(); List<MediaMixer> medMxrList = new ArrayList<MediaMixer>(); private Map attributeMap = new HashMap(); public MediaSessionImpl(MgcpWrapper mgcpWrapper) { this.mgcpWrapper = mgcpWrapper; // callIdentifier acts as media session id this.callIdentifier = this.mgcpWrapper.getUniqueCallIdentifier(); try { this.uri = new URI("mscontrol://" + this.mgcpWrapper.getPeerIp() + "/" + this.callIdentifier.toString()); } catch (URISyntaxException e) { logger.error(e); } } public MediaGroup createMediaGroup(Configuration<MediaGroup> paramConfiguration) throws MsControlException { MediaConfigImpl config = MsControlFactoryImpl.configVsMediaConfigMap.get(paramConfiguration); if (config == null) { throw new MsControlException("No MediaConfig found for predefined Configuration<MediaGroup> " + paramConfiguration); } MediaGroup mediaGroupImpl = new MediaGroupImpl(this, mgcpWrapper, config); medGrpList.add(mediaGroupImpl); return mediaGroupImpl; } public MediaGroup createMediaGroup(Configuration<MediaGroup> paramConfiguration, Parameters paramParameters) throws MsControlException { MediaConfigImpl config = MsControlFactoryImpl.configVsMediaConfigMap.get(paramConfiguration); if (config == null) { throw new MsControlException("No MediaConfig found for predefined Configuration<MediaGroup> " + paramConfiguration); } MediaGroup mediaGroupImpl = new MediaGroupImpl(this, mgcpWrapper, config, paramParameters); medGrpList.add(mediaGroupImpl); return mediaGroupImpl; } public MediaGroup createMediaGroup(MediaConfig paramMediaConfig, Parameters paramParameters) throws MsControlException { MediaGroup mediaGroupImpl = new MediaGroupImpl(this, mgcpWrapper, (MediaConfigImpl) paramMediaConfig); medGrpList.add(mediaGroupImpl); return mediaGroupImpl; } public MediaMixer createMediaMixer(Configuration<MediaMixer> paramConfiguration) throws MsControlException { MediaConfigImpl config = MsControlFactoryImpl.configVsMediaConfigMap.get(paramConfiguration); if (config == null) { throw new MsControlException("No MediaConfig found for predefined Configuration<MediaMixer> " + paramConfiguration); } MediaMixerImpl mediaMixerImpl = new MediaMixerImpl(this, mgcpWrapper, config); medMxrList.add(mediaMixerImpl); return mediaMixerImpl; } public MediaMixer createMediaMixer(Configuration<MediaMixer> paramConfiguration, Parameters paramParameters) throws MsControlException { MediaConfigImpl config = MsControlFactoryImpl.configVsMediaConfigMap.get(paramConfiguration); if (config == null) { throw new MsControlException("No MediaConfig found for predefined Configuration<MediaMixer> " + paramConfiguration); } MediaMixerImpl mediaMixerImpl = new MediaMixerImpl(this, mgcpWrapper, config, paramParameters); medMxrList.add(mediaMixerImpl); return mediaMixerImpl; } public MediaMixer createMediaMixer(MediaConfig paramMediaConfig, Parameters paramParameters) throws MsControlException { MediaMixerImpl mediaMixerImpl = new MediaMixerImpl(this, mgcpWrapper, (MediaConfigImpl) paramMediaConfig, paramParameters); medMxrList.add(mediaMixerImpl); return mediaMixerImpl; } public NetworkConnection createNetworkConnection(Configuration<NetworkConnection> paramConfiguration) throws MsControlException { MediaConfigImpl config = MsControlFactoryImpl.configVsMediaConfigMap.get(paramConfiguration); if (config == null) { throw new MsControlException("No NetworkConnection found for predefined Configuration<NetworkConnection> " + paramConfiguration); } NetworkConnectionImpl networkConnectionImpl = new NetworkConnectionImpl(this, mgcpWrapper, config); netConnList.add(networkConnectionImpl); return networkConnectionImpl; } public NetworkConnection createNetworkConnection(Configuration<NetworkConnection> paramConfiguration, Parameters paramParameters) throws MsControlException { MediaConfigImpl config = MsControlFactoryImpl.configVsMediaConfigMap.get(paramConfiguration); if (config == null) { throw new MsControlException("No NetworkConnection found for predefined Configuration<NetworkConnection> " + paramConfiguration); } NetworkConnectionImpl networkConnectionImpl = new NetworkConnectionImpl(this, mgcpWrapper, config, paramParameters); netConnList.add(networkConnectionImpl); return networkConnectionImpl; } public NetworkConnection createNetworkConnection(MediaConfig paramMediaConfig, Parameters paramParameters) throws MsControlException { NetworkConnectionImpl networkConnectionImpl = new NetworkConnectionImpl(this, mgcpWrapper, (MediaConfigImpl) paramMediaConfig, paramParameters); netConnList.add(networkConnectionImpl); return networkConnectionImpl; } public VxmlDialog createVxmlDialog(Parameters paramParameters) throws MsControlException { // TODO Auto-generated method stub return null; } public Object getAttribute(String paramString) { return attributeMap.get(paramString); } public Iterator<String> getAttributeNames() { return attributeMap.keySet().iterator(); } public void removeAttribute(String paramString) { attributeMap.remove(paramString); } public void setAttribute(String paramString, Object paramObject) { attributeMap.put(paramString, paramObject); } public Parameters createParameters() { return new ParametersImpl(); } 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 Parameters getParameters(Parameter[] paramArrayOfParameter) { // TODO Auto-generated method stub return null; } public URI getURI() { return this.uri; } public void release() { while (medGrpList.size() != 0) { MediaGroup mg = medGrpList.get(0); mg.release(); } while (medMxrList.size() != 0) { MediaMixer mx = medMxrList.get(0); mx.release(); } while (netConnList.size() != 0) { NetworkConnection nc = netConnList.get(0); nc.release(); } this.attributeMap.clear(); } public void setParameters(Parameters paramParameters) { // TODO Auto-generated method stub } public CallIdentifier getCallIdentifier() { return this.callIdentifier; } public List<NetworkConnection> getNetConnList() { return netConnList; } public List<MediaGroup> getMedGrpList() { return medGrpList; } public List<MediaMixer> getMedMxrList() { return medMxrList; } }