SIP Servlet 1.x (JSR 116/289)
description
Transcript of SIP Servlet 1.x (JSR 116/289)
![Page 2: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/2.jpg)
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
![Page 3: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/3.jpg)
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.
![Page 4: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/4.jpg)
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
![Page 5: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/5.jpg)
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
![Page 6: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/6.jpg)
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
![Page 7: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/7.jpg)
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
![Page 8: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/8.jpg)
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
![Page 9: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/9.jpg)
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
![Page 10: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/10.jpg)
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
![Page 11: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/11.jpg)
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.
![Page 12: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/12.jpg)
Ing. Javier Alexander Hurtado
Herramientas para el Servlet
ContactDatabaseSipFactory
SipServletContext
Abstracciones de ServidorServidor SIP, Servlet engine, información de localización
![Page 13: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/13.jpg)
Ing. Javier Alexander Hurtado
Manejo de mensajes SIP
SipMessage
SipRequest SipResponse
SipTransaction1
Mensajes SIPClases para manipulación de mensajes
![Page 14: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/14.jpg)
Ing. Javier Alexander Hurtado
Manejo de direcciones SIP
SipAddress
SipContact
SipURL1
DireccionamientoManipulación de direcciones SIP (SIP-URIs)
![Page 15: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/15.jpg)
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
![Page 16: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/16.jpg)
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
![Page 17: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/17.jpg)
Ing. Javier Alexander Hurtado
Estructura de directorios
![Page 18: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/18.jpg)
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
![Page 19: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/19.jpg)
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
![Page 20: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/20.jpg)
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*)>
![Page 21: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/21.jpg)
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>
![Page 22: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/22.jpg)
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>
![Page 23: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/23.jpg)
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>
![Page 24: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/24.jpg)
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
![Page 25: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/25.jpg)
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
![Page 26: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/26.jpg)
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
![Page 27: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/27.jpg)
Ing. Javier Alexander Hurtado
Ejemplo (Variables)
![Page 28: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/28.jpg)
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
![Page 29: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/29.jpg)
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); }
} }
![Page 30: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/30.jpg)
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>
![Page 31: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/31.jpg)
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>
![Page 32: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/32.jpg)
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());}
![Page 33: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/33.jpg)
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
![Page 34: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/34.jpg)
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
![Page 35: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/35.jpg)
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
![Page 36: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/36.jpg)
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
![Page 37: SIP Servlet 1.x (JSR 116/289)](https://reader035.fdocumento.com/reader035/viewer/2022081502/56813f92550346895daa836d/html5/thumbnails/37.jpg)
Ing. Javier Alexander Hurtado
¿Preguntas?
¡Gracias por su atención!¡Gracias por su atenció[email protected]@unicauca.edu.co