Exemplo: Proxy Simples de Servlet SIP
A classe SendOnServlet é um servlet SIP simples que executará a função básica de ser chamada em cada INVITE e enviar o pedido a partir disso.
Classe SendOnServlet
A função poderá ser facilmente inserida para registrar esse pedido de convite ou rejeitar o INVITE com base em alguns critérios específicos.
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 {
//enviar no pedido
req.getProxy().proxyTo(req.getRequestURI);
}
}
O método doInvite poderá ser alterado simplesmente para fazer algo como rejeitar o convite para algum critério específico. No exemplo acima, todas as solicitações de domínios fora de example.com serão rejeitadas com uma resposta Forbidden.
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”)) {
//enviar resposta forbidden para chamadas fora do domínio
req.createResponse(SipServletResponse.SC_FORBIDDEN, “Calls outside example.com not accepted”).send();
return;
}
}
//utilizar proxy em todos os outros pedidos em seu destino original
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>