There are two programs which should enable RTP sessions. I am using LinPhone from a different machine to call my application. The call gets successfully completed as there are no exceptions thrown at the server console and even the Linphone shows 'Connected' status.
Problem: On speaking using a microphone on either of the ends, no voice is heard.
Thanks.
AudioSipServlet.java:
package org.example.servlet.sip;
import java.io.IOException;
import javax.servlet.sip.ConvergedHttpSession;
import org.mobicents.mscontrol.MsPeer;
import org.mobicents.mscontrol.MsPeerFactory;
import org.mobicents.mscontrol.MsProvider;
import org.mobicents.mscontrol.MsSession;
import org.mobicents.mscontrol.MsConnection;
import org.mobicents.mscontrol.MsLink;
import javax.servlet.ServletException;
import javax.servlet.sip.SipApplicationSession;
import javax.servlet.sip.SipFactory;
import javax.servlet.sip.SipServletMessage;
import javax.servlet.sip.SipServletRequest;
import javax.servlet.sip.SipServletResponse;
import javax.servlet.sip.SipSession;
import javax.servlet.sip.SipURI;
public class AudioSipServlet extends javax.servlet.sip.SipServlet implements
javax.servlet.Servlet {
// The SipFactory is used to create SIP request and SIP URIs
public static final String PR_JNDI_NAME = "media/trunk/PacketRelay/$";
protected void doInvite(SipServletRequest request) throws ServletException,
IOException {
log(" 1 Received INVITE request" + request.getMethod());
SipServletResponse response = request
.createResponse(SipServletResponse.SC_RINGING);
response.send();
Object sdpObj = request.getContent();
byte[] sdpBytes = (byte[]) sdpObj;
String sdp = new String(sdpBytes);
try {
String user = request.getFrom().getDisplayName();
if (user == null && request.getFrom().getURI() instanceof SipURI) {
user = ((SipURI) request.getFrom().getURI()).getUser();
}
/* MsPeerFactory - to get MsPeer instance */
/* MsPeer - returns an instance of a Peer object */
MsPeer mspeer = MsPeerFactory
.getPeer("org.mobicents.mscontrol.impl.MsPeerImpl");
/*
* Returns an instance of Provider object which contains the desired
* service name
*/
MsProvider msprovider = mspeer.getProvider();
/*
* MsSession provides a transient association of connections for
* real-time communication interchange
*/
/* createSession() - creates a session with no links */
MsSession mssession = msprovider.createSession();
/*
* createNetworkConnection(identifier) - specifies the identifier of
* media server endpoint
*/
MsConnection msconnection = mssession
.createNetworkConnection(PR_JNDI_NAME);
MediaConnectionListener listener = new MediaConnectionListener(request);
msconnection.addConnectionListener(listener);
msconnection.modify("$", sdp);
//request.getSession().setAttribute("msconnection", msconnection);
log (" 1 No exceptions");
} catch (Exception e) {
e.printStackTrace();
}
}
//log("Current Status: " + appSession.getAttribute("status").toString());
}
MediaConnectionListener.java:
package org.example.servlet.sip;
import java.io.IOException;
import javax.servlet.sip.SipServletRequest;
import javax.servlet.sip.SipServletResponse;
import org.apache.log4j.Logger;
import org.mobicents.mscontrol.MsConnection;
import org.mobicents.mscontrol.MsConnectionEvent;
import org.mobicents.mscontrol.MsConnectionListener;
import org.mobicents.mscontrol.MsEndpoint;
import org.mobicents.mscontrol.MsProvider;
import org.mobicents.mscontrol.MsSession;
import org.mobicents.mscontrol.MsNotifyEvent;
import javax.servlet.sip.SipServletMessage;
import org.mobicents.mscontrol.MsNotificationListener;
public class MediaConnectionListener implements MsConnectionListener,
MsNotificationListener {
private static Logger logger = Logger
.getLogger(MediaConnectionListener.class);
private SipServletMessage sipMessage;
private MsProvider provider;
public MediaConnectionListener(SipServletMessage message) {
System.out.println("2 Media Connection Listener");
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(
"Exception in sending the error response",
e);
}
}
}
public void connectionHalfOpen(MsConnectionEvent arg0) {
logger.info("connection half opened" + arg0);
}
public void connectionOpen(MsConnectionEvent event) {
System.out.println("connection open");
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) {
System.out.println("connection open response");
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 msconnection = event.getConnection();
MsEndpoint msendpoint = msconnection.getEndpoint();
MsSession mssession = msconnection.getSession();
}
public void connectionOpenRequest(MsConnectionEvent event,
SipServletRequest inviteRequest) {
logger.info("connection open request" + 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);
}
}
public SipServletMessage getSipMessage() {
return sipMessage;
}
public void connectionModeRecvOnly(MsConnectionEvent arg0) {
// TODO Auto-generated method stub
}
public void connectionModeSendOnly(MsConnectionEvent arg0) {
// TODO Auto-generated method stub
}
public void update(MsNotifyEvent evt) {
logger.info(evt);
}
public void connectionModeSendRecv(MsConnectionEvent arg0) {
// TODO Auto-generated method stub
}
}
Friday, June 12, 2009
Subscribe to:
Post Comments (Atom)
The problem has been sorted.
ReplyDelete