package org.mobicents.servlet.sip.seam.media.framework; import static org.jboss.seam.annotations.Install.FRAMEWORK; import java.util.concurrent.ConcurrentHashMap; import javax.servlet.sip.SipSession; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Install; import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Observer; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.Startup; import org.jboss.seam.core.Events; import org.jboss.seam.log.Log; import org.mobicents.mscontrol.MsConnectionEvent; import org.mobicents.mscontrol.MsLinkEvent; import org.mobicents.mscontrol.events.MsEventIdentifier; import org.mobicents.mscontrol.events.dtmf.MsDtmfNotifyEvent; import org.mobicents.mscontrol.events.pkg.DTMF; import org.mobicents.mscontrol.events.pkg.MsAnnouncement; import org.mobicents.mscontrol.events.pkg.MsAudio; import org.mobicents.servlet.sip.seam.entrypoint.media.MediaEvent; /** * This class simply cleans up any media connections/links that are not explicitly cleaned up from * the application as a failsafe. * * @author vralev * */ @Name("mediaSessionCleanup") @Scope(ScopeType.STATELESS) public class MediaSessionCleanup { @In(required=false) MediaSessionStore mediaSessionStore; @Logger Log log; /** * You can use this method to simulate some event, BUT THIS IS NOT RECOMMENDED! */ @Observer("sipSessionDestroyed") public void doSipSessionDestroyed(SipSession sipSession) { if(mediaSessionStore != null) { if(mediaSessionStore.getMsConnection() != null) { mediaSessionStore.getMsConnection().release(); } if(mediaSessionStore.getMsLink() != null) { mediaSessionStore.getMsLink().release(); } } } }