SIP Servlet 1.x (JSR 116/289)
Javier Alexander HurtadoIngeniero en Electrónica y [email protected]
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:[email protected]</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:[email protected] SIP/2.0From: A. Bell <sip:[email protected]>;tag=3pccTo: T. Watson <sip:[email protected]>…
• 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ó[email protected]@unicauca.edu.co