SIP Servlet 1.x (JSR 116/289)

Preview:

DESCRIPTION

SIP Servlet 1.x (JSR 116/289). Javier Alexander Hurtado Ingeniero en Electrónica y Telecomunicaciones javhur@unicauca.edu.co. Servicios avanzados. Un Servidor SIP actúa como una plataforma para la creación de servicios - PowerPoint PPT Presentation

Citation preview

SIP Servlet 1.x (JSR 116/289)

Javier Alexander HurtadoIngeniero en Electrónica y Telecomunicacionesjavhur@unicauca.edu.co

Ing. Javier Alexander Hurtado

Servicios avanzados

• Un Servidor SIP actúa como una plataforma para la creación de servicios

• Extiende la funcionalidad básica de un Servidor Proxy SIP (nuevos servicios)

• El API SIP Servlet propone un modelo para la creación de nuevos servicios sobre SIP

• SIP Servlet 1.0 (JSR 116), SIP Servlet 1.1 (JSR 289)

• http://jcp.org/en/jsr/detail?id=116 y http://jcp.org/en/jsr/detail?id=289

Más información: JSR 116 – SIP Servlet

Ing. Javier Alexander Hurtado

Historia• Sip Servlet 1 (Marzo de 2003)• Expert Group

– 8x8, ”Dynamicsoft Inc.”, Ericsson Inc., IBM, Nokia Corporation, Siemens AG, Sun Microsystems Inc., Ubiquity Software Corporation

• SIP Servlet 1.1 (Marzo de 2006)• Expert Group

– 8x8, Apache Software Foundation, Appium Technologies AB, AT&T, BayPackets Inc., BEA Systems, Cingular Wireless, Cisco Systems, Ericsson AB, Fraunhofer-Gesellschaft Institute FIRST, Fujitsu Limited, IBM, JBoss Inc., Mailvision LTD, Netcentrex, Nexcom Systems, Oracle, Orange France SA, Sun Microsystems Inc., T-Mobile International AG & Co. KG, Telcordia Technologies Inc., Telecom Italia, Ubiquity Software Corporation, Voztelecom Sistemas S.L.

Ing. Javier Alexander Hurtado

Conceptos básicos

• Aplicaciones de Telefonía convencional son exigentes y complejas (tiempo/costo)

• SIP Servlet provee una especificación y un conjunto de interfaces neutral que soporta una plataforma abierta y consistente sobre la cual desarrollar y publicar servicios portables

• Extiende el modelo HTTP Servlet• Proxy Server estándar puede ser la base de

un Servidor de Aplicaciones SIP

Ing. Javier Alexander Hurtado

HTTP Servlet vs SIP Servlet

• Conceptos comúnes– Método service()– Archivos de publicación JAR– Descriptores de despliegue

• Diferencias– Concepto de proxy que puede iniciar

nuevas solicitudes– Asíncrono– Soporta composición

Ing. Javier Alexander Hurtado

Servidor de Aplicaciones SIP

• Implementa un Container SIP soporte para SIP Servlets

• Carga e inicializa al Servlet e invoca los métodos apropiados cuando un mensaje SIP llega

• Cuando se detiene, destruye todos los SIP Servlets

• Ejecuta algunas de las funciones de un contenedor HTTP Servlet

Fuente: NIST

Ing. Javier Alexander Hurtado

Componentes SIP Servlet

• Servlet Container– Entorno de ejecución de los Servlets

• Servlets– Clase con un método service() compilada

en un Servlet Archive File (SAR)• Deployment Descriptor

– Archivo XML con información de configuración y reglas de mapeo de mensajes

Ing. Javier Alexander Hurtado

Modelo básico SIP Servlet

S ervlet E ngine

S IP S erverreques ts

responses

reques ts

respons es

s e rvle ts e rvle t

• Localización del SIP Server y el Servlet engine:– En la misma Java Virtual Machine– Diferentes procesos, el mismo host– Diferentes hosts: 1:1, 1:n, n:1, n:m

Ing. Javier Alexander Hurtado

Enrutamiento de Servicios

• Servlet enruta el request a uno o más destinos

• Re-envía la respuesta al llamante

S erver

s e rvle tUA C UA S

S IP S IP

RTP

Ing. Javier Alexander Hurtado

Servlet como UAS

• Los Servlets pueden rechazar (filtrar) llamadas

• Pueden aceptar y configurar flujos multimedia

S erver

s e rvle t

UA C

S IP

RTP

Ing. Javier Alexander Hurtado

Los SIP Servlets

SipServlet

SipServletAdapter ServletConfig1

ServletsClases Java extendiendo a javax.servlet.sip.SipServlet e implementa los métodos apropiados. Se empaqueta en un archivo SAR con su Deployment Descriptor.

Ing. Javier Alexander Hurtado

Herramientas para el Servlet

ContactDatabaseSipFactory

SipServletContext

Abstracciones de ServidorServidor SIP, Servlet engine, información de localización

