Example: SIP servlet simple proxy
This is a servlet example of a simple proxy.
Simple proxy
import java.io.IOException; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.sip.Proxy; import javax.servlet.sip.SipFactory; import javax.servlet.sip.SipServlet; import javax.servlet.sip.SipServletRequest; import javax.servlet.sip.SipServletResponse; import javax.servlet.sip.SipSession; import javax.servlet.sip.SipURI; import javax.servlet.sip.URI; public class SimpleProxy extends SipServlet implements Servlet { final static private String SHUTDOWN_KEY = new String("shutdown"); final static private String STATE_KEY = new String("state"); final static private int INVITE_RECEIVED = 1; /* (non-Java-doc) * @see javax.servlet.sip.SipServlet#SipServlet() */ public SimpleProxy() { super(); } /* (non-Javadoc) * @see javax.servlet.sip.SipServlet#doInvite(javax.servlet.sip.SipServletRequest) */ protected void doInvite(SipServletRequest request) throws ServletException, IOException { //log("SimpleProxy: doInvite: TOP"); try { if (request.isInitial() == true) { // This should cause the sip session to be created. This sample only uses the session on receiving // a BYE but the Tivoli performance viewer can be used to track the creation of calls by viewing the // active session count. Integer state = new Integer(INVITE_RECEIVED); SipSession session = request.getSession(); session.setAttribute(STATE_KEY, state); log("SimpleProxy: doInvite: setting attribute"); Proxy proxy = request.getProxy(); SipFactory sipFactory = (SipFactory) getServletContext().getAttribute(SIP_FACTORY); if (sipFactory == null) { throw new ServletException("No SipFactory in context"); } String callingNumber = request.getTo().toString(); if (callingNumber != null) { String destStr = format_lookup(callingNumber); URI dest = sipFactory.createURI(destStr); //log("SimpleProxy: doInvite: Proxying to dest URI = " + dest.toString()); if (((SipURI)request.getRequestURI()).getTransportParam() != null) ((SipURI)dest).setTransportParam(((SipURI)request.getRequestURI()).getTransportParam()); proxy.setRecordRoute(true); proxy.proxyTo(dest); } else { //log("SimpleProxy: doInvite: Request is invalid. Did not contain a To: field."); SipServletResponse sipresponse = request.createResponse(400); sipresponse.send(); } } else { //log("SimpleProxy: doInvite: target refresh, let container handle invite"); super.doInvite(request); } } catch (Exception e){ e.printStackTrace(); } } /* (non-Javadoc) * @see javax.servlet.sip.SipServlet#doResponse(javax.servlet.sip.SipServletResponse) */ protected void doResponse(SipServletResponse response) throws ServletException, IOException { super.doResponse(response); // Example of using the session object to store session state. SipSession session = response.getSession(); if (session.getAttribute(SHUTDOWN_KEY) != null) { //log("SimpleProxy: doResponse: invalidating session"); session.invalidate(); } } /* (non-Javadoc) * @see javax.servlet.sip.SipServlet#doBye(javax.servlet.sip.SipServletRequest) */ protected void doBye(SipServletRequest request) throws ServletException, IOException { SipSession session = request.getSession(); session.setAttribute(SHUTDOWN_KEY, new Boolean(true)); //log("SimpleProxy: doBye: invalidate session when responses is received."); super.doBye(request); } protected String format_lookup(String toFormat){ int start_index = toFormat.indexOf('<') + 1; int end_index = toFormat.indexOf('>'); if(start_index == 0){ //don't worry about it } if(end_index == -1){ end_index = toFormat.length(); } return toFormat.substring(start_index, end_index); } }
Related tasks
Browse all SIP topics
SIP servlets
SIP servlet specification
Related Reference
SIP SipServletRequest and SipServletResponse classes
SIP SipSession and SipApplicationSession classes
Example: SIP servlet Proxy servlet class
Example: SIP servlet SendOnServlet class
Reference topic