Clases de SIP SipServletRequest y SipServletResponse
Las clases SipServletRequest y SipServletResponse son similares a las clases HttpServletRequest y HttpServletResponse.
Clases SipServletRequest y SipServletResponse
Cada clase le proporciona la posibilidad de acceder a las cabeceras del mensaje SIP y manipularlas. Debido a la naturaleza asíncrona de las solicitudes y respuestas, esta clase también es el lugar para crear nuevas respuestas para las solicitudes. Cuando amplía el método doInvite, sólo se pasa la clase SipServletRequest al método. Para enviar una respuesta al cliente, debe llamar al método createResponse en el objeto Request para crear una respuesta. Por ejemplo:
protected void doInvite(SipServletRequest req) throws
javax.servlet.ServletException, java.io.IOException {
//devolver una respuesta Trying provisional
SipServletResponse resp = req.createResponse(100);
resp.send();
Debido a su naturaleza asíncrona, los servlets SIP pueden parecer complicados. No obstante, algo tan sencillo como el código de ejemplo anterior envía una respuesta a un cliente.
El siguiente es un ejemplo más complejo de un servlet SIP. Con el método siguiente incluido en un servlet SIP, el servlet bloquea todas las llamadas que no proceden del dominio example.com.
protected void doInvite(SipServletRequest req) throws
javax.servlet.ServletException, java.io.IOException {
//comprobar si el URI es un URI de SIP
if (req.getFrom().getURI().isSipURI()){
SipURI uri = (SipURI)req.getFrom.getURI();
if (!uri.getHost().equals("example.com")) {
//enviar respuesta prohibida para llamadas fuera del dominio
req.createResponse(SipServletResponse.SC_FORBIDDEN).send();
return;
}
}
//enviar mediante proxy las otras solicitudes a su destino original
req.getProxy().proxyTo(req.getRequestURI);
}