380 likes | 536 Views
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
E N D
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 • 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
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.
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 AplicacionesSIP
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
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
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
Modelo básico SIP Servlet • 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
Enrutamiento de Servicios • Servlet enruta el request a uno o más destinos • Re-envía la respuesta al llamante
Servlet como UAS • Los Servlets pueden rechazar (filtrar) llamadas • Pueden aceptar y configurar flujos multimedia
SipServlet 1 ServletConfig SipServletAdapter Los SIP Servlets Servlets Clases Java extendiendo a javax.servlet.sip.SipServlet e implementa los métodos apropiados. Se empaqueta en un archivo SAR con su Deployment Descriptor.
Herramientas para el Servlet Abstracciones de Servidor Servidor SIP, Servlet engine, información de localización SipFactory ContactDatabase SipServletContext
Manejo de mensajes SIP Mensajes SIP Clases para manipulación de mensajes 1 SipMessage SipTransaction SipRequest SipResponse
Manejo de direcciones SIP Direccionamiento Manipulación de direcciones SIP (SIP-URIs) 1 SipAddress SipURL SipContact
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
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
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 unsoloRequest
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
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"> • <!ELEMENTsip-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*)>
Ejemplo: sip.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sip-app PUBLIC"-//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>
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>
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>
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
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
Ejemplo (Variables) • Un mensaje INVITE de ejemplo INVITEsip:watson@boston.bell-tel.com SIP/2.0 From: A. Bell <sip:a.g.bell@bell-tel.com>;tag=3pcc To: T. Watson <sip:watson@bell-tel.com> … • Algunas variables
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
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 { publicvoid doInvite(SipServletRequest req) throws ServletException, java.io.IOException { try { req.send(); } catch (IOException e) { thrownew ServletException("Could not send request", e); } } }
Ejemplo 1 (sip.xml) • Deployment Descriptor <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sip-app PUBLIC"-//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>
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>
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()); }
Productos comerciales • Ubiquity Software • Ubiquity SIP Application Server (Runtime y Development Tools) • MicroMethod Technologies • SIPMethod Application Server 1.0 Released – Marzo 2006
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
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
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
¿Preguntas? ¡Gracias por su atención! javhur@unicauca.edu.co