Beispiel: SIP-Servlet SimpleProxy

Dies ist ein Servletbeispiel eines einfachen Proxy (SimpleProxy).

Einfacher 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)
			{
								//	Durch diese Aktion sollte die SIP-Sitzung erstellt werden. Dieses Beispiel verwendet die Sitzung
    // nur dann, wenn ein BYE empfangen wird. Mit dem Tivoli Performance Viewer kann die Erstellung von
    // Aufrufen jedoch verfolgt werden, indem die Anzahl der aktiven Sitzungen angezeigt wird.
								Integer state = new Integer(INVITE_RECEIVED);
						SipSession session = request.getSession();
								session.setAttribute(STATE_KEY, state);
            		log("SimpleProxy: doInvite: Attribut wird festgelegt");

								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: Weiterleitung an Destination-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: Anforderung ist ungültig. Enthielt kein To: Feld.");
										SipServletResponse sipresponse = request.createResponse(400);
										sipresponse.send();
				}
			}
			else 
			{
		        		        //log("SimpleProxy: doInvite: Zielaktualisierung, Container führt invite aus");
								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);

 				//	Beispiel für die Verwendung des Sitzungsobjekts zum Speichern des Sitzungsstatus
				SipSession session = response.getSession();
				if (session.getAttribute(SHUTDOWN_KEY) != null)
		{
						//log("SimpleProxy: doResponse: Sitzung wird invalidiert");
						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: Sitzung invalidieren, wenn Antworten empfangen werden.");
				super.doBye(request);
	}

		protected String format_lookup(String toFormat){
				int start_index = toFormat.indexOf('<') + 1;
		int end_index = toFormat.indexOf('>');

				if(start_index == 0){
						//kein Problem
		}
				if(end_index == -1){
						end_index = toFormat.length();
		}

				return toFormat.substring(start_index, end_index);
	}
}

Symbol, das den Typ des Artikels anzeigt. Referenzartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rsip_servletsample1
Dateiname:rsip_servletsample1.html