package org.mobicents.javax.media.mscontrol; import jain.protocol.ip.mgcp.pkg.MgcpEvent; import jain.protocol.ip.mgcp.pkg.PackageName; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.Reader; import java.net.URI; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import javax.media.mscontrol.Configuration; import javax.media.mscontrol.MediaConfig; import javax.media.mscontrol.MediaConfigException; import javax.media.mscontrol.MediaObject; import javax.media.mscontrol.MediaSession; import javax.media.mscontrol.MsControlFactory; 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.resource.enums.EventTypeEnum; import javax.media.mscontrol.resource.enums.ParameterEnum; import javax.media.mscontrol.resource.video.VideoLayout; import javax.xml.parsers.ParserConfigurationException; import org.apache.log4j.Logger; import org.mobicents.jain.protocol.ip.mgcp.pkg.AUMgcpEvent; import org.mobicents.jain.protocol.ip.mgcp.pkg.AUPackage; import org.mobicents.javax.media.mscontrol.mediagroup.PlayerEventDetectorFactory; import org.mobicents.javax.media.mscontrol.mediagroup.signals.SignalDetectorEventDetectorFactory; import org.mobicents.javax.media.mscontrol.resource.ExtendedParameter; import org.mobicents.jsr309.mgcp.MgcpStackFactory; import org.mobicents.jsr309.mgcp.MgcpWrapper; import org.xml.sax.SAXException; /** * * @author amit bhayani * */ public class MsControlFactoryImpl implements MsControlFactory { private static final Logger logger = Logger.getLogger(MsControlFactoryImpl.class); private Properties properties = null; private MgcpWrapper mgcpWrapper = null; private List<Integer> list = new ArrayList<Integer>(); private XMLParser parser = new XMLParser(); protected static Map<Configuration, MediaConfigImpl> configVsMediaConfigMap = new HashMap<Configuration, MediaConfigImpl>(); public MsControlFactoryImpl(Properties properties) { this.properties = properties; MgcpStackFactory mgcpStackFactory = MgcpStackFactory.getInstance(); this.mgcpWrapper = mgcpStackFactory.getMgcpStackProvider(properties); if (mgcpWrapper == null) { throw new RuntimeException("Could not create instance of MediaSessionFactory. Check the exception in logs"); } // NC.BASIC configVsMediaConfigMap.put(NetworkConnection.BASIC, this.createNetConnBasic()); // MG.PPLAYER configVsMediaConfigMap.put(MediaGroup.PLAYER, this.createMedGrpPlayer()); // MG.PLAYER_SIGNALDETECTOR configVsMediaConfigMap.put(MediaGroup.PLAYER_SIGNALDETECTOR, this.createMedGrpPlayerSignDete()); // MG.SIGNALDETECTOR configVsMediaConfigMap.put(MediaGroup.SIGNALDETECTOR, this.createMedGrpSignDete()); // MG.PLAYER_RECORDER_SIGNALDETECTOR configVsMediaConfigMap.put(MediaGroup.PLAYER_RECORDER_SIGNALDETECTOR, this.createMedGrpPlaRecSigDet()); // MMX.AUDIO configVsMediaConfigMap.put(MediaMixer.AUDIO, this.createMedMixAud()); } private MediaConfigImpl createMedMixAud() { MediaConfigImpl ncMediaConf = new MediaConfigImpl(mgcpWrapper); ParametersImpl paraImpl = new ParametersImpl(); paraImpl.put(ExtendedParameter.ENDPOINT_LOCAL_NAME, "/mobicents/media/cnf/$"); paraImpl.put(ParameterEnum.MAX_PORTS, "5"); SupportedFeaturesImpl suppFeatures = new SupportedFeaturesImpl(); suppFeatures.setParameter(paraImpl.keySet()); ncMediaConf.setSupportedFeatures(suppFeatures); ncMediaConf.setParameters(paraImpl); return ncMediaConf; } private MediaConfigImpl createNetConnBasic() { MediaConfigImpl ncMediaConf = new MediaConfigImpl(mgcpWrapper); ParametersImpl paraImpl = new ParametersImpl(); paraImpl.put(ExtendedParameter.ENDPOINT_LOCAL_NAME, "/mobicents/media/packetrelay/$"); SupportedFeaturesImpl suppFeatures = new SupportedFeaturesImpl(); suppFeatures.setParameter(paraImpl.keySet()); ncMediaConf.setSupportedFeatures(suppFeatures); ncMediaConf.setParameters(paraImpl); return ncMediaConf; } private List<DefaultEventGeneratorFactory> getPlayerEventGeneratorFactoryList() { List<DefaultEventGeneratorFactory> generatorList = new ArrayList<DefaultEventGeneratorFactory>(); DefaultEventGeneratorFactory ann = new DefaultEventGeneratorFactory(PackageName.Announcement.toString(), MgcpEvent.ann.getName(), true); generatorList.add(ann); return generatorList; } private List<DefaultEventGeneratorFactory> getRecEveGenFacList() { List<DefaultEventGeneratorFactory> generatorList = new ArrayList<DefaultEventGeneratorFactory>(); DefaultEventGeneratorFactory ann = new DefaultEventGeneratorFactory(AUPackage.AU.toString(), AUMgcpEvent.aupr .getName(), true); generatorList.add(ann); return generatorList; } private List<PlayerEventDetectorFactory> getPlayerEventDetectorFactoryList() { List<PlayerEventDetectorFactory> detectorList = new ArrayList<PlayerEventDetectorFactory>(); PlayerEventDetectorFactory oc = new PlayerEventDetectorFactory(PackageName.Announcement.toString(), MgcpEvent.oc.getName(), true, EventTypeEnum.PLAY_COMPLETED); detectorList.add(oc); PlayerEventDetectorFactory of = new PlayerEventDetectorFactory(PackageName.Announcement.toString(), MgcpEvent.of.getName(), true, EventTypeEnum.PLAY_COMPLETED); detectorList.add(of); return detectorList; } private MediaConfigImpl createMedGrpPlayer() { MediaConfigImpl ncMediaConf = new MediaConfigImpl(mgcpWrapper); ParametersImpl paraImpl = new ParametersImpl(); paraImpl.put(ExtendedParameter.ENDPOINT_LOCAL_NAME, "/mobicents/media/IVR/$"); SupportedFeaturesImpl suppFeatures = new SupportedFeaturesImpl(); suppFeatures.setParameter(paraImpl.keySet()); ncMediaConf.setSupportedFeatures(suppFeatures); ncMediaConf.setParameters(paraImpl); ncMediaConf.setPlayerGeneFactList(getPlayerEventGeneratorFactoryList()); ncMediaConf.setPlayerDetFactList(getPlayerEventDetectorFactoryList()); ncMediaConf.setPlayer(true); return ncMediaConf; } private MediaConfigImpl createMedGrpSignDete() { MediaConfigImpl mgMediaConf = new MediaConfigImpl(mgcpWrapper); ParametersImpl paraImpl = new ParametersImpl(); paraImpl.put(ExtendedParameter.ENDPOINT_LOCAL_NAME, "/mobicents/media/IVR/$"); SupportedFeaturesImpl suppFeatures = new SupportedFeaturesImpl(); suppFeatures.setParameter(paraImpl.keySet()); mgMediaConf.setSupportedFeatures(suppFeatures); mgMediaConf.setParameters(paraImpl); // Signal Detector // mgMediaConf.setSigDeteEveGeneFactList(getSigDetEveGenFacList()); mgMediaConf.setSigDeteEveDetFactList(getSigDetEveDetFacList()); mgMediaConf.setSignaldetector(true); return mgMediaConf; } private List<DefaultEventGeneratorFactory> getSigDetEveGenFacList() { List<DefaultEventGeneratorFactory> sigDeteEveGenList = new ArrayList<DefaultEventGeneratorFactory>(); DefaultEventGeneratorFactory dtmf0 = new DefaultEventGeneratorFactory(PackageName.Dtmf.toString(), MgcpEvent.dtmf0.getName(), false); sigDeteEveGenList.add(dtmf0); DefaultEventGeneratorFactory dtmf1 = new DefaultEventGeneratorFactory(PackageName.Dtmf.toString(), MgcpEvent.dtmf1.getName(), false); sigDeteEveGenList.add(dtmf1); DefaultEventGeneratorFactory dtmf2 = new DefaultEventGeneratorFactory(PackageName.Dtmf.toString(), MgcpEvent.dtmf2.getName(), false); sigDeteEveGenList.add(dtmf2); DefaultEventGeneratorFactory dtmf3 = new DefaultEventGeneratorFactory(PackageName.Dtmf.toString(), MgcpEvent.dtmf3.getName(), false); sigDeteEveGenList.add(dtmf3); DefaultEventGeneratorFactory dtmf4 = new DefaultEventGeneratorFactory(PackageName.Dtmf.toString(), MgcpEvent.dtmf4.getName(), false); sigDeteEveGenList.add(dtmf4); DefaultEventGeneratorFactory dtmf5 = new DefaultEventGeneratorFactory(PackageName.Dtmf.toString(), MgcpEvent.dtmf5.getName(), false); sigDeteEveGenList.add(dtmf5); DefaultEventGeneratorFactory dtmf6 = new DefaultEventGeneratorFactory(PackageName.Dtmf.toString(), MgcpEvent.dtmf6.getName(), false); sigDeteEveGenList.add(dtmf6); DefaultEventGeneratorFactory dtmf7 = new DefaultEventGeneratorFactory(PackageName.Dtmf.toString(), MgcpEvent.dtmf7.getName(), false); sigDeteEveGenList.add(dtmf7); DefaultEventGeneratorFactory dtmf8 = new DefaultEventGeneratorFactory(PackageName.Dtmf.toString(), MgcpEvent.dtmf8.getName(), false); sigDeteEveGenList.add(dtmf8); DefaultEventGeneratorFactory dtmf9 = new DefaultEventGeneratorFactory(PackageName.Dtmf.toString(), MgcpEvent.dtmf9.getName(), false); sigDeteEveGenList.add(dtmf9); DefaultEventGeneratorFactory dtmfA = new DefaultEventGeneratorFactory(PackageName.Dtmf.toString(), MgcpEvent.dtmfA.getName(), false); sigDeteEveGenList.add(dtmfA); DefaultEventGeneratorFactory dtmfB = new DefaultEventGeneratorFactory(PackageName.Dtmf.toString(), MgcpEvent.dtmfB.getName(), false); sigDeteEveGenList.add(dtmfB); DefaultEventGeneratorFactory dtmfC = new DefaultEventGeneratorFactory(PackageName.Dtmf.toString(), MgcpEvent.dtmfC.getName(), false); sigDeteEveGenList.add(dtmfC); DefaultEventGeneratorFactory dtmfD = new DefaultEventGeneratorFactory(PackageName.Dtmf.toString(), MgcpEvent.dtmfD.getName(), false); sigDeteEveGenList.add(dtmfD); DefaultEventGeneratorFactory dtmfStar = new DefaultEventGeneratorFactory(PackageName.Dtmf.toString(), MgcpEvent.dtmfStar.getName(), false); sigDeteEveGenList.add(dtmfStar); DefaultEventGeneratorFactory dtmfHash = new DefaultEventGeneratorFactory(PackageName.Dtmf.toString(), MgcpEvent.dtmfHash.getName(), false); sigDeteEveGenList.add(dtmfHash); return sigDeteEveGenList; } private List<SignalDetectorEventDetectorFactory> getSigDetEveDetFacList() { List<SignalDetectorEventDetectorFactory> sigDeteEveDetList = new ArrayList<SignalDetectorEventDetectorFactory>(); SignalDetectorEventDetectorFactory dtmf0Eve = new SignalDetectorEventDetectorFactory(PackageName.Dtmf .toString(), MgcpEvent.dtmf0.getName(), false, EventTypeEnum.SIGNAL_DETECTED); sigDeteEveDetList.add(dtmf0Eve); SignalDetectorEventDetectorFactory dtmf1Eve = new SignalDetectorEventDetectorFactory(PackageName.Dtmf .toString(), MgcpEvent.dtmf1.getName(), false, EventTypeEnum.SIGNAL_DETECTED); sigDeteEveDetList.add(dtmf1Eve); SignalDetectorEventDetectorFactory dtmf2Eve = new SignalDetectorEventDetectorFactory(PackageName.Dtmf .toString(), MgcpEvent.dtmf2.getName(), false, EventTypeEnum.SIGNAL_DETECTED); sigDeteEveDetList.add(dtmf2Eve); SignalDetectorEventDetectorFactory dtmf3Eve = new SignalDetectorEventDetectorFactory(PackageName.Dtmf .toString(), MgcpEvent.dtmf3.getName(), false, EventTypeEnum.SIGNAL_DETECTED); sigDeteEveDetList.add(dtmf3Eve); SignalDetectorEventDetectorFactory dtmf4Eve = new SignalDetectorEventDetectorFactory(PackageName.Dtmf .toString(), MgcpEvent.dtmf4.getName(), false, EventTypeEnum.SIGNAL_DETECTED); sigDeteEveDetList.add(dtmf4Eve); SignalDetectorEventDetectorFactory dtmf5Eve = new SignalDetectorEventDetectorFactory(PackageName.Dtmf .toString(), MgcpEvent.dtmf5.getName(), false, EventTypeEnum.SIGNAL_DETECTED); sigDeteEveDetList.add(dtmf5Eve); SignalDetectorEventDetectorFactory dtmf6Eve = new SignalDetectorEventDetectorFactory(PackageName.Dtmf .toString(), MgcpEvent.dtmf6.getName(), false, EventTypeEnum.SIGNAL_DETECTED); sigDeteEveDetList.add(dtmf6Eve); SignalDetectorEventDetectorFactory dtmf7Eve = new SignalDetectorEventDetectorFactory(PackageName.Dtmf .toString(), MgcpEvent.dtmf7.getName(), false, EventTypeEnum.SIGNAL_DETECTED); sigDeteEveDetList.add(dtmf7Eve); SignalDetectorEventDetectorFactory dtmf8Eve = new SignalDetectorEventDetectorFactory(PackageName.Dtmf .toString(), MgcpEvent.dtmf8.getName(), false, EventTypeEnum.SIGNAL_DETECTED); sigDeteEveDetList.add(dtmf8Eve); SignalDetectorEventDetectorFactory dtmf9Eve = new SignalDetectorEventDetectorFactory(PackageName.Dtmf .toString(), MgcpEvent.dtmf9.getName(), false, EventTypeEnum.SIGNAL_DETECTED); sigDeteEveDetList.add(dtmf9Eve); SignalDetectorEventDetectorFactory dtmfAEve = new SignalDetectorEventDetectorFactory(PackageName.Dtmf .toString(), MgcpEvent.dtmfA.getName(), false, EventTypeEnum.SIGNAL_DETECTED); sigDeteEveDetList.add(dtmfAEve); SignalDetectorEventDetectorFactory dtmfBEve = new SignalDetectorEventDetectorFactory(PackageName.Dtmf .toString(), MgcpEvent.dtmfB.getName(), false, EventTypeEnum.SIGNAL_DETECTED); sigDeteEveDetList.add(dtmfBEve); SignalDetectorEventDetectorFactory dtmfCEve = new SignalDetectorEventDetectorFactory(PackageName.Dtmf .toString(), MgcpEvent.dtmfC.getName(), false, EventTypeEnum.SIGNAL_DETECTED); sigDeteEveDetList.add(dtmfCEve); SignalDetectorEventDetectorFactory dtmfDEve = new SignalDetectorEventDetectorFactory(PackageName.Dtmf .toString(), MgcpEvent.dtmfD.getName(), false, EventTypeEnum.SIGNAL_DETECTED); sigDeteEveDetList.add(dtmfDEve); SignalDetectorEventDetectorFactory dtmfStarEve = new SignalDetectorEventDetectorFactory(PackageName.Dtmf .toString(), MgcpEvent.dtmfStar.getName(), false, EventTypeEnum.SIGNAL_DETECTED); sigDeteEveDetList.add(dtmfStarEve); SignalDetectorEventDetectorFactory dtmfHashEve = new SignalDetectorEventDetectorFactory(PackageName.Dtmf .toString(), MgcpEvent.dtmfHash.getName(), false, EventTypeEnum.SIGNAL_DETECTED); sigDeteEveDetList.add(dtmfHashEve); return sigDeteEveDetList; } private MediaConfigImpl createMedGrpPlayerSignDete() { MediaConfigImpl mgMediaConf = new MediaConfigImpl(mgcpWrapper); ParametersImpl paraImpl = new ParametersImpl(); paraImpl.put(ExtendedParameter.ENDPOINT_LOCAL_NAME, "/mobicents/media/IVR/$"); SupportedFeaturesImpl suppFeatures = new SupportedFeaturesImpl(); suppFeatures.setParameter(paraImpl.keySet()); mgMediaConf.setSupportedFeatures(suppFeatures); mgMediaConf.setParameters(paraImpl); // Player mgMediaConf.setPlayerGeneFactList(getPlayerEventGeneratorFactoryList()); mgMediaConf.setPlayerDetFactList(getPlayerEventDetectorFactoryList()); mgMediaConf.setPlayer(true); // Signal Detector mgMediaConf.setSigDeteEveGeneFactList(getSigDetEveGenFacList()); mgMediaConf.setSigDeteEveDetFactList(getSigDetEveDetFacList()); mgMediaConf.setSignaldetector(true); return mgMediaConf; } private MediaConfigImpl createMedGrpPlaRecSigDet() { MediaConfigImpl mgMediaConf = new MediaConfigImpl(mgcpWrapper);; ParametersImpl paraImpl = new ParametersImpl(); paraImpl.put(ExtendedParameter.ENDPOINT_LOCAL_NAME, "/mobicents/media/IVR/$"); SupportedFeaturesImpl suppFeatures = new SupportedFeaturesImpl(); suppFeatures.setParameter(paraImpl.keySet()); mgMediaConf.setSupportedFeatures(suppFeatures); mgMediaConf.setParameters(paraImpl); // Player mgMediaConf.setPlayerGeneFactList(getPlayerEventGeneratorFactoryList()); mgMediaConf.setPlayerDetFactList(getPlayerEventDetectorFactoryList()); mgMediaConf.setPlayer(true); // Signal Detector mgMediaConf.setSigDeteEveGeneFactList(getSigDetEveGenFacList()); mgMediaConf.setSigDeteEveDetFactList(getSigDetEveDetFacList()); mgMediaConf.setSignaldetector(true); // Recorder mgMediaConf.setRecorderGeneFactList(getRecEveGenFacList()); mgMediaConf.setRecorder(true); return mgMediaConf; } public MediaSession createMediaSession() { return new MediaSessionImpl(this.mgcpWrapper); } public Parameters createParameters() { return new ParametersImpl(); } public VideoLayout createVideoLayout(String mimeType, Reader xmlDef) throws MediaConfigException { // TODO Auto-generated method stub return null; } public VideoLayout getPresetLayout(String type) throws MediaConfigException { return null; } public VideoLayout[] getPresetLayouts(int numberOfLiveRegions) throws MediaConfigException { // TODO Auto-generated method stub return null; } public Properties getProperties() { return this.properties; } public MediaConfig getMediaConfig(Configuration<?> paramConfiguration) throws MediaConfigException { return configVsMediaConfigMap.get(paramConfiguration); } public MediaConfig getMediaConfig(Reader paramReader) throws MediaConfigException { int c; MediaConfigImpl config = null; try { while ((c = paramReader.read()) != -1) { list.add(c); } byte[] b = new byte[list.size()]; int count = 0; for (int i : list) { b[count] = (byte) i; count++; } list.clear(); ByteArrayInputStream inputStream = new ByteArrayInputStream(b); config = parser.parse(null, inputStream); } catch (IOException e) { logger.error(e); throw new MediaConfigException(e.getMessage(), e); } catch (ParserConfigurationException e) { logger.error(e); throw new MediaConfigException(e.getMessage(), e); } catch (SAXException e) { logger.error(e); throw new MediaConfigException(e.getMessage(), e); } return config; } public MediaObject getMediaObject(URI paramURI) { // TODO Auto-generated method stub return null; } }