Ing. Javier Alexander Hurtado

Manejo de mensajes SIP

SipMessage

SipRequest SipResponse

SipTransaction1

Mensajes SIPClases para manipulación de mensajes

Ing. Javier Alexander Hurtado

Manejo de direcciones SIP

SipAddress

SipContact

SipURL1

DireccionamientoManipulación de direcciones SIP (SIP-URIs)

Ing. Javier Alexander Hurtado

Eventos / Métodos SIP• SipServlet recibe mensajes a través del método

service() que a su vez llama a doRequest() o doResponse() respectivamente y por último, estos invocan a uno de los siguiente métodos:

– doInvite() - doAck()- doOptions() - doBye()- doCancel() - diRegister()- doSubscribe() - doNotify()- doMessage() - doInfo()- doProvisionalResponse() Para respuestas SIP 1xx- doSucessResponse() Para respuestas SIP 2xx- doRedirectResponse() Para respuestas SIP 3xx- doErrorResponse() Para respuestas SIP 4xx, 5xx y 6xx

Ing. Javier Alexander Hurtado

Algunas clase del API

• ServletConfig: información de configuración• ServletContext: servlet container• SipServletMessage: aspectos comúnes• SipServletRequest: SIP request message• SipServletResponse: SIP response message• SipFactory: interface• SipAddress: cabeceras From y To• SipSession: sesión SIP (igual que RFC3261)• SipApplicationSession: como HttpSession• Proxy: operación de Proxy y control sobre él

Ing. Javier Alexander Hurtado

Estructura de directorios

Ing. Javier Alexander Hurtado

sip.xml – Deployment Descriptor

• El root element es sip-app• Solicitudes mapeadas hacia los servlets

sip basadas en un lenguaje de reglas• No tienen significado algunas etiquetas

como: jsp-file, taglib, welcome-file-list• El modelo de composición de SIP

servlet le permite a muchas aplicaciones ejecutarse a partir de un solo Request

Ing. Javier Alexander Hurtado

Elementos del Deployment Descriptor

• Parámetros inciales del ServletContext• Configuración de Sesión• Definiciones de Servlets• Mapeo de Servlets• Application lifecycle listener classes• Manejador de Errores• Definiciones y mapeo de Filtros• Seguridad

Ing. Javier Alexander Hurtado

DOCTYPE / DTD de sip.xml

• <!DOCTYPE sip-app PUBLIC "-//Java Community Process//DTD SIP Application 1.0//EN" "http://www.jcp.org/dtd/sip-app_1_0.dtd">

• <!ELEMENT sip-app (icon?, display-name?, description?, distributable?, context-param*, listener*, servlet*, servlet-mapping*, proxy-config?, session-config?, resource-env-ref*, resource-ref*, security-constraint*, login-config?, security-role*, env-entry*, ejb-ref*, ejb-local-ref*)>

Ing. Javier Alexander Hurtado

Ejemplo: sip.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sip-appPUBLIC "-//Java Community Process//DTD SIP Application 1.0//EN“

"http://www.jcp.org/dtd/sip-app_1_0.dtd"><sip-app> <display-name>A Simple SIP Application</display-name> <context-param> <param-name>vxml-server</param-name> <param-value>sip:server17@vxml.example.com</param-value> </context-param><servlet> <servlet-name>WeatherService</servlet-name> <servlet-class>com.example.Weather</servlet-class> <init-param> <param-name>weather-server</param-name> <param-value>http://example.com/weather</param-value> </init-param></servlet>

Ing. Javier Alexander Hurtado

Ejemplo: sip.xml

<servlet-mapping> <servlet-name>WeatherService</servlet-name> <pattern> <and> <equal> <var>request.method</var> <value>INVITE</value> </equal> <equal> <var>request.to.uri.user</var> <value>weather</value> </equal> </and> </pattern></servlet-mapping><session-config> <session-timeout>15</session-timeout></session-config></sip-app>

Ing. Javier Alexander Hurtado

Patrones de mapeo• Elemento pattern: puede contener

– and (cond.), or (cond.), not (cond.), equal (var, value), contains (var, value), exists (var), subdomain-of (var, value)

<equal> <var>request.method</var> <value>INVITE</value></equal><contains> <var>request.to.uri.user</var> <value>javhur</value></contains>

Ing. Javier Alexander Hurtado

Lenguaje de reglas• Define los siguientes objetos:

– Request: la solicitud SIP punto de entrada a la regla.• method: el método SIP• uri: la request URI (puede ser SipURI o TelURI)• from: un objeto Address que representa la cabecera From• to: un objeto Address que representa la cabecera To

– URI• scheme: el esquema URI

– SipURI (hereda de URI)• scheme: puede ser “sip” o “sips”• user: la parte de usuario de la SipURI• host: la parte de host de la SipURI• port: número del puerto en formato decimal• tel: número telefónico si existe• param.name: un parámetro dentro del URI SIP

Ing. Javier Alexander Hurtado

