SendOnServlet クラスは、単純な SIP サーブレットです。 各 INVITE で呼び出され、そこから要求を送信するという、 基本的な機能を実行します。
この INVITE 要求をログに記録したり、 いくつかの仕様基準に基づいて INVITE を拒否したりする関数を、 簡単に挿入することができます。
package com.example; import java.io.IOException; import javax.servlet.sip.*; import java.servlet.ServletException; public class SendOnServlet extends SipServlet { public void doInvite(SipServletRequest req) throws ServletException, java.io.IOException { //send on the request req.getProxy().proxyTo(req.getRequestURI); } }
doInvite メソッドは、 特定の基準に対して単純に INVITE を拒否する、 というようなことを行うように変更できます。 以下の doInvite メソッドの例では、 example.com 以外のドメインからのすべての要求を、 禁止応答 (Forbidden response) によって拒否しています。
public void doInvite(SipServletRequest req) throws ServletException, java.io.IOException { if (req.getFrom().getURI().isSipURI()){ SipURI uri = (SipURI)req.getFrom.getURI(); if (!uri.getHost().equals(“example.com”)) { //send forbidden response for calls outside domain req.createResponse(SipServletResponse.SC_FORBIDDEN, “Calls outside example.com not accepted”).send(); return; } } //proxy all other requests on to their original destination req.getProxy().proxyTo(req.getRequestURI()); } SendOnServlet deployment descriptor: <sip-app> <display-name>Send-on Servlet</display-name> <servlet> <servlet-name>SendOnServlet</servlet-name> <servlet-class>com.example.SendOnServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SendOnServlet</servlet-name> <pattern> <equal> <var>request.method</var> <value>INVITE</value> </equal> </pattern> </servlet-mapping> </sip-app>