Création de Services Télécoms avec JAIN Evolution du

publicité
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
Téléchargement