package org.mobicents.servlet.sip.conference.server; import java.io.IOException; import javax.servlet.sip.SipServletMessage; import javax.servlet.sip.SipServletRequest; import javax.servlet.sip.SipServletResponse; import javax.servlet.sip.SipURI; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.mobicents.mscontrol.MsConnection; import org.mobicents.mscontrol.MsConnectionEvent; import org.mobicents.mscontrol.MsConnectionListener; import org.mobicents.mscontrol.MsEndpoint; import org.mobicents.mscontrol.MsNotificationListener; import org.mobicents.mscontrol.MsNotifyEvent; import org.mobicents.mscontrol.MsProvider; import org.mobicents.mscontrol.MsSession; import org.mobicents.servlet.sip.conference.client.SipGwtConferenceConsole; import org.mobicents.servlet.sip.conference.server.media.AnnouncementConferenceParticipant; import org.mobicents.servlet.sip.conference.server.media.ConferenceCenter; import org.mobicents.servlet.sip.conference.server.media.ConferenceParticipant; import org.mobicents.servlet.sip.conference.server.media.EndpointConferenceParticipant; /** * This class is registered in the media server to be notified on media connection * events. It also carries connection-specific application data (the original * sip message). * * @author Vladimir Ralev * */ public class ConferenceConnectionListener implements MsConnectionListener, MsNotificationListener{ private static Log logger = LogFactory.getLog(ConferenceConnectionListener.class); private SipServletMessage sipMessage; private MsProvider provider; public ConferenceConnectionListener(SipServletMessage message) { this.sipMessage = message; } public void connectionCreated(MsConnectionEvent event) { logger.info("connection created " + event); } public void connectionInitialized(MsConnectionEvent arg0) { logger.info("connection initialized " + arg0); } public void connectionDisconnected(MsConnectionEvent arg0) { logger.info("connection disconnected " + arg0); } public void connectionFailed(MsConnectionEvent arg0) { logger.error("connection failed " + arg0); if(sipMessage instanceof SipServletRequest) { SipServletRequest inviteRequest = (SipServletRequest) sipMessage; try { inviteRequest.createResponse(SipServletResponse.SC_SERVER_INTERNAL_ERROR).send(); } catch (IOException e) { logger.error("Unexpected exception while sending the error response", e); } } } public void connectionHalfOpen(MsConnectionEvent arg0) { logger.info("connection half opened" + arg0); } public void connectionOpen(MsConnectionEvent event) { if(sipMessage instanceof SipServletRequest) { SipServletRequest request = (SipServletRequest) sipMessage; connectionOpenRequest(event, request); } else { SipServletResponse response = (SipServletResponse) sipMessage; connectionOpenResponse(event, response); } } public void connectionOpenResponse(MsConnectionEvent event, SipServletResponse response) { logger.info("connection opened " + event); String sdp = event.getConnection().getLocalDescriptor(); SipServletRequest ack = response.createAck(); try { ack.setContent(sdp, "application/sdp"); ack.send(); } catch (Exception e) { logger.error(e); } provider = ConferenceCenter.getInstance().getProvider(); MsConnection connection = event.getConnection(); MsEndpoint endpoint = connection.getEndpoint(); MsSession session = connection.getSession(); String callerName = response.getTo().getURI().toString(); ConferenceParticipant participant = new EndpointConferenceParticipant( callerName, endpoint, session, response, connection); String key = SipGwtConferenceConsole.CONFERENCE_NAME; ConferenceCenter.getInstance().getConference(key).joinParticipant( participant); } public void connectionOpenRequest(MsConnectionEvent event, SipServletRequest inviteRequest) { logger.info("connection opened " + event); String sdp = event.getConnection().getLocalDescriptor(); SipServletResponse sipServletResponse = inviteRequest .createResponse(SipServletResponse.SC_OK); try { sipServletResponse.setContent(sdp, "application/sdp"); sipServletResponse.send(); } catch (Exception e) { logger.error(e); } provider = ConferenceCenter.getInstance().getProvider(); MsConnection connection = event.getConnection(); MsEndpoint endpoint = connection.getEndpoint(); MsSession session = connection.getSession(); String callerName = inviteRequest.getFrom().getURI().toString(); ConferenceParticipant participant = new EndpointConferenceParticipant( callerName, endpoint, session, inviteRequest, connection); String key = ((SipURI) inviteRequest.getTo().getURI()).getUser(); ConferenceCenter.getInstance().getConference(key).joinParticipant( participant); } public SipServletMessage getSipMessage() { return sipMessage; } public void update(MsNotifyEvent evt) { logger.info(evt); } public void connectionModeRecvOnly(MsConnectionEvent arg0) { // TODO Auto-generated method stub } public void connectionModeSendOnly(MsConnectionEvent arg0) { // TODO Auto-generated method stub } public void connectionModeSendRecv(MsConnectionEvent arg0) { // TODO Auto-generated method stub } }