Evolution du domaine des télécommunications • Au niveau architecture Création de Services Télécoms avec JAIN – Concept de Next Generation Network (NGN) • Intégration des réseaux : Packets, Circuits, Sans-fil • Séparation des couches réseaux, signalisation et services • Au niveau des services – Services innovants: multimédia, multi-parties, ... – Intégration avec les technologies de l’information Gilles Vanwormhoudt • Convergence IT/Telecom – Elargissement des fournisseurs de service • Network Provider <> Service Developer <> Service Provider – Développement rapide, à cout réduit, similaire au développement dans d’autres domaines => orientation composants => Besoin d’API ouverts et standards => JAIN, Parlay 1 Java API for Integrated Networks1 2 Des systèmes fermés aux environnements ouverts • JAIN est un ensemble d’API Java pour le développement rapide de produits/services de télécoms de la prochaine génération (25 API spécifiés par plus de 80 companies) • Objectifs Circuit-Switched P R O P R I E T A R Y – Portabilité des services (Write Once, Run anywhere) – Abstraction des réseaux pour les applications: (Any network) • réseaux paquets (IP), réseaux circuits (PSTN) et réseaux sans fils – Accès réseau sécurisé : ouverture controlée et sécurisée des capacités du réseaux aux applications Java (By anynone) Services & Applications Open Call Control & Switching – Faire évoluer le domaine des télécommunications qui repose sur une architecture de boites matérielles et logicielles propriétaires vers une architecture ouverte où les services peuvent être rapidement créés et déployés, peu importe la plateforme et le réseau 3 •L'equipement réseau est un environnment clos Open APIs Protocols APIs Transport Hardware ! ! ! •Coûts importants pour les nouvelles applications ! •Coûts importants pour les opérateurs multi-réseaux Applications Softswitch Call Control Transport Hardware •Les applications sont liées aux équipements réseaux • Vision de JAIN Soft-Switched Services, Applications & Features (Management, Provisioning and Back Office) Permet de créer des applications portables à travers les différents réseaux et protocoles Offre un environnement ouvert et standard Permet de réduire les coûts de développement et le temps de mise sur le marché grâce aux standards Permet une utilisation et un dévelopement dans un environnement multi-vendeurs, multi4 marques La communauté JAIN Architecture de JAIN 5 Couches d’abstraction JAIN Couche service Couche signalisation Couche réseau Telecomm. Wireless IP Service Control Point (SCP) Base station controller, Home Location Register,... Serveur d’applications Internet 6 Vue d’ensemble Signaling Service Mobile Switching Proxy, Redirect, Point (SSP) Center (MSC) H323 Gatekeeper, ... Réseau intelligent, SS7, ISUP, TCAP SS7 avec applications mobiles (MAP) SIP,MGCP, Megaco, H323 7 8 Principaux composants Principaux composants • SCE (Service Creation Environment) • JCC (Java Call Control)/JCAT (Java Coordination & Transaction) – Outils pour la création, configuration, test d’applications/services de télécoms à base de composants – Déploiement dans les infrastructures SLEE – Objectif: conception rapide de nouveaux services à un cout réduit – Fournit un modèle d’appel générique permettant de créer, gérer, manipuler, terminer des appels pour des réseaux PSTN, paquets et sans fils => Abstractions des réseaux/protocoles de signalisation – Supporte l’exécution des applications durant les appels ce qui permet d’appeler des services intelligents. • SLEE (Service Logic Execution Environment) – Infrastructure d’exécution standard fournissant des fonctionnalités générales pour les applications/services télécoms – Objectif : • Protocol APIs – Fournit des API permettant à une application développée en Java d’établir des communications avec les protocoles des réseaux PSTN, paquets et sans fils • Portabilité des services (Write-once, Run-anywhere, indépendance des fonctionnalités et des protocoles de signalisation) • Simplification du développment de nouveaux services (Concentration sur la logique métier) 9 10 Développement de nouveaux services Types de services • • • • • • • • • • • 11 Numérotation abrégée Réseau privé virtuel (plan de numérotage privée) Renvoi d’appel Répartition d’appel Facturation automatique sur compte tiers Rappel automatique Filtrage d’appels, Filtrage de sécurité Acheminement des appels Communication multi-parties Taxation à l’arrivée, Taxation partagée Kiosque, Services prépayés, Messagerie instantanée, ... 12 APIs JAIN1 APIs JAIN2 13 JAIN SCE : Service Creation Environment 14 Développement de nouveaux services • Environnement de développement pour des services fonctionnant dans SLEE • Permet de créer des services à partir de composants déjà créés et testés (SBB: Service Building Block) – Documents XML, Langage/Script de gestion d’appel (Call Processing Language,), Javabeans, Outils graphiques • Fournit aussi une gestion des services, vérification de leur compatibilité (version, dépendances) – Empaquetage sous une forme déployable – Test par simulation des différents services avant de les déployer. 15 16 SCE: Outil de création de services Service = Assemblage de composants • Définition du service en assemblant des composants réutilisables indépendantes de tout service (comparable au Service Independant Building Block du réseau intelligent) • Spécification du service – Points d’initiations -> Déclenchement des composants – Enchainement de composants intéragissant les uns avec les autres (script) • Types de composant – Authentification, Algorithme,Comparateur, Taxation, Limit, Log Call, Queue, Traduction, Verification, 17 JAIN SLEE : Service Logic Execution Environnement1 Composant SBB • • • • 18 • Environnement d’exécution générique des services / applications JAIN(Gateway,Switch,Proxy,SCP, SSP) • Rôle analogue aux serveurs d’applications d’entreprise (exemple conteneur EJB, conteneur Web) • Conçu et optimisé pour ce type de services/applications Composant logiciel écrit en Java Conçu pour les applications «!event driven!» Implémente la logique utile à un service Fonctionne sur réception d’évènements – Emission d’appel, connexion, déconnexion, – Gestion des évènements très efficace, invocation asynchrones, transactions légères, haute disponibilité … • Fournit des fonctionnalités communes – Transaction, persistence, régulation de charge, sécurité … • Facilite le déploiement dynamique de services, leur administration et leur maintenance • Fournit une interface JAIN Parlay pour les services à l’extérieur du réseau (untrusted services) 19 20 JAIN SLEE : Service Logic Execution Environnement2 JAIN SLEE : Service Logic Execution Environnement3 21 22 Activation des SBB JSLEE vs J2EE J2EE Aujourd'hui, les implémentations J2EE ne sont pas capables de fournir les performances requises pour un réseau de communication Les implémentations J2EE sont utilisées pour fournir de hautes performances dans des réseaux d'entreprise JSLEE Les implémentations JSLEE sont utilisées pour fournir de hautes performances dans les réseaux de communication 23 Aujourd'hui, les implémentations JSLEE ne sont pas capables de fournir les performances requises pour un réseau d'entreprises 24 Interconnexions JSLEE - J2EE JAIN JCC/JCAT API • JCC (Java Call Control) API – API pour le contrôle d’appel en Java • Création, observation, manipulation, traitement des appels – Basé sur un modèle d’appel générique supportant des sessions multi-médias, multi-parties et multi-protocoles • JCAT (Java Coordination and Transaction) API – API pour l’invocation des services/applications avant, durant et après les appels ainsi que pour le traitement des paramètres d’appels => Traitement / Contrôle d’appels • Intégration: périphérie et coeur du réseau (switches, call agent, end-office switches, ...) • Applications: first-party call, third party call, redirection d’appel, mise en attente, Click-to-Dial, Voice-Activated-Dialing, Conference, ... 25 Relations entre JCC, JCP, JTAPI 26 JAIN JCC/JCAT API JAIN space Java Call Processing (JCP) Java Call Control (JCC) JTAPI Core JTAPI Extensions Based on Parlay 2.1 MPCCS Java Coordination & Transactions (JCAT) Parlay Extensions CTI space 3rd Party space Mobility space 3GPP Extensions 27 28 Concepts de JCC/JCAT Concepts de JCC/JCAT 1 2 • Provider (JccProvider) – abstraction représentant le fournisseur de services. Ildissimule les aspects spécifiques au service du sous système et permet aux applications java d’interagir avec celui-ci est ce indépendamment du protocole et de l’implémentation utilisée. JCC/JCAT API • Call (JccCall) – représente un appel (voix, data ou multimédia), il représente aussi uneconnexion dynamique entre les entités physiques et logiques. • Address (JccAddress) – cet objet représente l’adresse logique d’un terminal (ex. n° de téléphone,adresse IP) • Connection (JccConnection) – cet objet représente la liaison dynamique entre l’objet Address et l’objetCall 29 JccProvider & JccCall JccConnection JccProvider JccConnection createCall() getState() addXXXListener() createEventFilter() answer() routeConnection() release() continueProcessing() getAddress() getCall() isBlocked() JccCall createConnection() connect() routeCall() release() 30 31 32 Contrôle des appels • La plate-forme qui implémente l’API peut informer les applications qu’un événement c’est produit (exemple, nouvel appel ) en utilisant les événements JAVA • Les applications doivent fournir des listeners correspondant aux événements qui les intéressent • Les objets peuvent générer des événements qui peuvent être interceptés par différents Listners. – ProviderEvent : changement d’état intervenu dans JcpProvider – CallEvent : changement d’état intervenu dans JcpCall – ConnectionEvent : changement intervenu dans JcpConnection • Les évènements sont transmis à leur listener respectif – Traitement applicatif => Recording, Blocking, Forwarding, .... 33 34 35 36 Gestion des évènements JAIN Protocol API • JAIN SS7 API – Fournit des API pour permettre à une application développée en Java (ex. SCP et SSP) d’accéder aux services fournis par SS7 – Protocoles supportés: TCAP, ISUP, MAP, INAP • JAIN IP API – Fournit des API pour permettre à une application développée en Java (ex: Media gateway, Call Agent, Proxy, Gateway controller) d’établir des communications avec différents protocoles IP – Protocoles supportés : H323, MGCP, SIP 37 38 Principes Architecturaux de JAIN Protocol API JAIN et SIP • JAIN-SIP Application – API de bas niveau basée sur le RFC 2543 Listener Stack Event • JAIN-SIP Lite JAIN Protocol Layer – API de haut niveau pour créér un agent SIP • JAIN-SIP Servlet – API pour programmer des servlets SIP Provider Protocol Stack 39 40 JAIN-SIP JAIN-SIP • Interface JAVA standard qui encapsule une pile de signalisation SIP • Spécification JSR - SUN • Historique: JSR Approval 1999, Final Aout • Spécification actuelle : 1.2 • Offre les abstractions du protocole SIP sousforme d’objets JAVA • Permet à une application/une servlet ou un bean d’embarquer un pile SIP et d’accéder à des fonctionnalités d’appel de bas niveau. • Simplifie la construction des entités SIP – Agents Utilisateurs, – Serveurs Proxy, Serveur de redirection • JAIN SIP peut être utilisé dans un agent utilisateur ou un proxy • Garantit la portabilité des applications entre pile JAIN-SIP via la définition des interfaces et le comportement à l’exécution (TCK test suite) 41 Architecture de JAIN-SIP SIPListeners Messages SIP Responsabilités de l’application SIPListeners Evénements Messages SIP SIPProvider Evénements SIPProvider SIPStack SIPStack Réseau Agent Client 42 • L’application doit utiliser l’interface du provider pour tous accès à la pile (pas d’accès directe aux couches sousjacentes) • L’application doit enregistrer auprès de la pile un ou plusieurs objets implantant l’interface SipListener • L’application est notifiée de l’arrivée de message SIP, elle est responsable des réponses • Pour une mode sans état, l’application est responsable du traitement de retransmission en cas de timeout lié à un message Agent Serveur 43 44 Responsabilités de la pile Vue interne de la Pile SIP • Offre des méthodes pour formater et envoyer des messages SIP • Analyse les messages SIP entrants et en construit un représentation sous forme objets que l’application peut accéder et modifier à travers des interfaces Java standardisés • Invoque les gestionnaires d’événements de l’application quand un événement intéressant se produit • Fournit le support des transactions • Gère les transactions et les dialogues pour l’application 45 Paquetages JAIN-SIP 46 Abstractions JAIN-SIP1 • jain.protocol.ip.sip • jain.protocol.ip.sip.SipFactory: – SipStack, SipProvider, SipListener, ... – Fabrique pour construire l’objet implantant la Pile et les autres fabriques d’objets • jain.protocol.ip.sip.header: – Fabrique d’entêtes, interfaces pour chaque entête SIP supportée • jain.protocol.ip.sip.SipStack – Analyse les messages entrants et génère les évènements associés – Gère les transactions et génére des événements timeout associés – Les objets transactions ne sont pas directement accessibles par l’application • jain.protocol.ip.sip.message – Fabrique de messages : Message, Request, Response • jain.protocol.ip.sip.address – Fabrique d’adresses : Analyse et construction d’adresses URL 47 48 Abstractions JAIN-SIP2 Fabriques d’objets • jain.protocol.ip.sip.ListeningPoint SipFactory – Correspond à l’adresse de la pile (UDP/TCP) – C’est l’adresse IP et le port à partir desquels la pile recoit et envoie les messages – La pile peut être configurée pour un ou plusieurs Listeningpoint +getInstance +setPathName +createSipStack +createAddressFactory +createHeaderFactory crée MessageFactory SipProvider +addSipListener +getNewCallIdHeader +sendAck +sendRequest +sendResponse +createRequest SipStack crée +createSipProvider +getListeningPoints • jain.protocol.ip.sip.Provider * – Fournit des facilités pour le programme d’application (sendRequest, sendResponse, sendAck…) AddressFactory +createSipURL +createNameAddress 49 JAIN SIP Object Architecture HeaderFactory ListeningPoint +getHost +getPort +createFromHeader +createToHeader +createViaHeader +createContentTypeHeader +createCSeqHeader 50 Abstractions JAIN-SIP3 • jain.protocol.ip.sip.message.Message Fonction Initialisation createListener() Event Registration SIP Listener getInstance() createProvider() – Représente un message SIP – Interface pour extraire le type, les entêtes et le contenu du message – Interface pour construire un message SIP Factory • jain.protocol.ip.header.Header createStack() – Représente une entête d’un message SIP • Entête • Entête • Entête • Entête SIP SIP Provider Stack Pile SIP Propriétaire Pile SIP général : inclus dans requête ou réponse de requête de réponse d’entité : decrit le corps du message SIP Réseau 51 52 Messages SIP Message • Tout programme d’applications JAIN-SIP doit implanter l’interface jain.protocol.ip.sip.SipListener • Un programme peut être client et serveur (proxy) CallIdHeader +getCallIdHeader() +getBodyAsString() +getCallId() : String Request +getMethod() : String L’interface SipListener1 public interface SipListener extends java.util.EventListener { public void processResponse(SipEvent responseReceivedEvent); public void processRequest(SipEvent requestReceivedEvent); public void processTimeOut(SipEvent transactionTimeoutEvent); } Response +getStatusCode() : int MessageFactory +createRequest(uri, method, …) +createResponse(status, request,..) 53 L’interface SipListener2 <<interface>> SipListener +processRequest( :SipEvent ) +processResponse( :SipEvent ) Abonné +processEvent( :SipEvent ) MonApplicationSip +processRequest( :SipEvent ) +processResponse( :SipEvent ) +processEvent( :SipEvent ) • SipEvent représente une événement transmis à tous les listeners (accès identifiant transaction + message) 54 Séquence de messages SipProvider Notifie +addSipListener( :SipListener ) SipEvent +getTransactionId() : long +getMessage() : Message 55 56 Squelette d’applications JAIN-SIP1 Squelette d’applications JAIN-SIP2 1. Creation d’une instance de SIPFactory 3. Création des fabriques d’entête et de messages HeaderFactory headerFactory = sipFactory.createHeaderFactory(); AddressFactory addressFactory = sipFactory.createAddressFactory(); MessageFactory messageFactory = sipFactory.createMessageFactory(); sipFactory = SipFactory.getInstance(); sipFactory.setPathName("gov.nist"); 2. Creation d’une instance de pile SIP try { sipStack = sipFactory.createSipStack(); } catch(SipPeerUnavailableException e) { System.exit(-1); } catch(SipException e) { System.exit(-1); } 4 Création d’un provider associé à un port 57 Squelette d’applications JAIN-SIP3 58 Squelette d’applications JAIN-SIP3 5 Construction & envoi des messages 5.2 Construction du message 5.1 Construction des entêtes du message fromAddress = addressFactory.createSipURL("caller", sipProvider.getListeningPoint().getHost()); fromAddress.setPort(sipProvider.getListeningPoint().getPort()); fromNameAddress = addressFactory.createNameAddress ("Caller", fromAddress); fromHeader = headerFactory.createFromHeader(fromNameAddress); contentTypeHeader = headerFactory.createContentTypeHeader("application", "sdp"); ... Listening listeningPoint = sipStack.createListeningPoint(port,format); SipProvider sipProvider = sipStack.createSipProvider(listeningPoint); callIdHeader = sipProvider.getNewCallIdHeader(); cSeqHeader = headerFactory.createCSeqHeader(1,Request.INVITE); invite = messageFactory.createRequest(requestURI, Request.INVITE, callIdHeader,cSeqHeader, fromHeader, toHeader, viaHeaders); invite.setBody("b=32000", contentTypeHeader); 59 60 Squelette d’applications JAIN-SIP4 Squelette d’applications JAIN-SIP5 • Traitement des requêtes (serveur, proxy) 5.3 Envoi de messages transactionId = sipProvider.sendRequest(invite); // Le résultat d’une émission de requête est un identifiant de transaction. Une transaction est un échange de messages public void processRequest(SipEvent requestReceivedEvent) { Request request = (Request)requestReceivedEvent.getMessage(); long serverTransactionId = requestReceivedEvent.getTransactionId(); try { if (request.getMethod().equals(Request.INVITE)) processInvite(request,serverTransactionId); else if (request.getMethod().equals(Request.ACK)) ….. } catch (SipParseException ex) { ex.printStackTrace(); } } sipProvider.sendResponse( transactionId, Response.OK, strBody , « application!», «!sdp!»); // L’émission d’une réponse nécessite un identifiant de transaciton, le code statut de la réponse, le corps de la réponse, le type mime sipProvider.sendAck( clientTransactionId ); // L’emission d’un accusé de réception nécessite un identifiant 61 Squelette d’applications JAIN-SIP6 62 Transactions JAIN-SIP • Une transaction SIP est constitué (RFC 2543) • Traitement des réponses (client, proxy) – d’une seule requête – de zero, une ou plusieurs réponses provisionnelles – D’une ou plusieurs réponses finales public void processResponse(SipEvent responseReceivedEvent) { Response response = (Response)responseReceivedEvent.getMessage(); long clientTransactionId = responseReceivedEvent.getTransactionId(); try { String method = response.getCSeqHeader().getMethod(); int statusCode = response.getStatusCode(); if((statusCode == Response.OK) && (method.equals(Request.INVITE))) { sipProvider.sendAck(clientTransactionId); } else ... } catch(SipException e) { } } • Le protocole SIP fournit suffisamment d’éléments dans les messages SIP pour extraire l’identifiant de transaction • JAIN-SIP identifie les transactions par un entier long • Les transactions sont associés : – En émission avec toutes les méthodes sipProvider.sendXXX – En réception avec les évènements SipEvent des méthodes SipListener.processRequest(SipEvent) SipListener.processResponse(SipEvent) SipListener.processTimeout(SipEvent) 63 64 Exemple : Third Party Call Control Transactions Client/Serveur Server transaction Client transaction Server transaction Client transaction UAC Statefull proxy UAS 65 Conclusion 66 Références • Articles sur JAIN dans IEEE Communications Magazine • Programming Converged Network, John&Wiley • Site de référence sur JAIN http://java.sun.com/products/jain/ • Portail sur SIP http://www.sipcenter.org • JAIN SIP Specification: http://jcp.org/jsr/detail/032.jsp • NIST IP-Telephony Project page (NIST-SIP): http://is2.antd.nist.gov/proj/iptel • Une technologie d’avenir pour le développement de services de télécoms • Communauté de développeurs en pleine expansion ( Mobicents, Open Cloud, ...) • Succés d’implémentation chez de grands opérateurs (Vodafone, NTT DoCoMo, Telco, …) 67 68 Travaux pratiques (2) : Déploiement Travaux Pratiques (1) • Etablissement d’un circuit de transport voix sur IP • Déployer et tester l’architecture SIP – Négociation de débit, calcul de durée de la com – en mode direct (sans proxy) – en mode indirect (avec proxy) Proxy Sip p p Si Si Rtp UAC UAS Rtp UAC 69 UAS 70 Travaux pratiques (3) : Programmation • Voir afas.pdf pour Challenges et SLEE • Implanter la négociation de débit et le calcul de durée • Groupe 1 de binômes – => MiddleWare Telecom – développement de l’Agent Utilisateur Client • API vs Protocol • Définir Services de Telecom • Groupe 2 de binômes – développement de l’Agent Utilisateur Serveur • Implantation NIST de l’API Jain-SIP • Squelette de code JAVA à compléter • Wapiti - Module A45 - Travaux Pratiques 71 72 Des systèmes fermés aux environnements ouverts Circuit-Switched P R O P R I E T A R Y Services & Applications Call Control & Switching Transport Hardware • Solutions come from a single vendor that supplied everything in one proprietary box: software, hardware and applications • Customers are locked-in to their vendor—no room for innovation, expensive to implement and maintain Comparaison des conteneurs Soft-Switched Communications Invocations Services, Applications & Features (Management, Provisioning and Back Office) Open Applications •Events, messages, protocol triggers •Mapped to method invocations APIs Components Softswitch Call Control Open Protocols APIs Data Sources Transport Hardware • Solutions can come from multiple vendors, at all levels who supply open standards-based products • Customers are free to choose bestin-class products to build their network. Open standards enable innovation and reduce costs Mostly asynchronous Transactions Computation 73 Light-weight fine-grained objects Short transient lifetimes Enterprise Mostly synchronous invocations •Rapid creation, deletion Heavy weight data access objects Long persistent lifetimes Multiple data sources Database servers •location, context information •Provisioned data, cached from master copy •Definitive master copy Light-weight transactions Database transactions •For state replication demarcation •Faster completion and more frequent •Slower completion and less frequent Compute-intensive Database access intensive •Main input and output are resource invocations, messages, events Back-end systems 74