WebSphere Application Server - Express for i5/OS, Version 6.1   
             オペレーティング・システム: i5/OS

             目次と検索結果のパーソナライズ化

例: SIP サーブレットの単純なプロキシー

単純なプロキシーのサーブレットの例を紹介します。

単純なプロキシー

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);
	}
}



関連タスク
すべての SIP トピックの参照
SIP サーブレット
SIP サーブレット仕様
関連資料
SIP SipServletRequest クラスと SipServletResponse クラス
SIP SipSession クラスと SipApplicationSession クラス
例: SIP サーブレットの Proxy サーブレット・クラス
例: SIP サーブレットの SendOnServlet クラス
参照トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 7:05:28 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.express.iseries.doc/info/iseriesexp/ae/rsip_servletsample1.html