Lenguaje de reglas

• Más objetos:– TelURI (hereda de URI)

• scheme: siempre será “tel”• tel: el nombre del suscriptor• param.name: un parámetro dentro de la URL

– Address• uri: una SipURI o un TelURI• display-name: la parte del display-name de las

cabeceras From o To

Ing. Javier Alexander Hurtado

Ejemplo (Variables)

• Un mensaje INVITE de ejemploINVITE sip:watson@boston.bell-tel.com SIP/2.0From: A. Bell <sip:a.g.bell@bell-tel.com>;tag=3pccTo: T. Watson <sip:watson@bell-tel.com>…

• Algunas variables

Ing. Javier Alexander Hurtado

Ejemplo (Variables)

Ing. Javier Alexander Hurtado

Ejemplo (reglas)<pattern> <and> <equal> <var>request.method</var> <value>INVITE</value> </equal> <not> <contains ignore-case="true"> <var>request.from.display-name</var> <value>bell</value> </contains> </not> <subdomain-of> <var>request.from.uri.host</var> <value>bell-tel.com</value> </subdomain-of> </and></pattern>

El resultado de la evaluación de esta regla es false

Analizar!

Regla1 = True

Regla2 = False

Regla3 = True

Ing. Javier Alexander Hurtado

Ejemplo 1 (source)• El Servlet espera por Mensajes INVITE, y

reenvía el INVITE al Agente de Usuario de destino

public class SampleServlet extends SipServlet { public void doInvite(SipServletRequest req)

throws ServletException, java.io.IOException {

try { req.send();} catch (IOException e) { throw new ServletException("Could not send

request", e); }

} }

Ing. Javier Alexander Hurtado

Ejemplo 1 (sip.xml)• Deployment Descriptor<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sip-appPUBLIC "-//Java Community Process//DTD SIP Application 1.0//EN“

"http://www.jcp.org/dtd/sip-app_1_0.dtd"><sip-app> <display-name>A Simple SIP Application</display-name> <servlet> <servlet-name>HolaSip</servlet-name> <display-name>HolaSip</display-name> <description>HolaSip</description> <servlet-class>sat.HolaSip</servlet-class> </servlet> <servlet-mapping> <pattern> <and> <equal> <var>request.method</var> <value>INVITE</value> </equal>

Ing. Javier Alexander Hurtado

Ejemplo 1 (sip.xml)

• Deployment Descriptor<not> <contains ignore-case="true"> <var>request.from.display-name</var> <value>bell</value> </contains> </not> <subdomain-of> <var>request.from.uri.host</var> <value>bell-tel.com</value> </subdomain-of> </and> </pattern> </servlet-mapping></sip-app>

Ing. Javier Alexander Hurtado

Ejemplo 2• Comportamiento de Proxy• El Servlet actúa como un Proxy

– Modo Supervisado permite ver las respuestas– Modo RecordRoute permite ver ACK y BYE

public void doInvite(SipServletRequest req) throws ServletException, IOException {Proxy p = req.getProxy(true); p.setSupervised(true); p.setRecordRoute(true); System.out.println("Proxying request: " + req.getRequestURI());

p.proxyTo(req.getRequestURI());}

Ing. Javier Alexander Hurtado

Productos comerciales

• Ubiquity Software– Ubiquity SIP Application Server

(Runtime y Development Tools)

• MicroMethod Technologies– SIPMethod Application Server 1.0

Released – Marzo 2006

Ing. Javier Alexander Hurtado

Alternativas a SIP Servlet

• CPL:– Simple y seguro – usado para (no confiables)

usuarios finales• SIP CGI:

– Basedo en HTTP CGI y similar en alcance a SIP Servlets

• Parlay– Permite a servidores de aplicaciones externos a

un servidor SIP, controlar llamadas• JAIN:

– Definido bajo el Java Community Process

Ing. Javier Alexander Hurtado

Beneficios del modelo Servlet

• Poderoso:– Acceso completo a señalización SIP

• Performance:– No necesita crear nuevos procesos por cada Request– El mismo Servlet puede manejar muchos Requests

simultáneamente• Seguro: revisión de tipos; no usa punteros; manejo

de excepciones• Conveniencia:

– Alto nivel de abstracción– Integration suave con servidores: logging, seguridad,

base de datos de localización

Ing. Javier Alexander Hurtado

Beneficios del modelo Servlet

• El modelo del ciclo de vida de los Servlets permite– Mantener el estado, p.e. conexiones a bases de datos– Manajar Timers

• Acceso a un amplio rango de APIs, p.e.– JNDI para acceso a directorio– JDBC para acceso a bases de datos– JMF/FMJ para manejo de flujos multimedia, p.e. codecs y

RTP– El speech API– JavaMail– EJBs– HTTP Servlets

Ing. Javier Alexander Hurtado

¿Preguntas?

¡Gracias por su atención!¡Gracias por su atención!javhur@unicauca.edu.cojavhur@unicauca.edu.co