Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet...

35
JAINSLEE Comment déployer une plateforme JAIN SLEE. Mise en œ uvre d'une plate-forme implantant la spécification JAIN SLEE. Pierre Lancastre – Frédéric Anjubault | FA06 Option ILR 2006 – ENIC Telecom Lille 1

Transcript of Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet...

Page 1: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

JAINSLEE

Comment deacuteployer une plateforme JAIN SLEE

Mise en œuvre dune plate-forme implantant la speacutecification JAIN SLEE

Pierre Lancastre ndash Freacutedeacuteric Anjubault | FA06

Option ILR 2006 ndash ENIC Telecom Lille 1

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 2 -

Plan

Introduction 3

1 Deacuteploiement drsquoune plateforme JAIN SLEE 4

Deacuteploiement drsquoune plateforme Mobicents 4Remarques 4

Plugin Eclipse 5Deacuteploiement drsquoune plateforme Rhino 6

2 Exemple SIP 22

Mateacuteriel utiliseacute 22Explication de la proceacutedure de test 22

3 Service Wake Up Call 28

Deacuteploiement et utilisation 28Code source de lrsquoapplication 28Vue deacutetailleacutee du code 30

sbb-jarxml 30WakeUpSBBjava 30Remarques 33

Conclusion 34

Reacutefeacuterences et bibliographie 35

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 3 -

Introduction

JAIN SLEE est une application middleware orienteacutee eacutevegravenement eacutecrite en Java Satacircche principale est de reacutecupeacuterer des eacutevegravenements envoyeacutes par des ressourcesexteacuterieures au serveur JAIN SLEE et de les envoyer aux portions de codescorrespondantes JAIN SLEE est multi protocole multi plateforme et possegravede descaracteacuteristiques similaires aux EJB mais est plus adapteacute au monde desteacuteleacutecommunications avec un faible taux de latence un fonctionnement asynchrone etune capaciteacute agrave geacuterer de nombreuses requecirctes par seconde (plusieurs centaines ouplusieurs milliers) JAIN SLEE gegravere des modegraveles de composant (cycle de viedeacuteploiement persistance redondance hellip) et des composants lieacutes au framework(timers management agrave travers JMX profile trace hellip)

Les objectifs du projet eacutetaient de mettre en œuvre une plate-forme implantant laspeacutecification JAIN SLEE et de creacuteer un composant de traitement drsquoappel Le projetsrsquoest deacuterouleacute sur deux semaines la premiegravere semaine nous nous sommesfamiliariseacutes avec les plateformes de Rhino et Mobicents (deacuteploiement utilisation) Ladeuxiegraveme semaine nous avons deacuteployeacute de nombreux exemples et analyseacute etadapteacute le code Nous verrons dans une premiegravere partie comment nous avons reacuteussiagrave deacuteployer les plateformes ainsi que les difficulteacutes que nous avons rencontreacutees Lacreacuteation drsquoun composant nrsquoa pas eacuteteacute reacutealiseacutee mais nous avons compris et analyseacute lefonctionnement de JAIN SLEE agrave travers la mise en œuvre de plusieurs typesdrsquoutilisation nous allons preacutesenter dans ce rapport deux exemples simples endeuxiegraveme et troisiegraveme partie une plateforme JAIN SLEE utilisant le protocole SIP etnous terminerons par un deuxiegraveme exemple (Wake Up Call) explicitant les multiplesinteacuterecircts pour cette nouvelle technologie dans le monde des teacuteleacutecommunications

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 4 -

1 Deacuteploiement drsquoune plateforme JAIN SLEE

Deacuteploiement drsquoune plateforme Mobicents

Teacuteleacutechargement du serveur Mobicents Pour teacuteleacutecharger le serveur Mobicents il faut se rendre sur wwwmobicentsorg etteacuteleacutecharger la derniegravere version Mobicents Suite xyz ReleasedCe fichier zip contient un serveur JBoss et les RA neacutecessaire au deacuteploiementdrsquoapplicationsUne fois le fichier zip teacuteleacutechargeacute il faut le deacutecompresser dans un nouveau reacutepertoire(faire attention agrave ce que le chemin ne contienne pas drsquoespace)Pour deacutemarrer le serveur il faut aller au reacutepertoire racine du serveur et lancer lacommande binrun ndashc all ndashb lt 127001 ou lrsquoadresse ip la machine gtPour tester lrsquointerface web du serveur Mobicents il faut taper dans son navigateurweb httplocalhost8080jmx-console

Remarques

Nous avons deacuteployeacute ce serveur sur une station Windows 2000 Pro avec quelquesdifficulteacutes au deacutebut car tout nrsquoest pas forceacutement expliciteacute dans les explications (il fautinstaller ant mettre en place les variables drsquoenvironnement pour JBOSS hellip) Lestutoriaux drsquoinstallations ne sont pas intuitifs et srsquoadressent agrave un public averti Il nousdonc a fallu un temps drsquoadaptation pour comprendre comment cette technologiefonctionne Un point positif pour Mobicents est qursquoil existe un fichier pour ledeacuteploiement du serveur de type laquo tout en un raquo Par contre lrsquointerface Web desupervision reste austegravere et difficile agrave comprendre Drsquoailleurs nous lrsquoavons que tregravespeu utiliseacute En fait il y a deux possibiliteacutes de deacuteploiement agrave partir de lrsquointerface Webou en ligne de commande Nous avons choisi cette seconde option pour configureret mettre en place les services Malgreacute tout les nombreux exemples en open sourcepreacutesent sur le site de Mobicents nous ont permis de reacutealiser toute la porteacutee de cettenouvelle technologie

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 5 -

Plugin Eclipse

Il existe un plugin Eclipse que nous avons utiliseacute durant le projet pour deacuteployer lesapplications

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 6 -

Deacuteploiement drsquoune plateforme Rhino

Preacute requis drsquoinstallation dans le cas de la mise en place drsquoun Proxy SIP sur uneplateforme JSLEE

- Serveur fonctionnant sous Linux (release UBUNTU pour nos tests)- Le service SQL laquo POSTGRE raquo- Le service DNS laquo Bind raquo- Le serveur JSLEE laquo Rhino OpenCloudraquo- Lrsquouniteacute de deacuteploiement SIP fourni avec Rhino

a) Installation de PostGre

1 Teacuteleacutecharger le package disponible sur le site httpwwwpostgresqlorg2 Deacutecompresser lrsquoarchive dans un reacutepertoire appartenant agrave lrsquoutilisateur3 Exeacutecuter les commandes ci-dessous

configure lance le script de generation de fichiers drsquoinstallationmake lance le make file pour creacuteer les scriptssumake install installe le packagemkdir usrlocalpgsqldata on creacutee un dossier ougrave sera contenu la BDchown ltuser_en_coursgt usrlocalpgsqldata on attribut le dossier agravelrsquoutilisateur en courssu - ltuser_en_coursgtusrlocalpgsqlbininitdb -D usrlocalpgsqldata on initialise leconteneur de BDusrlocalpgsqlbinpostmaster -D usrlocalpgsqldata gtlogfile 2gtamp1 amp on creacutee un fichier de log pour contenir les logs renvoyeacutes par le serviceusrlocalpgsqlbincreatedb test on creacutee une base de donneacutee ldquotestrdquousrlocalpgsqlbinpsql test pour tester le service PGSQL

b) Personnalisation de Bind

1 Installer le service DNS laquo Bind9 raquo

2 Configurer le serveur DNS

21 Les fichiers de configuration

Les fichiers de configuration de Bind se trouvent dans le reacutepertoireetcbind On y trouve notamment le fichier dbroot qui contient lesadresses IP des serveurs DNS racines (ie les serveurs centraux dusystegraveme DNS de lrsquoENIC) et le fichier namedconf qui est le fichier deconfiguration principal de Bind

Le reacutepertoire varcachebind est destineacute agrave accueillir les fichiers dezone pour ceux (ici sleeorgzone) qui veulent configurer un serveurDNS primaire ou secondaire

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 7 -

22 Configurer le serveur DNS primaire laquoindeacutependant raquo

Par deacutefaut Bind est configureacute en tant que serveur DNS indeacutependantqui nest primaire ou secondaire pour aucun domaine Quel est linteacuterecirctdun tel serveur Faire office de cache DNS En effet le serveur DNSva retenir dans son cache les correspondances IP-DNS demandeacutees parles clients et ne sera pas obligeacute daller chercher agrave chaque fois aupregravesdes autres serveurs DNS la reacuteponse aux requecirctesPar exemple si vous trouvez que le serveur DNS de votre fournisseurdaccegraves est trop long agrave reacutepondre vous aurez inteacuterecirct agrave installer unserveur DNS sur votre ordinateur et configurer votre systegraveme pour quilinterroge en prioriteacute le serveur local Pour optimiser les temps derequecirctes configurez le serveur DNS pour quil demande lesenregistrements quil na pas dans son cache aux serveurs DNS devotre fournisseur daccegraves au lieu daller les demander lui-mecircme aupregravesdes autres serveurs DNSPour cela eacuteditez le fichier namedconf et deacutecommentez les lignes de lasous-section forwarders de la section options en y inscrivant lesadresses IPs des serveurs DNS de votre fournisseur daccegraves Le deacutebutdu fichier namedconf ressemble alors agrave cela

options directory varcachebind

forwarders 19348251101934825111

auth-nxdomain no

ougrave 1934825110 et 1934825111 sont les adresses IPs des serveursDNS de lrsquoENICEnfin modifiez le fichier etcresolvconf et mettez votre serveur enpremiegravere position dans la liste des serveurs DNS

search enicfrnameserver ltIP_de_la_machinegtnameserver 1934825110nameserver 1934825111

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 8 -

23 Configurer le serveur DNS pour creacuteer la zone laquo sleeorg raquo

231 Modifier le fichier laquo namedconf raquo

Ajoutez agrave la fin du fichier namedconf les lignes suivantes

zone sleeorg

type master

file sleeorgzone

ougrave

sleeeorg est le nom de domaine pour lequel votre serveur sera primaire

sleeorgzone deacutesigne le fichier varcachebindsleeorgzone ougrave seront stockeacutes lesenregistrements de la zone

232 Ecriture du fichier de zone

Le fichier de configuration de la zone se preacutesente comme ci-dessous

varcachebindmondomaineorgzone Fichier de zone type pour le domaine sleeorg Tireacute de la formation Debian GNULinux par Alexis de Lattre httpwwwviaecpfr~alexisformation-linux

Utiliser la commande named-checkzone mondomaineorg varcachebindsleeorgzone pour veacuterifier la validiteacute du fichier de zone

Utiliser la commande named-checkconf pour verifier la validite du fichier de configuration etcbindnamedconf

ATTENTION ne pas oublier de mettre a jour le serial a chaque modification des enresgitrements de ce fichier

ATTENTION dans les fichiers de zone les noms DNS complets doivent se terminer par des points (par exemple mastermondomaineorg)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 9 -

Tous les noms DNS qui ne sont pas complets (ie qui ne se terminent pas par un point) se terminent implicitement par mondomaineorg

TTL (Time To Live) par dfaut Le TTL permet de dire aux serveurs DNS tiers quils ne devront pas garder les enregistrements de notre zone en cache au dela de cette dure On met une journe (86400 secondes)$TTL 86400

ENREGISTREMENT SOA (Start Of a zone of Authority)

Cet enregistrement donne le nom du serveur DNS primaire et ladresse mail a laquelle on peut joindre ladministrateur du domaine Par exemple le serveur DNS primaire sappellera ns0 et ladresse mail de ladministrateur sera ltrootns0sleeorggt IN SOA ns0sleeorg rootdnssleeorg (

Serial (ou Numero de serie) de la zone Il permet aux serveurs secondaires de savoir sils ont besoin de se mettre jour en faisant un transfert de zone avec le serveur primaire ou non en comparant leurs serial pour cette zone Par convention il est constitue de la date du jour au format AAAAMMJJ suivi du nombre de modifications deja effectuees sur le fichier de zone dans la journee + 1 Par exemple nous sommes le 1er mai 2003 et cest la deuxieme fois que je modifie le fichier de zone aujourdhui

2006060505

Refresh Intervalle de temps en secondes pendant lequel les serveurs DNS secondaires attendent avant de verifier (et eventuellement de mettre a jour) lenregistrement SOA du serveur DNS primaire On met un 1 journee (86400 secondes)

86400

Retry Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de reessayer une requete vers le serveur DNS primaire si ce dernier nest pas accessible On met 5 minutes (300 secondes)

300

Expire Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de rejeter les informations de zones sils nont pas pu contacter le serveur DNS primaire On met 1 mois (2592000 secondes)

2592000

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 10 -

TTL (Time To Live) minimum Duree minimum du TTL dun enregistrement DNS de la zone On met 1 journee (86400 secondes)

86400)

ENREGISTREMENTS NS

Ces enregistrements donnent les noms DNS des serveurs primaires et secondairessleeorg IN NS ns0sleeorg IN NS ns0

ENREGISTREMENTS A

Les enregistrements A donnent les correspondances DNS lt-gt IP classiques

Pour quune requete DNS ns0sleeorg renvoie 17227131230 qui est lrsquoIP denotre serveur de testns0 IN A 17227131230

ENREGISTREMENTS CNAME

Le champ CNAME est utilise pour faire des alias DNS cest-a-dire avoir une IP qui repond a plusieurs noms DNS

Par exemple pour quune requete DNS wwwsleeorg renvoie aussi lIP du serveur de test

www IN CNAME ns0mailhost IN CNAME ns0

ENREGISTREMENTS MX

Le champ MX est utilise pour les envois de mail Quand un serveur de mail doit envoyer un mail a ladresse ltalexissleeorggt il fait une requete DNS de type MX sur sleeorg Il obtient en retour une liste dadresses IP classees avec des priorites Il essaye alors denvoyer le mail au serveur principale sil est injoignable au serveur secondaire etc

Pour les adresses sleeorg le serveur principal est ns0sleeorg IN MX 10 ns0

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 11 -

ATTENTION on ne met pas de MX sur un CNAME mais uniquement sur un A

Si on veut inclure un autre fichier de ce fichier $INCLUDE nom_de_lautre_fichier

233 Veacuterifications et relance

Veacuterifiez que vous navez pas fait derreur de syntaxe dans le fichier namedconf

named-checkconf

Si la commande naffiche rien cest que le fichier namedconf est valide Ensuiteveacuterifiez la syntaxe du fichier de zone

named-checkzone sleeorg varcachebindsleeorgzone

zone sleeorgIN loaded serial 2006060505

OK

Si la commande naffiche aucun message derreur alors il ny a pas derreur desyntaxe dans le fichier de zone Vous pouvez alors dire agrave Bind de relire son fichier deconfiguration

etcinitdbind9 reload

Attention si vous faites un restart au lieu dun reload le cache de votre serveurDNS se videra

c) Installation du serveur Rhino

Utilitaires annexes requis

La variable drsquoenvironnement JAVA_HOME doit ecirctre pointeacutee sur le reacutepertoire racine duJava SDKPour veacuterifier entrez les commandes ci-dessous

$ which javausrlocaljavabinjava$ java -versionjava version 150_05Java(TM) 2 Runtime Environment Standard Edition (build 150_05-b05)Java HotSpot(TM) Client VM (build 150_05-b05 mixed mode sharing)$ export JAVA_HOME=usrlocaljava$ PATH=$JAVA_HOMEbin$PATH_

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 12 -

Apache Ant 162 doit ecirctre installeacute La variable drsquoenvironnement ANT_HOME doit ecirctrepointeacutee sur le reacutepertoire racine drsquoApache Ant Pour veacuterifier entrez les commandes ci-dessous

$ which antusrlocalantbinant$ ant -versionApache Ant version 162 compiled on July 16 2004$ export ANT_HOME=usrlocalant$ PATH=$ANT_HOMEbin$PATH

La commande unzip

$ which unzipusrbinunzip

Lrsquoutilitaire TAR

$ which tarbintar

Lrsquoutilitaire awk

$ which awkbinawk

Lrsquoutilitaire ldquosedrdquo

$ which sedbinsed

Installation du package RhinoSLEE

Le SDK Rhino SLEE est livreacute sous forme drsquoarchive compresseacutee tar RhinoSDK-142tar On la deacutecompresse gracircce aux commandes ci-dessous

$ tar xvf RhinoSDK-142tar$ cd rhino-sdk-install

Ceci va creacuteer un reacutepertoire ldquorhino_sdk-install raquo contenant les fichiers drsquoinstallation Apartir de ce reacutepertoire lance le script drsquoinstallation laquo rhino-installshrdquoOn obtient le reacutesultat ci-dessous

$ rhino-installshOpen Cloud Rhino SDK InstallationThe Rhino SDK install requires access to a PostgreSQL database serverfor storing persistent configuration and deployment information Thedatabasesettings you enter here are required for the Rhino SDK config files Theinstall script can optionally configure the database for you you will beprompted for this later in the install processPostgres host [localhost]Postgres port [5432]Postgres user [user] entrer le username posseacutedant lrsquoacces a la base SQLPostgres password

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 13 -

Postgres password (again)

On deacutefinit ensuite le nom de la base de donneacutees qui sera creacutee pour contenir lestables necessaries pour le fonctionnement de rhino Ensuite si tous les preacuterequis onteacuteteacute respecteacutes (JAVA_HOME etc) lrsquoinstalleur devrait renseigner automatiquement lesparamegravetres demandeacutes

Database name [rhino]Enter the directory where you want to install the Rhino SDKThese two ports are used for accessing the Management MBeans from a JavaRMI(Remote Method Invocation) client such as the Rhino SDK command-lineutilitiesManagement Interface RMI Registry Port [1199]Management Interface RMI Object Port [1200]This port is used for accessing the JMX Remote server The Rhino WebConsoleuses this for remote managementManagement Interface JMX Remote Service Port [1202]This port is used for the Web Console (Jetty) server and providesremote management user interface This is a secure port (TLS)Secure Web Console HTTPS Port [8443]Enter the location of your Java J2SEJDK installationThis must be at least version 142JAVA_HOME directory [usrlocaljava]Found Java version 142_04The Java heap size is an argument passed to the JVM to specify the amountofmain memory (in megabytes) which should be allocated for running theRhino SDK To prevent extensive disk swapping this should be set to lessthan the total memory available at runtimeJava heap size [512] Network Configuration The Rhino SDK install will now attempt to determine local networksettings The hostname detected here is used by the web console The IPaddresses detected here are used in generating the default securitypolicy for the management interfacesThe following network settings were detected These can be modified afterinstallation by editing homeuserrhinoconfigconfig_variablesCanonical hostname cycloneLocal IP Addresses 192168622 127001 192168022The Rhino SDK installation needs to use the PostgreSQL interactiveclient psql Enter the full path to your local psql client here If you donot have a psql client installed (eg if postgres is running on a remotehostand not installed on this one) then enter - here to skip this questionYou will still need to initialise the database on the remote host usinginit-management-dbshLocation of psql client [usrbinpsql]

Confirm Settings Installation directory homeuserrhinoPostgres host localhostPostgres port 5432Postgres user userDatabase name rhinoJAVA_HOME directory usrlocaljavaManagement Interface RMIJMX Ports 119912001202

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 14 -

Web Console Interface HTTPS Port 8443Are these settings correct (yn) yCreating installation directoryThe installer has detected you are running a 142 JVM This version ofSunsJVM has a bug related to incorrect compilation of a particular list methodSee homeuserrhinoconfighotspot_compiler_fix for more informationWriting configuration to homeuserrhinoconfigconfig_variablesI will now generate the keystores used for secure transport authenticationRemote management and connections must be verified using paired keyshomeuserrhinorhino-publickeystorewith a storepass of changeit and a shared keypass of changeithomeuserrhinorhino-privatekeystorewith a storepass of changeit and a shared keypass of changeitThe behaviour of the Rhino SDK paired key SSL can be configured by editinghomeuserrhinoconfigrmisslservice_namepropertiesCreating key pairs for common servicesExporting the certificates into the public keystore for servicedistributionCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCopying the public keystore to the client distribution directoryThe Open Cloud Rhino SDK is now installed in homeuserrhinoNext Steps- Start the Rhino SDK SLEE by running homeuserrhinostart-rhinosh- Access the Rhino management console at httpscyclone8443- Login with username admin and password password- Deploy the example SIP services see the filehomeuserrhinoexamplessipREADME for more informationOpen Cloud Rhino SDK installation complete

Initialisation de la meacutemoire drsquoexeacutecution de Rhino

Rhino SLEE SDK utilise une base de donneacutees PostgreSQL pour contenir les statutsdes diffeacuterents composants SLEE Pour pouvoir lrsquoutiliser il nous faut initialiser cettebase comme ci-dessous

Attention lrsquoexeacutecution de ce script effacera tout possible base existante et donceffacera toutes les donneacutees continues preacuteceacutedemment

$ init-management-dbshCREATE DATABASEYou are now connected to database rhinoNOTICE CREATE TABLE PRIMARY KEY will create implicit index versioning_pkey for table versioningCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index keyspaces_pkey for table keyspacesCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index timestamps_pkey for table timestampsCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index registrations_pkey for table registrationsCREATE TABLECOMMENT

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 15 -

Deacutemarrage du serveur Rhino

On deacutemarre le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstart-rhinosh Durant le deacutemarrage de celui-ci les eacuteveacutenementssuivants se produisent

1 La JVM se lance2 Le SDK geacuteneacutere et lit sa configuration3 Le SDK initialise et synchronise sa meacutemoire avec le serveur SQL4 Le SDK initialise les laquo per-machine MLets raquo (Management Agents)5 Le SLEE entre en ldquoRUNNING staterdquo6 Le SDK Rhino SLEE SDK est precirct agrave recevoir des commandes drsquoadministration

Arrecirct du serveur Rhino

On arrecircte le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstop-rhinoshOn obtient la sortie suivante

gtstop-rhinosh --niceSLEE shutdown initiated

SLEE stop completed shutdown phase initiatedSLEE shutdown successfully

Interface de management

Un composant SLEE peut ecirctre configure ou manageacute au biais de la console en lignede commande ou de lrsquointerface Web

On deacutemarre la console comme ci-dessous

$ cd $RHINO_HOME$ clientbinrhino-consoleInteractive Management Shell[Rhino (cmd (args) | help (command) | bye) 1] StateSLEE is in the Running state_

On accegravede agrave la console web en rentrant lrsquoadresse httpslthostnamegt8443 dansson browser webLrsquoutilisateur par deacutefaut est ldquoadminrdquo et le mdp ldquopasswordrdquo

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 16 -

Nous pouvons maintenant deacuteployer des services gracircce agrave ces consoles

d) Deacuteploiement du service SIP

Nous devons tout drsquoabord eacutediter le fichier de configuration suivant $RHINO_HOMEexamplessipsipproperties contains these properties

Pour la mise en place du service sur notre serveur de test nous devons tout drsquoabordchanger les parametres comme ci-dessous

Proxy SBB configuration Add names that the proxy host is known by The first name in the list will be treated as the Proxys canonical hostname and will be used in Via and Record-Route headers inserted by the proxyPROXY_HOSTNAMES=ns0sleeorg 127001 On rentre le DNS de notre serveur de test en tant que proxy Add domains that the proxy is authoritative forPROXY_DOMAINS=ns0sleeorgsleeorg On rentre le nom du domaine drsquoapplication de notre plateforme de testpour lesquels le proxy sera actifPROXY_LOOP_DETECTION=falseOn deacutesactive la deacutetection de boucle SIP du fait que le serveur fait agrave lafois DNS et JSLEE server En effet dans les deacutefinitions de la RFC 3261un proxy ne peut pas envoyer une reacuteponse agrave lui-mecircme ( dans notreplateforme de test les utilisateur srsquoauthentifient en userns0sleeorgLes messages qui sont envoyeacutes au proxy sont tout d abord redirigeacutes vers leserveur lui-mecircme (agrave cause du ns0sleeorg) puis transfeacutereacutes au receveur sicelui-ci se trouve dans la table de routage du proxy

Geacuteneacuteration et deacuteploiement des services

Pour creacuteer les uniteacutes de deacuteploiement des services Registrar Proxy et Locationlancez ldquoAntrdquo avec pour cible laquo build raquo comme ci-dessous

userhost~rhinoexamplessip$ ant buildBuildfile buildxmlinit[mkdir] Created dir homeuserrhinoexamplessipjarssipjars[mkdir] Created dir homeuserrhinoexamplessipjarssipclasses

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 2: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 2 -

Plan

Introduction 3

1 Deacuteploiement drsquoune plateforme JAIN SLEE 4

Deacuteploiement drsquoune plateforme Mobicents 4Remarques 4

Plugin Eclipse 5Deacuteploiement drsquoune plateforme Rhino 6

2 Exemple SIP 22

Mateacuteriel utiliseacute 22Explication de la proceacutedure de test 22

3 Service Wake Up Call 28

Deacuteploiement et utilisation 28Code source de lrsquoapplication 28Vue deacutetailleacutee du code 30

sbb-jarxml 30WakeUpSBBjava 30Remarques 33

Conclusion 34

Reacutefeacuterences et bibliographie 35

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 3 -

Introduction

JAIN SLEE est une application middleware orienteacutee eacutevegravenement eacutecrite en Java Satacircche principale est de reacutecupeacuterer des eacutevegravenements envoyeacutes par des ressourcesexteacuterieures au serveur JAIN SLEE et de les envoyer aux portions de codescorrespondantes JAIN SLEE est multi protocole multi plateforme et possegravede descaracteacuteristiques similaires aux EJB mais est plus adapteacute au monde desteacuteleacutecommunications avec un faible taux de latence un fonctionnement asynchrone etune capaciteacute agrave geacuterer de nombreuses requecirctes par seconde (plusieurs centaines ouplusieurs milliers) JAIN SLEE gegravere des modegraveles de composant (cycle de viedeacuteploiement persistance redondance hellip) et des composants lieacutes au framework(timers management agrave travers JMX profile trace hellip)

Les objectifs du projet eacutetaient de mettre en œuvre une plate-forme implantant laspeacutecification JAIN SLEE et de creacuteer un composant de traitement drsquoappel Le projetsrsquoest deacuterouleacute sur deux semaines la premiegravere semaine nous nous sommesfamiliariseacutes avec les plateformes de Rhino et Mobicents (deacuteploiement utilisation) Ladeuxiegraveme semaine nous avons deacuteployeacute de nombreux exemples et analyseacute etadapteacute le code Nous verrons dans une premiegravere partie comment nous avons reacuteussiagrave deacuteployer les plateformes ainsi que les difficulteacutes que nous avons rencontreacutees Lacreacuteation drsquoun composant nrsquoa pas eacuteteacute reacutealiseacutee mais nous avons compris et analyseacute lefonctionnement de JAIN SLEE agrave travers la mise en œuvre de plusieurs typesdrsquoutilisation nous allons preacutesenter dans ce rapport deux exemples simples endeuxiegraveme et troisiegraveme partie une plateforme JAIN SLEE utilisant le protocole SIP etnous terminerons par un deuxiegraveme exemple (Wake Up Call) explicitant les multiplesinteacuterecircts pour cette nouvelle technologie dans le monde des teacuteleacutecommunications

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 4 -

1 Deacuteploiement drsquoune plateforme JAIN SLEE

Deacuteploiement drsquoune plateforme Mobicents

Teacuteleacutechargement du serveur Mobicents Pour teacuteleacutecharger le serveur Mobicents il faut se rendre sur wwwmobicentsorg etteacuteleacutecharger la derniegravere version Mobicents Suite xyz ReleasedCe fichier zip contient un serveur JBoss et les RA neacutecessaire au deacuteploiementdrsquoapplicationsUne fois le fichier zip teacuteleacutechargeacute il faut le deacutecompresser dans un nouveau reacutepertoire(faire attention agrave ce que le chemin ne contienne pas drsquoespace)Pour deacutemarrer le serveur il faut aller au reacutepertoire racine du serveur et lancer lacommande binrun ndashc all ndashb lt 127001 ou lrsquoadresse ip la machine gtPour tester lrsquointerface web du serveur Mobicents il faut taper dans son navigateurweb httplocalhost8080jmx-console

Remarques

Nous avons deacuteployeacute ce serveur sur une station Windows 2000 Pro avec quelquesdifficulteacutes au deacutebut car tout nrsquoest pas forceacutement expliciteacute dans les explications (il fautinstaller ant mettre en place les variables drsquoenvironnement pour JBOSS hellip) Lestutoriaux drsquoinstallations ne sont pas intuitifs et srsquoadressent agrave un public averti Il nousdonc a fallu un temps drsquoadaptation pour comprendre comment cette technologiefonctionne Un point positif pour Mobicents est qursquoil existe un fichier pour ledeacuteploiement du serveur de type laquo tout en un raquo Par contre lrsquointerface Web desupervision reste austegravere et difficile agrave comprendre Drsquoailleurs nous lrsquoavons que tregravespeu utiliseacute En fait il y a deux possibiliteacutes de deacuteploiement agrave partir de lrsquointerface Webou en ligne de commande Nous avons choisi cette seconde option pour configureret mettre en place les services Malgreacute tout les nombreux exemples en open sourcepreacutesent sur le site de Mobicents nous ont permis de reacutealiser toute la porteacutee de cettenouvelle technologie

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 5 -

Plugin Eclipse

Il existe un plugin Eclipse que nous avons utiliseacute durant le projet pour deacuteployer lesapplications

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 6 -

Deacuteploiement drsquoune plateforme Rhino

Preacute requis drsquoinstallation dans le cas de la mise en place drsquoun Proxy SIP sur uneplateforme JSLEE

- Serveur fonctionnant sous Linux (release UBUNTU pour nos tests)- Le service SQL laquo POSTGRE raquo- Le service DNS laquo Bind raquo- Le serveur JSLEE laquo Rhino OpenCloudraquo- Lrsquouniteacute de deacuteploiement SIP fourni avec Rhino

a) Installation de PostGre

1 Teacuteleacutecharger le package disponible sur le site httpwwwpostgresqlorg2 Deacutecompresser lrsquoarchive dans un reacutepertoire appartenant agrave lrsquoutilisateur3 Exeacutecuter les commandes ci-dessous

configure lance le script de generation de fichiers drsquoinstallationmake lance le make file pour creacuteer les scriptssumake install installe le packagemkdir usrlocalpgsqldata on creacutee un dossier ougrave sera contenu la BDchown ltuser_en_coursgt usrlocalpgsqldata on attribut le dossier agravelrsquoutilisateur en courssu - ltuser_en_coursgtusrlocalpgsqlbininitdb -D usrlocalpgsqldata on initialise leconteneur de BDusrlocalpgsqlbinpostmaster -D usrlocalpgsqldata gtlogfile 2gtamp1 amp on creacutee un fichier de log pour contenir les logs renvoyeacutes par le serviceusrlocalpgsqlbincreatedb test on creacutee une base de donneacutee ldquotestrdquousrlocalpgsqlbinpsql test pour tester le service PGSQL

b) Personnalisation de Bind

1 Installer le service DNS laquo Bind9 raquo

2 Configurer le serveur DNS

21 Les fichiers de configuration

Les fichiers de configuration de Bind se trouvent dans le reacutepertoireetcbind On y trouve notamment le fichier dbroot qui contient lesadresses IP des serveurs DNS racines (ie les serveurs centraux dusystegraveme DNS de lrsquoENIC) et le fichier namedconf qui est le fichier deconfiguration principal de Bind

Le reacutepertoire varcachebind est destineacute agrave accueillir les fichiers dezone pour ceux (ici sleeorgzone) qui veulent configurer un serveurDNS primaire ou secondaire

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 7 -

22 Configurer le serveur DNS primaire laquoindeacutependant raquo

Par deacutefaut Bind est configureacute en tant que serveur DNS indeacutependantqui nest primaire ou secondaire pour aucun domaine Quel est linteacuterecirctdun tel serveur Faire office de cache DNS En effet le serveur DNSva retenir dans son cache les correspondances IP-DNS demandeacutees parles clients et ne sera pas obligeacute daller chercher agrave chaque fois aupregravesdes autres serveurs DNS la reacuteponse aux requecirctesPar exemple si vous trouvez que le serveur DNS de votre fournisseurdaccegraves est trop long agrave reacutepondre vous aurez inteacuterecirct agrave installer unserveur DNS sur votre ordinateur et configurer votre systegraveme pour quilinterroge en prioriteacute le serveur local Pour optimiser les temps derequecirctes configurez le serveur DNS pour quil demande lesenregistrements quil na pas dans son cache aux serveurs DNS devotre fournisseur daccegraves au lieu daller les demander lui-mecircme aupregravesdes autres serveurs DNSPour cela eacuteditez le fichier namedconf et deacutecommentez les lignes de lasous-section forwarders de la section options en y inscrivant lesadresses IPs des serveurs DNS de votre fournisseur daccegraves Le deacutebutdu fichier namedconf ressemble alors agrave cela

options directory varcachebind

forwarders 19348251101934825111

auth-nxdomain no

ougrave 1934825110 et 1934825111 sont les adresses IPs des serveursDNS de lrsquoENICEnfin modifiez le fichier etcresolvconf et mettez votre serveur enpremiegravere position dans la liste des serveurs DNS

search enicfrnameserver ltIP_de_la_machinegtnameserver 1934825110nameserver 1934825111

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 8 -

23 Configurer le serveur DNS pour creacuteer la zone laquo sleeorg raquo

231 Modifier le fichier laquo namedconf raquo

Ajoutez agrave la fin du fichier namedconf les lignes suivantes

zone sleeorg

type master

file sleeorgzone

ougrave

sleeeorg est le nom de domaine pour lequel votre serveur sera primaire

sleeorgzone deacutesigne le fichier varcachebindsleeorgzone ougrave seront stockeacutes lesenregistrements de la zone

232 Ecriture du fichier de zone

Le fichier de configuration de la zone se preacutesente comme ci-dessous

varcachebindmondomaineorgzone Fichier de zone type pour le domaine sleeorg Tireacute de la formation Debian GNULinux par Alexis de Lattre httpwwwviaecpfr~alexisformation-linux

Utiliser la commande named-checkzone mondomaineorg varcachebindsleeorgzone pour veacuterifier la validiteacute du fichier de zone

Utiliser la commande named-checkconf pour verifier la validite du fichier de configuration etcbindnamedconf

ATTENTION ne pas oublier de mettre a jour le serial a chaque modification des enresgitrements de ce fichier

ATTENTION dans les fichiers de zone les noms DNS complets doivent se terminer par des points (par exemple mastermondomaineorg)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 9 -

Tous les noms DNS qui ne sont pas complets (ie qui ne se terminent pas par un point) se terminent implicitement par mondomaineorg

TTL (Time To Live) par dfaut Le TTL permet de dire aux serveurs DNS tiers quils ne devront pas garder les enregistrements de notre zone en cache au dela de cette dure On met une journe (86400 secondes)$TTL 86400

ENREGISTREMENT SOA (Start Of a zone of Authority)

Cet enregistrement donne le nom du serveur DNS primaire et ladresse mail a laquelle on peut joindre ladministrateur du domaine Par exemple le serveur DNS primaire sappellera ns0 et ladresse mail de ladministrateur sera ltrootns0sleeorggt IN SOA ns0sleeorg rootdnssleeorg (

Serial (ou Numero de serie) de la zone Il permet aux serveurs secondaires de savoir sils ont besoin de se mettre jour en faisant un transfert de zone avec le serveur primaire ou non en comparant leurs serial pour cette zone Par convention il est constitue de la date du jour au format AAAAMMJJ suivi du nombre de modifications deja effectuees sur le fichier de zone dans la journee + 1 Par exemple nous sommes le 1er mai 2003 et cest la deuxieme fois que je modifie le fichier de zone aujourdhui

2006060505

Refresh Intervalle de temps en secondes pendant lequel les serveurs DNS secondaires attendent avant de verifier (et eventuellement de mettre a jour) lenregistrement SOA du serveur DNS primaire On met un 1 journee (86400 secondes)

86400

Retry Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de reessayer une requete vers le serveur DNS primaire si ce dernier nest pas accessible On met 5 minutes (300 secondes)

300

Expire Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de rejeter les informations de zones sils nont pas pu contacter le serveur DNS primaire On met 1 mois (2592000 secondes)

2592000

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 10 -

TTL (Time To Live) minimum Duree minimum du TTL dun enregistrement DNS de la zone On met 1 journee (86400 secondes)

86400)

ENREGISTREMENTS NS

Ces enregistrements donnent les noms DNS des serveurs primaires et secondairessleeorg IN NS ns0sleeorg IN NS ns0

ENREGISTREMENTS A

Les enregistrements A donnent les correspondances DNS lt-gt IP classiques

Pour quune requete DNS ns0sleeorg renvoie 17227131230 qui est lrsquoIP denotre serveur de testns0 IN A 17227131230

ENREGISTREMENTS CNAME

Le champ CNAME est utilise pour faire des alias DNS cest-a-dire avoir une IP qui repond a plusieurs noms DNS

Par exemple pour quune requete DNS wwwsleeorg renvoie aussi lIP du serveur de test

www IN CNAME ns0mailhost IN CNAME ns0

ENREGISTREMENTS MX

Le champ MX est utilise pour les envois de mail Quand un serveur de mail doit envoyer un mail a ladresse ltalexissleeorggt il fait une requete DNS de type MX sur sleeorg Il obtient en retour une liste dadresses IP classees avec des priorites Il essaye alors denvoyer le mail au serveur principale sil est injoignable au serveur secondaire etc

Pour les adresses sleeorg le serveur principal est ns0sleeorg IN MX 10 ns0

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 11 -

ATTENTION on ne met pas de MX sur un CNAME mais uniquement sur un A

Si on veut inclure un autre fichier de ce fichier $INCLUDE nom_de_lautre_fichier

233 Veacuterifications et relance

Veacuterifiez que vous navez pas fait derreur de syntaxe dans le fichier namedconf

named-checkconf

Si la commande naffiche rien cest que le fichier namedconf est valide Ensuiteveacuterifiez la syntaxe du fichier de zone

named-checkzone sleeorg varcachebindsleeorgzone

zone sleeorgIN loaded serial 2006060505

OK

Si la commande naffiche aucun message derreur alors il ny a pas derreur desyntaxe dans le fichier de zone Vous pouvez alors dire agrave Bind de relire son fichier deconfiguration

etcinitdbind9 reload

Attention si vous faites un restart au lieu dun reload le cache de votre serveurDNS se videra

c) Installation du serveur Rhino

Utilitaires annexes requis

La variable drsquoenvironnement JAVA_HOME doit ecirctre pointeacutee sur le reacutepertoire racine duJava SDKPour veacuterifier entrez les commandes ci-dessous

$ which javausrlocaljavabinjava$ java -versionjava version 150_05Java(TM) 2 Runtime Environment Standard Edition (build 150_05-b05)Java HotSpot(TM) Client VM (build 150_05-b05 mixed mode sharing)$ export JAVA_HOME=usrlocaljava$ PATH=$JAVA_HOMEbin$PATH_

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 12 -

Apache Ant 162 doit ecirctre installeacute La variable drsquoenvironnement ANT_HOME doit ecirctrepointeacutee sur le reacutepertoire racine drsquoApache Ant Pour veacuterifier entrez les commandes ci-dessous

$ which antusrlocalantbinant$ ant -versionApache Ant version 162 compiled on July 16 2004$ export ANT_HOME=usrlocalant$ PATH=$ANT_HOMEbin$PATH

La commande unzip

$ which unzipusrbinunzip

Lrsquoutilitaire TAR

$ which tarbintar

Lrsquoutilitaire awk

$ which awkbinawk

Lrsquoutilitaire ldquosedrdquo

$ which sedbinsed

Installation du package RhinoSLEE

Le SDK Rhino SLEE est livreacute sous forme drsquoarchive compresseacutee tar RhinoSDK-142tar On la deacutecompresse gracircce aux commandes ci-dessous

$ tar xvf RhinoSDK-142tar$ cd rhino-sdk-install

Ceci va creacuteer un reacutepertoire ldquorhino_sdk-install raquo contenant les fichiers drsquoinstallation Apartir de ce reacutepertoire lance le script drsquoinstallation laquo rhino-installshrdquoOn obtient le reacutesultat ci-dessous

$ rhino-installshOpen Cloud Rhino SDK InstallationThe Rhino SDK install requires access to a PostgreSQL database serverfor storing persistent configuration and deployment information Thedatabasesettings you enter here are required for the Rhino SDK config files Theinstall script can optionally configure the database for you you will beprompted for this later in the install processPostgres host [localhost]Postgres port [5432]Postgres user [user] entrer le username posseacutedant lrsquoacces a la base SQLPostgres password

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 13 -

Postgres password (again)

On deacutefinit ensuite le nom de la base de donneacutees qui sera creacutee pour contenir lestables necessaries pour le fonctionnement de rhino Ensuite si tous les preacuterequis onteacuteteacute respecteacutes (JAVA_HOME etc) lrsquoinstalleur devrait renseigner automatiquement lesparamegravetres demandeacutes

Database name [rhino]Enter the directory where you want to install the Rhino SDKThese two ports are used for accessing the Management MBeans from a JavaRMI(Remote Method Invocation) client such as the Rhino SDK command-lineutilitiesManagement Interface RMI Registry Port [1199]Management Interface RMI Object Port [1200]This port is used for accessing the JMX Remote server The Rhino WebConsoleuses this for remote managementManagement Interface JMX Remote Service Port [1202]This port is used for the Web Console (Jetty) server and providesremote management user interface This is a secure port (TLS)Secure Web Console HTTPS Port [8443]Enter the location of your Java J2SEJDK installationThis must be at least version 142JAVA_HOME directory [usrlocaljava]Found Java version 142_04The Java heap size is an argument passed to the JVM to specify the amountofmain memory (in megabytes) which should be allocated for running theRhino SDK To prevent extensive disk swapping this should be set to lessthan the total memory available at runtimeJava heap size [512] Network Configuration The Rhino SDK install will now attempt to determine local networksettings The hostname detected here is used by the web console The IPaddresses detected here are used in generating the default securitypolicy for the management interfacesThe following network settings were detected These can be modified afterinstallation by editing homeuserrhinoconfigconfig_variablesCanonical hostname cycloneLocal IP Addresses 192168622 127001 192168022The Rhino SDK installation needs to use the PostgreSQL interactiveclient psql Enter the full path to your local psql client here If you donot have a psql client installed (eg if postgres is running on a remotehostand not installed on this one) then enter - here to skip this questionYou will still need to initialise the database on the remote host usinginit-management-dbshLocation of psql client [usrbinpsql]

Confirm Settings Installation directory homeuserrhinoPostgres host localhostPostgres port 5432Postgres user userDatabase name rhinoJAVA_HOME directory usrlocaljavaManagement Interface RMIJMX Ports 119912001202

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 14 -

Web Console Interface HTTPS Port 8443Are these settings correct (yn) yCreating installation directoryThe installer has detected you are running a 142 JVM This version ofSunsJVM has a bug related to incorrect compilation of a particular list methodSee homeuserrhinoconfighotspot_compiler_fix for more informationWriting configuration to homeuserrhinoconfigconfig_variablesI will now generate the keystores used for secure transport authenticationRemote management and connections must be verified using paired keyshomeuserrhinorhino-publickeystorewith a storepass of changeit and a shared keypass of changeithomeuserrhinorhino-privatekeystorewith a storepass of changeit and a shared keypass of changeitThe behaviour of the Rhino SDK paired key SSL can be configured by editinghomeuserrhinoconfigrmisslservice_namepropertiesCreating key pairs for common servicesExporting the certificates into the public keystore for servicedistributionCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCopying the public keystore to the client distribution directoryThe Open Cloud Rhino SDK is now installed in homeuserrhinoNext Steps- Start the Rhino SDK SLEE by running homeuserrhinostart-rhinosh- Access the Rhino management console at httpscyclone8443- Login with username admin and password password- Deploy the example SIP services see the filehomeuserrhinoexamplessipREADME for more informationOpen Cloud Rhino SDK installation complete

Initialisation de la meacutemoire drsquoexeacutecution de Rhino

Rhino SLEE SDK utilise une base de donneacutees PostgreSQL pour contenir les statutsdes diffeacuterents composants SLEE Pour pouvoir lrsquoutiliser il nous faut initialiser cettebase comme ci-dessous

Attention lrsquoexeacutecution de ce script effacera tout possible base existante et donceffacera toutes les donneacutees continues preacuteceacutedemment

$ init-management-dbshCREATE DATABASEYou are now connected to database rhinoNOTICE CREATE TABLE PRIMARY KEY will create implicit index versioning_pkey for table versioningCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index keyspaces_pkey for table keyspacesCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index timestamps_pkey for table timestampsCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index registrations_pkey for table registrationsCREATE TABLECOMMENT

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 15 -

Deacutemarrage du serveur Rhino

On deacutemarre le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstart-rhinosh Durant le deacutemarrage de celui-ci les eacuteveacutenementssuivants se produisent

1 La JVM se lance2 Le SDK geacuteneacutere et lit sa configuration3 Le SDK initialise et synchronise sa meacutemoire avec le serveur SQL4 Le SDK initialise les laquo per-machine MLets raquo (Management Agents)5 Le SLEE entre en ldquoRUNNING staterdquo6 Le SDK Rhino SLEE SDK est precirct agrave recevoir des commandes drsquoadministration

Arrecirct du serveur Rhino

On arrecircte le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstop-rhinoshOn obtient la sortie suivante

gtstop-rhinosh --niceSLEE shutdown initiated

SLEE stop completed shutdown phase initiatedSLEE shutdown successfully

Interface de management

Un composant SLEE peut ecirctre configure ou manageacute au biais de la console en lignede commande ou de lrsquointerface Web

On deacutemarre la console comme ci-dessous

$ cd $RHINO_HOME$ clientbinrhino-consoleInteractive Management Shell[Rhino (cmd (args) | help (command) | bye) 1] StateSLEE is in the Running state_

On accegravede agrave la console web en rentrant lrsquoadresse httpslthostnamegt8443 dansson browser webLrsquoutilisateur par deacutefaut est ldquoadminrdquo et le mdp ldquopasswordrdquo

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 16 -

Nous pouvons maintenant deacuteployer des services gracircce agrave ces consoles

d) Deacuteploiement du service SIP

Nous devons tout drsquoabord eacutediter le fichier de configuration suivant $RHINO_HOMEexamplessipsipproperties contains these properties

Pour la mise en place du service sur notre serveur de test nous devons tout drsquoabordchanger les parametres comme ci-dessous

Proxy SBB configuration Add names that the proxy host is known by The first name in the list will be treated as the Proxys canonical hostname and will be used in Via and Record-Route headers inserted by the proxyPROXY_HOSTNAMES=ns0sleeorg 127001 On rentre le DNS de notre serveur de test en tant que proxy Add domains that the proxy is authoritative forPROXY_DOMAINS=ns0sleeorgsleeorg On rentre le nom du domaine drsquoapplication de notre plateforme de testpour lesquels le proxy sera actifPROXY_LOOP_DETECTION=falseOn deacutesactive la deacutetection de boucle SIP du fait que le serveur fait agrave lafois DNS et JSLEE server En effet dans les deacutefinitions de la RFC 3261un proxy ne peut pas envoyer une reacuteponse agrave lui-mecircme ( dans notreplateforme de test les utilisateur srsquoauthentifient en userns0sleeorgLes messages qui sont envoyeacutes au proxy sont tout d abord redirigeacutes vers leserveur lui-mecircme (agrave cause du ns0sleeorg) puis transfeacutereacutes au receveur sicelui-ci se trouve dans la table de routage du proxy

Geacuteneacuteration et deacuteploiement des services

Pour creacuteer les uniteacutes de deacuteploiement des services Registrar Proxy et Locationlancez ldquoAntrdquo avec pour cible laquo build raquo comme ci-dessous

userhost~rhinoexamplessip$ ant buildBuildfile buildxmlinit[mkdir] Created dir homeuserrhinoexamplessipjarssipjars[mkdir] Created dir homeuserrhinoexamplessipjarssipclasses

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 3: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 3 -

Introduction

JAIN SLEE est une application middleware orienteacutee eacutevegravenement eacutecrite en Java Satacircche principale est de reacutecupeacuterer des eacutevegravenements envoyeacutes par des ressourcesexteacuterieures au serveur JAIN SLEE et de les envoyer aux portions de codescorrespondantes JAIN SLEE est multi protocole multi plateforme et possegravede descaracteacuteristiques similaires aux EJB mais est plus adapteacute au monde desteacuteleacutecommunications avec un faible taux de latence un fonctionnement asynchrone etune capaciteacute agrave geacuterer de nombreuses requecirctes par seconde (plusieurs centaines ouplusieurs milliers) JAIN SLEE gegravere des modegraveles de composant (cycle de viedeacuteploiement persistance redondance hellip) et des composants lieacutes au framework(timers management agrave travers JMX profile trace hellip)

Les objectifs du projet eacutetaient de mettre en œuvre une plate-forme implantant laspeacutecification JAIN SLEE et de creacuteer un composant de traitement drsquoappel Le projetsrsquoest deacuterouleacute sur deux semaines la premiegravere semaine nous nous sommesfamiliariseacutes avec les plateformes de Rhino et Mobicents (deacuteploiement utilisation) Ladeuxiegraveme semaine nous avons deacuteployeacute de nombreux exemples et analyseacute etadapteacute le code Nous verrons dans une premiegravere partie comment nous avons reacuteussiagrave deacuteployer les plateformes ainsi que les difficulteacutes que nous avons rencontreacutees Lacreacuteation drsquoun composant nrsquoa pas eacuteteacute reacutealiseacutee mais nous avons compris et analyseacute lefonctionnement de JAIN SLEE agrave travers la mise en œuvre de plusieurs typesdrsquoutilisation nous allons preacutesenter dans ce rapport deux exemples simples endeuxiegraveme et troisiegraveme partie une plateforme JAIN SLEE utilisant le protocole SIP etnous terminerons par un deuxiegraveme exemple (Wake Up Call) explicitant les multiplesinteacuterecircts pour cette nouvelle technologie dans le monde des teacuteleacutecommunications

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 4 -

1 Deacuteploiement drsquoune plateforme JAIN SLEE

Deacuteploiement drsquoune plateforme Mobicents

Teacuteleacutechargement du serveur Mobicents Pour teacuteleacutecharger le serveur Mobicents il faut se rendre sur wwwmobicentsorg etteacuteleacutecharger la derniegravere version Mobicents Suite xyz ReleasedCe fichier zip contient un serveur JBoss et les RA neacutecessaire au deacuteploiementdrsquoapplicationsUne fois le fichier zip teacuteleacutechargeacute il faut le deacutecompresser dans un nouveau reacutepertoire(faire attention agrave ce que le chemin ne contienne pas drsquoespace)Pour deacutemarrer le serveur il faut aller au reacutepertoire racine du serveur et lancer lacommande binrun ndashc all ndashb lt 127001 ou lrsquoadresse ip la machine gtPour tester lrsquointerface web du serveur Mobicents il faut taper dans son navigateurweb httplocalhost8080jmx-console

Remarques

Nous avons deacuteployeacute ce serveur sur une station Windows 2000 Pro avec quelquesdifficulteacutes au deacutebut car tout nrsquoest pas forceacutement expliciteacute dans les explications (il fautinstaller ant mettre en place les variables drsquoenvironnement pour JBOSS hellip) Lestutoriaux drsquoinstallations ne sont pas intuitifs et srsquoadressent agrave un public averti Il nousdonc a fallu un temps drsquoadaptation pour comprendre comment cette technologiefonctionne Un point positif pour Mobicents est qursquoil existe un fichier pour ledeacuteploiement du serveur de type laquo tout en un raquo Par contre lrsquointerface Web desupervision reste austegravere et difficile agrave comprendre Drsquoailleurs nous lrsquoavons que tregravespeu utiliseacute En fait il y a deux possibiliteacutes de deacuteploiement agrave partir de lrsquointerface Webou en ligne de commande Nous avons choisi cette seconde option pour configureret mettre en place les services Malgreacute tout les nombreux exemples en open sourcepreacutesent sur le site de Mobicents nous ont permis de reacutealiser toute la porteacutee de cettenouvelle technologie

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 5 -

Plugin Eclipse

Il existe un plugin Eclipse que nous avons utiliseacute durant le projet pour deacuteployer lesapplications

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 6 -

Deacuteploiement drsquoune plateforme Rhino

Preacute requis drsquoinstallation dans le cas de la mise en place drsquoun Proxy SIP sur uneplateforme JSLEE

- Serveur fonctionnant sous Linux (release UBUNTU pour nos tests)- Le service SQL laquo POSTGRE raquo- Le service DNS laquo Bind raquo- Le serveur JSLEE laquo Rhino OpenCloudraquo- Lrsquouniteacute de deacuteploiement SIP fourni avec Rhino

a) Installation de PostGre

1 Teacuteleacutecharger le package disponible sur le site httpwwwpostgresqlorg2 Deacutecompresser lrsquoarchive dans un reacutepertoire appartenant agrave lrsquoutilisateur3 Exeacutecuter les commandes ci-dessous

configure lance le script de generation de fichiers drsquoinstallationmake lance le make file pour creacuteer les scriptssumake install installe le packagemkdir usrlocalpgsqldata on creacutee un dossier ougrave sera contenu la BDchown ltuser_en_coursgt usrlocalpgsqldata on attribut le dossier agravelrsquoutilisateur en courssu - ltuser_en_coursgtusrlocalpgsqlbininitdb -D usrlocalpgsqldata on initialise leconteneur de BDusrlocalpgsqlbinpostmaster -D usrlocalpgsqldata gtlogfile 2gtamp1 amp on creacutee un fichier de log pour contenir les logs renvoyeacutes par le serviceusrlocalpgsqlbincreatedb test on creacutee une base de donneacutee ldquotestrdquousrlocalpgsqlbinpsql test pour tester le service PGSQL

b) Personnalisation de Bind

1 Installer le service DNS laquo Bind9 raquo

2 Configurer le serveur DNS

21 Les fichiers de configuration

Les fichiers de configuration de Bind se trouvent dans le reacutepertoireetcbind On y trouve notamment le fichier dbroot qui contient lesadresses IP des serveurs DNS racines (ie les serveurs centraux dusystegraveme DNS de lrsquoENIC) et le fichier namedconf qui est le fichier deconfiguration principal de Bind

Le reacutepertoire varcachebind est destineacute agrave accueillir les fichiers dezone pour ceux (ici sleeorgzone) qui veulent configurer un serveurDNS primaire ou secondaire

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 7 -

22 Configurer le serveur DNS primaire laquoindeacutependant raquo

Par deacutefaut Bind est configureacute en tant que serveur DNS indeacutependantqui nest primaire ou secondaire pour aucun domaine Quel est linteacuterecirctdun tel serveur Faire office de cache DNS En effet le serveur DNSva retenir dans son cache les correspondances IP-DNS demandeacutees parles clients et ne sera pas obligeacute daller chercher agrave chaque fois aupregravesdes autres serveurs DNS la reacuteponse aux requecirctesPar exemple si vous trouvez que le serveur DNS de votre fournisseurdaccegraves est trop long agrave reacutepondre vous aurez inteacuterecirct agrave installer unserveur DNS sur votre ordinateur et configurer votre systegraveme pour quilinterroge en prioriteacute le serveur local Pour optimiser les temps derequecirctes configurez le serveur DNS pour quil demande lesenregistrements quil na pas dans son cache aux serveurs DNS devotre fournisseur daccegraves au lieu daller les demander lui-mecircme aupregravesdes autres serveurs DNSPour cela eacuteditez le fichier namedconf et deacutecommentez les lignes de lasous-section forwarders de la section options en y inscrivant lesadresses IPs des serveurs DNS de votre fournisseur daccegraves Le deacutebutdu fichier namedconf ressemble alors agrave cela

options directory varcachebind

forwarders 19348251101934825111

auth-nxdomain no

ougrave 1934825110 et 1934825111 sont les adresses IPs des serveursDNS de lrsquoENICEnfin modifiez le fichier etcresolvconf et mettez votre serveur enpremiegravere position dans la liste des serveurs DNS

search enicfrnameserver ltIP_de_la_machinegtnameserver 1934825110nameserver 1934825111

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 8 -

23 Configurer le serveur DNS pour creacuteer la zone laquo sleeorg raquo

231 Modifier le fichier laquo namedconf raquo

Ajoutez agrave la fin du fichier namedconf les lignes suivantes

zone sleeorg

type master

file sleeorgzone

ougrave

sleeeorg est le nom de domaine pour lequel votre serveur sera primaire

sleeorgzone deacutesigne le fichier varcachebindsleeorgzone ougrave seront stockeacutes lesenregistrements de la zone

232 Ecriture du fichier de zone

Le fichier de configuration de la zone se preacutesente comme ci-dessous

varcachebindmondomaineorgzone Fichier de zone type pour le domaine sleeorg Tireacute de la formation Debian GNULinux par Alexis de Lattre httpwwwviaecpfr~alexisformation-linux

Utiliser la commande named-checkzone mondomaineorg varcachebindsleeorgzone pour veacuterifier la validiteacute du fichier de zone

Utiliser la commande named-checkconf pour verifier la validite du fichier de configuration etcbindnamedconf

ATTENTION ne pas oublier de mettre a jour le serial a chaque modification des enresgitrements de ce fichier

ATTENTION dans les fichiers de zone les noms DNS complets doivent se terminer par des points (par exemple mastermondomaineorg)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 9 -

Tous les noms DNS qui ne sont pas complets (ie qui ne se terminent pas par un point) se terminent implicitement par mondomaineorg

TTL (Time To Live) par dfaut Le TTL permet de dire aux serveurs DNS tiers quils ne devront pas garder les enregistrements de notre zone en cache au dela de cette dure On met une journe (86400 secondes)$TTL 86400

ENREGISTREMENT SOA (Start Of a zone of Authority)

Cet enregistrement donne le nom du serveur DNS primaire et ladresse mail a laquelle on peut joindre ladministrateur du domaine Par exemple le serveur DNS primaire sappellera ns0 et ladresse mail de ladministrateur sera ltrootns0sleeorggt IN SOA ns0sleeorg rootdnssleeorg (

Serial (ou Numero de serie) de la zone Il permet aux serveurs secondaires de savoir sils ont besoin de se mettre jour en faisant un transfert de zone avec le serveur primaire ou non en comparant leurs serial pour cette zone Par convention il est constitue de la date du jour au format AAAAMMJJ suivi du nombre de modifications deja effectuees sur le fichier de zone dans la journee + 1 Par exemple nous sommes le 1er mai 2003 et cest la deuxieme fois que je modifie le fichier de zone aujourdhui

2006060505

Refresh Intervalle de temps en secondes pendant lequel les serveurs DNS secondaires attendent avant de verifier (et eventuellement de mettre a jour) lenregistrement SOA du serveur DNS primaire On met un 1 journee (86400 secondes)

86400

Retry Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de reessayer une requete vers le serveur DNS primaire si ce dernier nest pas accessible On met 5 minutes (300 secondes)

300

Expire Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de rejeter les informations de zones sils nont pas pu contacter le serveur DNS primaire On met 1 mois (2592000 secondes)

2592000

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 10 -

TTL (Time To Live) minimum Duree minimum du TTL dun enregistrement DNS de la zone On met 1 journee (86400 secondes)

86400)

ENREGISTREMENTS NS

Ces enregistrements donnent les noms DNS des serveurs primaires et secondairessleeorg IN NS ns0sleeorg IN NS ns0

ENREGISTREMENTS A

Les enregistrements A donnent les correspondances DNS lt-gt IP classiques

Pour quune requete DNS ns0sleeorg renvoie 17227131230 qui est lrsquoIP denotre serveur de testns0 IN A 17227131230

ENREGISTREMENTS CNAME

Le champ CNAME est utilise pour faire des alias DNS cest-a-dire avoir une IP qui repond a plusieurs noms DNS

Par exemple pour quune requete DNS wwwsleeorg renvoie aussi lIP du serveur de test

www IN CNAME ns0mailhost IN CNAME ns0

ENREGISTREMENTS MX

Le champ MX est utilise pour les envois de mail Quand un serveur de mail doit envoyer un mail a ladresse ltalexissleeorggt il fait une requete DNS de type MX sur sleeorg Il obtient en retour une liste dadresses IP classees avec des priorites Il essaye alors denvoyer le mail au serveur principale sil est injoignable au serveur secondaire etc

Pour les adresses sleeorg le serveur principal est ns0sleeorg IN MX 10 ns0

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 11 -

ATTENTION on ne met pas de MX sur un CNAME mais uniquement sur un A

Si on veut inclure un autre fichier de ce fichier $INCLUDE nom_de_lautre_fichier

233 Veacuterifications et relance

Veacuterifiez que vous navez pas fait derreur de syntaxe dans le fichier namedconf

named-checkconf

Si la commande naffiche rien cest que le fichier namedconf est valide Ensuiteveacuterifiez la syntaxe du fichier de zone

named-checkzone sleeorg varcachebindsleeorgzone

zone sleeorgIN loaded serial 2006060505

OK

Si la commande naffiche aucun message derreur alors il ny a pas derreur desyntaxe dans le fichier de zone Vous pouvez alors dire agrave Bind de relire son fichier deconfiguration

etcinitdbind9 reload

Attention si vous faites un restart au lieu dun reload le cache de votre serveurDNS se videra

c) Installation du serveur Rhino

Utilitaires annexes requis

La variable drsquoenvironnement JAVA_HOME doit ecirctre pointeacutee sur le reacutepertoire racine duJava SDKPour veacuterifier entrez les commandes ci-dessous

$ which javausrlocaljavabinjava$ java -versionjava version 150_05Java(TM) 2 Runtime Environment Standard Edition (build 150_05-b05)Java HotSpot(TM) Client VM (build 150_05-b05 mixed mode sharing)$ export JAVA_HOME=usrlocaljava$ PATH=$JAVA_HOMEbin$PATH_

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 12 -

Apache Ant 162 doit ecirctre installeacute La variable drsquoenvironnement ANT_HOME doit ecirctrepointeacutee sur le reacutepertoire racine drsquoApache Ant Pour veacuterifier entrez les commandes ci-dessous

$ which antusrlocalantbinant$ ant -versionApache Ant version 162 compiled on July 16 2004$ export ANT_HOME=usrlocalant$ PATH=$ANT_HOMEbin$PATH

La commande unzip

$ which unzipusrbinunzip

Lrsquoutilitaire TAR

$ which tarbintar

Lrsquoutilitaire awk

$ which awkbinawk

Lrsquoutilitaire ldquosedrdquo

$ which sedbinsed

Installation du package RhinoSLEE

Le SDK Rhino SLEE est livreacute sous forme drsquoarchive compresseacutee tar RhinoSDK-142tar On la deacutecompresse gracircce aux commandes ci-dessous

$ tar xvf RhinoSDK-142tar$ cd rhino-sdk-install

Ceci va creacuteer un reacutepertoire ldquorhino_sdk-install raquo contenant les fichiers drsquoinstallation Apartir de ce reacutepertoire lance le script drsquoinstallation laquo rhino-installshrdquoOn obtient le reacutesultat ci-dessous

$ rhino-installshOpen Cloud Rhino SDK InstallationThe Rhino SDK install requires access to a PostgreSQL database serverfor storing persistent configuration and deployment information Thedatabasesettings you enter here are required for the Rhino SDK config files Theinstall script can optionally configure the database for you you will beprompted for this later in the install processPostgres host [localhost]Postgres port [5432]Postgres user [user] entrer le username posseacutedant lrsquoacces a la base SQLPostgres password

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 13 -

Postgres password (again)

On deacutefinit ensuite le nom de la base de donneacutees qui sera creacutee pour contenir lestables necessaries pour le fonctionnement de rhino Ensuite si tous les preacuterequis onteacuteteacute respecteacutes (JAVA_HOME etc) lrsquoinstalleur devrait renseigner automatiquement lesparamegravetres demandeacutes

Database name [rhino]Enter the directory where you want to install the Rhino SDKThese two ports are used for accessing the Management MBeans from a JavaRMI(Remote Method Invocation) client such as the Rhino SDK command-lineutilitiesManagement Interface RMI Registry Port [1199]Management Interface RMI Object Port [1200]This port is used for accessing the JMX Remote server The Rhino WebConsoleuses this for remote managementManagement Interface JMX Remote Service Port [1202]This port is used for the Web Console (Jetty) server and providesremote management user interface This is a secure port (TLS)Secure Web Console HTTPS Port [8443]Enter the location of your Java J2SEJDK installationThis must be at least version 142JAVA_HOME directory [usrlocaljava]Found Java version 142_04The Java heap size is an argument passed to the JVM to specify the amountofmain memory (in megabytes) which should be allocated for running theRhino SDK To prevent extensive disk swapping this should be set to lessthan the total memory available at runtimeJava heap size [512] Network Configuration The Rhino SDK install will now attempt to determine local networksettings The hostname detected here is used by the web console The IPaddresses detected here are used in generating the default securitypolicy for the management interfacesThe following network settings were detected These can be modified afterinstallation by editing homeuserrhinoconfigconfig_variablesCanonical hostname cycloneLocal IP Addresses 192168622 127001 192168022The Rhino SDK installation needs to use the PostgreSQL interactiveclient psql Enter the full path to your local psql client here If you donot have a psql client installed (eg if postgres is running on a remotehostand not installed on this one) then enter - here to skip this questionYou will still need to initialise the database on the remote host usinginit-management-dbshLocation of psql client [usrbinpsql]

Confirm Settings Installation directory homeuserrhinoPostgres host localhostPostgres port 5432Postgres user userDatabase name rhinoJAVA_HOME directory usrlocaljavaManagement Interface RMIJMX Ports 119912001202

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 14 -

Web Console Interface HTTPS Port 8443Are these settings correct (yn) yCreating installation directoryThe installer has detected you are running a 142 JVM This version ofSunsJVM has a bug related to incorrect compilation of a particular list methodSee homeuserrhinoconfighotspot_compiler_fix for more informationWriting configuration to homeuserrhinoconfigconfig_variablesI will now generate the keystores used for secure transport authenticationRemote management and connections must be verified using paired keyshomeuserrhinorhino-publickeystorewith a storepass of changeit and a shared keypass of changeithomeuserrhinorhino-privatekeystorewith a storepass of changeit and a shared keypass of changeitThe behaviour of the Rhino SDK paired key SSL can be configured by editinghomeuserrhinoconfigrmisslservice_namepropertiesCreating key pairs for common servicesExporting the certificates into the public keystore for servicedistributionCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCopying the public keystore to the client distribution directoryThe Open Cloud Rhino SDK is now installed in homeuserrhinoNext Steps- Start the Rhino SDK SLEE by running homeuserrhinostart-rhinosh- Access the Rhino management console at httpscyclone8443- Login with username admin and password password- Deploy the example SIP services see the filehomeuserrhinoexamplessipREADME for more informationOpen Cloud Rhino SDK installation complete

Initialisation de la meacutemoire drsquoexeacutecution de Rhino

Rhino SLEE SDK utilise une base de donneacutees PostgreSQL pour contenir les statutsdes diffeacuterents composants SLEE Pour pouvoir lrsquoutiliser il nous faut initialiser cettebase comme ci-dessous

Attention lrsquoexeacutecution de ce script effacera tout possible base existante et donceffacera toutes les donneacutees continues preacuteceacutedemment

$ init-management-dbshCREATE DATABASEYou are now connected to database rhinoNOTICE CREATE TABLE PRIMARY KEY will create implicit index versioning_pkey for table versioningCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index keyspaces_pkey for table keyspacesCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index timestamps_pkey for table timestampsCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index registrations_pkey for table registrationsCREATE TABLECOMMENT

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 15 -

Deacutemarrage du serveur Rhino

On deacutemarre le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstart-rhinosh Durant le deacutemarrage de celui-ci les eacuteveacutenementssuivants se produisent

1 La JVM se lance2 Le SDK geacuteneacutere et lit sa configuration3 Le SDK initialise et synchronise sa meacutemoire avec le serveur SQL4 Le SDK initialise les laquo per-machine MLets raquo (Management Agents)5 Le SLEE entre en ldquoRUNNING staterdquo6 Le SDK Rhino SLEE SDK est precirct agrave recevoir des commandes drsquoadministration

Arrecirct du serveur Rhino

On arrecircte le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstop-rhinoshOn obtient la sortie suivante

gtstop-rhinosh --niceSLEE shutdown initiated

SLEE stop completed shutdown phase initiatedSLEE shutdown successfully

Interface de management

Un composant SLEE peut ecirctre configure ou manageacute au biais de la console en lignede commande ou de lrsquointerface Web

On deacutemarre la console comme ci-dessous

$ cd $RHINO_HOME$ clientbinrhino-consoleInteractive Management Shell[Rhino (cmd (args) | help (command) | bye) 1] StateSLEE is in the Running state_

On accegravede agrave la console web en rentrant lrsquoadresse httpslthostnamegt8443 dansson browser webLrsquoutilisateur par deacutefaut est ldquoadminrdquo et le mdp ldquopasswordrdquo

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 16 -

Nous pouvons maintenant deacuteployer des services gracircce agrave ces consoles

d) Deacuteploiement du service SIP

Nous devons tout drsquoabord eacutediter le fichier de configuration suivant $RHINO_HOMEexamplessipsipproperties contains these properties

Pour la mise en place du service sur notre serveur de test nous devons tout drsquoabordchanger les parametres comme ci-dessous

Proxy SBB configuration Add names that the proxy host is known by The first name in the list will be treated as the Proxys canonical hostname and will be used in Via and Record-Route headers inserted by the proxyPROXY_HOSTNAMES=ns0sleeorg 127001 On rentre le DNS de notre serveur de test en tant que proxy Add domains that the proxy is authoritative forPROXY_DOMAINS=ns0sleeorgsleeorg On rentre le nom du domaine drsquoapplication de notre plateforme de testpour lesquels le proxy sera actifPROXY_LOOP_DETECTION=falseOn deacutesactive la deacutetection de boucle SIP du fait que le serveur fait agrave lafois DNS et JSLEE server En effet dans les deacutefinitions de la RFC 3261un proxy ne peut pas envoyer une reacuteponse agrave lui-mecircme ( dans notreplateforme de test les utilisateur srsquoauthentifient en userns0sleeorgLes messages qui sont envoyeacutes au proxy sont tout d abord redirigeacutes vers leserveur lui-mecircme (agrave cause du ns0sleeorg) puis transfeacutereacutes au receveur sicelui-ci se trouve dans la table de routage du proxy

Geacuteneacuteration et deacuteploiement des services

Pour creacuteer les uniteacutes de deacuteploiement des services Registrar Proxy et Locationlancez ldquoAntrdquo avec pour cible laquo build raquo comme ci-dessous

userhost~rhinoexamplessip$ ant buildBuildfile buildxmlinit[mkdir] Created dir homeuserrhinoexamplessipjarssipjars[mkdir] Created dir homeuserrhinoexamplessipjarssipclasses

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 4: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 4 -

1 Deacuteploiement drsquoune plateforme JAIN SLEE

Deacuteploiement drsquoune plateforme Mobicents

Teacuteleacutechargement du serveur Mobicents Pour teacuteleacutecharger le serveur Mobicents il faut se rendre sur wwwmobicentsorg etteacuteleacutecharger la derniegravere version Mobicents Suite xyz ReleasedCe fichier zip contient un serveur JBoss et les RA neacutecessaire au deacuteploiementdrsquoapplicationsUne fois le fichier zip teacuteleacutechargeacute il faut le deacutecompresser dans un nouveau reacutepertoire(faire attention agrave ce que le chemin ne contienne pas drsquoespace)Pour deacutemarrer le serveur il faut aller au reacutepertoire racine du serveur et lancer lacommande binrun ndashc all ndashb lt 127001 ou lrsquoadresse ip la machine gtPour tester lrsquointerface web du serveur Mobicents il faut taper dans son navigateurweb httplocalhost8080jmx-console

Remarques

Nous avons deacuteployeacute ce serveur sur une station Windows 2000 Pro avec quelquesdifficulteacutes au deacutebut car tout nrsquoest pas forceacutement expliciteacute dans les explications (il fautinstaller ant mettre en place les variables drsquoenvironnement pour JBOSS hellip) Lestutoriaux drsquoinstallations ne sont pas intuitifs et srsquoadressent agrave un public averti Il nousdonc a fallu un temps drsquoadaptation pour comprendre comment cette technologiefonctionne Un point positif pour Mobicents est qursquoil existe un fichier pour ledeacuteploiement du serveur de type laquo tout en un raquo Par contre lrsquointerface Web desupervision reste austegravere et difficile agrave comprendre Drsquoailleurs nous lrsquoavons que tregravespeu utiliseacute En fait il y a deux possibiliteacutes de deacuteploiement agrave partir de lrsquointerface Webou en ligne de commande Nous avons choisi cette seconde option pour configureret mettre en place les services Malgreacute tout les nombreux exemples en open sourcepreacutesent sur le site de Mobicents nous ont permis de reacutealiser toute la porteacutee de cettenouvelle technologie

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 5 -

Plugin Eclipse

Il existe un plugin Eclipse que nous avons utiliseacute durant le projet pour deacuteployer lesapplications

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 6 -

Deacuteploiement drsquoune plateforme Rhino

Preacute requis drsquoinstallation dans le cas de la mise en place drsquoun Proxy SIP sur uneplateforme JSLEE

- Serveur fonctionnant sous Linux (release UBUNTU pour nos tests)- Le service SQL laquo POSTGRE raquo- Le service DNS laquo Bind raquo- Le serveur JSLEE laquo Rhino OpenCloudraquo- Lrsquouniteacute de deacuteploiement SIP fourni avec Rhino

a) Installation de PostGre

1 Teacuteleacutecharger le package disponible sur le site httpwwwpostgresqlorg2 Deacutecompresser lrsquoarchive dans un reacutepertoire appartenant agrave lrsquoutilisateur3 Exeacutecuter les commandes ci-dessous

configure lance le script de generation de fichiers drsquoinstallationmake lance le make file pour creacuteer les scriptssumake install installe le packagemkdir usrlocalpgsqldata on creacutee un dossier ougrave sera contenu la BDchown ltuser_en_coursgt usrlocalpgsqldata on attribut le dossier agravelrsquoutilisateur en courssu - ltuser_en_coursgtusrlocalpgsqlbininitdb -D usrlocalpgsqldata on initialise leconteneur de BDusrlocalpgsqlbinpostmaster -D usrlocalpgsqldata gtlogfile 2gtamp1 amp on creacutee un fichier de log pour contenir les logs renvoyeacutes par le serviceusrlocalpgsqlbincreatedb test on creacutee une base de donneacutee ldquotestrdquousrlocalpgsqlbinpsql test pour tester le service PGSQL

b) Personnalisation de Bind

1 Installer le service DNS laquo Bind9 raquo

2 Configurer le serveur DNS

21 Les fichiers de configuration

Les fichiers de configuration de Bind se trouvent dans le reacutepertoireetcbind On y trouve notamment le fichier dbroot qui contient lesadresses IP des serveurs DNS racines (ie les serveurs centraux dusystegraveme DNS de lrsquoENIC) et le fichier namedconf qui est le fichier deconfiguration principal de Bind

Le reacutepertoire varcachebind est destineacute agrave accueillir les fichiers dezone pour ceux (ici sleeorgzone) qui veulent configurer un serveurDNS primaire ou secondaire

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 7 -

22 Configurer le serveur DNS primaire laquoindeacutependant raquo

Par deacutefaut Bind est configureacute en tant que serveur DNS indeacutependantqui nest primaire ou secondaire pour aucun domaine Quel est linteacuterecirctdun tel serveur Faire office de cache DNS En effet le serveur DNSva retenir dans son cache les correspondances IP-DNS demandeacutees parles clients et ne sera pas obligeacute daller chercher agrave chaque fois aupregravesdes autres serveurs DNS la reacuteponse aux requecirctesPar exemple si vous trouvez que le serveur DNS de votre fournisseurdaccegraves est trop long agrave reacutepondre vous aurez inteacuterecirct agrave installer unserveur DNS sur votre ordinateur et configurer votre systegraveme pour quilinterroge en prioriteacute le serveur local Pour optimiser les temps derequecirctes configurez le serveur DNS pour quil demande lesenregistrements quil na pas dans son cache aux serveurs DNS devotre fournisseur daccegraves au lieu daller les demander lui-mecircme aupregravesdes autres serveurs DNSPour cela eacuteditez le fichier namedconf et deacutecommentez les lignes de lasous-section forwarders de la section options en y inscrivant lesadresses IPs des serveurs DNS de votre fournisseur daccegraves Le deacutebutdu fichier namedconf ressemble alors agrave cela

options directory varcachebind

forwarders 19348251101934825111

auth-nxdomain no

ougrave 1934825110 et 1934825111 sont les adresses IPs des serveursDNS de lrsquoENICEnfin modifiez le fichier etcresolvconf et mettez votre serveur enpremiegravere position dans la liste des serveurs DNS

search enicfrnameserver ltIP_de_la_machinegtnameserver 1934825110nameserver 1934825111

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 8 -

23 Configurer le serveur DNS pour creacuteer la zone laquo sleeorg raquo

231 Modifier le fichier laquo namedconf raquo

Ajoutez agrave la fin du fichier namedconf les lignes suivantes

zone sleeorg

type master

file sleeorgzone

ougrave

sleeeorg est le nom de domaine pour lequel votre serveur sera primaire

sleeorgzone deacutesigne le fichier varcachebindsleeorgzone ougrave seront stockeacutes lesenregistrements de la zone

232 Ecriture du fichier de zone

Le fichier de configuration de la zone se preacutesente comme ci-dessous

varcachebindmondomaineorgzone Fichier de zone type pour le domaine sleeorg Tireacute de la formation Debian GNULinux par Alexis de Lattre httpwwwviaecpfr~alexisformation-linux

Utiliser la commande named-checkzone mondomaineorg varcachebindsleeorgzone pour veacuterifier la validiteacute du fichier de zone

Utiliser la commande named-checkconf pour verifier la validite du fichier de configuration etcbindnamedconf

ATTENTION ne pas oublier de mettre a jour le serial a chaque modification des enresgitrements de ce fichier

ATTENTION dans les fichiers de zone les noms DNS complets doivent se terminer par des points (par exemple mastermondomaineorg)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 9 -

Tous les noms DNS qui ne sont pas complets (ie qui ne se terminent pas par un point) se terminent implicitement par mondomaineorg

TTL (Time To Live) par dfaut Le TTL permet de dire aux serveurs DNS tiers quils ne devront pas garder les enregistrements de notre zone en cache au dela de cette dure On met une journe (86400 secondes)$TTL 86400

ENREGISTREMENT SOA (Start Of a zone of Authority)

Cet enregistrement donne le nom du serveur DNS primaire et ladresse mail a laquelle on peut joindre ladministrateur du domaine Par exemple le serveur DNS primaire sappellera ns0 et ladresse mail de ladministrateur sera ltrootns0sleeorggt IN SOA ns0sleeorg rootdnssleeorg (

Serial (ou Numero de serie) de la zone Il permet aux serveurs secondaires de savoir sils ont besoin de se mettre jour en faisant un transfert de zone avec le serveur primaire ou non en comparant leurs serial pour cette zone Par convention il est constitue de la date du jour au format AAAAMMJJ suivi du nombre de modifications deja effectuees sur le fichier de zone dans la journee + 1 Par exemple nous sommes le 1er mai 2003 et cest la deuxieme fois que je modifie le fichier de zone aujourdhui

2006060505

Refresh Intervalle de temps en secondes pendant lequel les serveurs DNS secondaires attendent avant de verifier (et eventuellement de mettre a jour) lenregistrement SOA du serveur DNS primaire On met un 1 journee (86400 secondes)

86400

Retry Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de reessayer une requete vers le serveur DNS primaire si ce dernier nest pas accessible On met 5 minutes (300 secondes)

300

Expire Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de rejeter les informations de zones sils nont pas pu contacter le serveur DNS primaire On met 1 mois (2592000 secondes)

2592000

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 10 -

TTL (Time To Live) minimum Duree minimum du TTL dun enregistrement DNS de la zone On met 1 journee (86400 secondes)

86400)

ENREGISTREMENTS NS

Ces enregistrements donnent les noms DNS des serveurs primaires et secondairessleeorg IN NS ns0sleeorg IN NS ns0

ENREGISTREMENTS A

Les enregistrements A donnent les correspondances DNS lt-gt IP classiques

Pour quune requete DNS ns0sleeorg renvoie 17227131230 qui est lrsquoIP denotre serveur de testns0 IN A 17227131230

ENREGISTREMENTS CNAME

Le champ CNAME est utilise pour faire des alias DNS cest-a-dire avoir une IP qui repond a plusieurs noms DNS

Par exemple pour quune requete DNS wwwsleeorg renvoie aussi lIP du serveur de test

www IN CNAME ns0mailhost IN CNAME ns0

ENREGISTREMENTS MX

Le champ MX est utilise pour les envois de mail Quand un serveur de mail doit envoyer un mail a ladresse ltalexissleeorggt il fait une requete DNS de type MX sur sleeorg Il obtient en retour une liste dadresses IP classees avec des priorites Il essaye alors denvoyer le mail au serveur principale sil est injoignable au serveur secondaire etc

Pour les adresses sleeorg le serveur principal est ns0sleeorg IN MX 10 ns0

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 11 -

ATTENTION on ne met pas de MX sur un CNAME mais uniquement sur un A

Si on veut inclure un autre fichier de ce fichier $INCLUDE nom_de_lautre_fichier

233 Veacuterifications et relance

Veacuterifiez que vous navez pas fait derreur de syntaxe dans le fichier namedconf

named-checkconf

Si la commande naffiche rien cest que le fichier namedconf est valide Ensuiteveacuterifiez la syntaxe du fichier de zone

named-checkzone sleeorg varcachebindsleeorgzone

zone sleeorgIN loaded serial 2006060505

OK

Si la commande naffiche aucun message derreur alors il ny a pas derreur desyntaxe dans le fichier de zone Vous pouvez alors dire agrave Bind de relire son fichier deconfiguration

etcinitdbind9 reload

Attention si vous faites un restart au lieu dun reload le cache de votre serveurDNS se videra

c) Installation du serveur Rhino

Utilitaires annexes requis

La variable drsquoenvironnement JAVA_HOME doit ecirctre pointeacutee sur le reacutepertoire racine duJava SDKPour veacuterifier entrez les commandes ci-dessous

$ which javausrlocaljavabinjava$ java -versionjava version 150_05Java(TM) 2 Runtime Environment Standard Edition (build 150_05-b05)Java HotSpot(TM) Client VM (build 150_05-b05 mixed mode sharing)$ export JAVA_HOME=usrlocaljava$ PATH=$JAVA_HOMEbin$PATH_

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 12 -

Apache Ant 162 doit ecirctre installeacute La variable drsquoenvironnement ANT_HOME doit ecirctrepointeacutee sur le reacutepertoire racine drsquoApache Ant Pour veacuterifier entrez les commandes ci-dessous

$ which antusrlocalantbinant$ ant -versionApache Ant version 162 compiled on July 16 2004$ export ANT_HOME=usrlocalant$ PATH=$ANT_HOMEbin$PATH

La commande unzip

$ which unzipusrbinunzip

Lrsquoutilitaire TAR

$ which tarbintar

Lrsquoutilitaire awk

$ which awkbinawk

Lrsquoutilitaire ldquosedrdquo

$ which sedbinsed

Installation du package RhinoSLEE

Le SDK Rhino SLEE est livreacute sous forme drsquoarchive compresseacutee tar RhinoSDK-142tar On la deacutecompresse gracircce aux commandes ci-dessous

$ tar xvf RhinoSDK-142tar$ cd rhino-sdk-install

Ceci va creacuteer un reacutepertoire ldquorhino_sdk-install raquo contenant les fichiers drsquoinstallation Apartir de ce reacutepertoire lance le script drsquoinstallation laquo rhino-installshrdquoOn obtient le reacutesultat ci-dessous

$ rhino-installshOpen Cloud Rhino SDK InstallationThe Rhino SDK install requires access to a PostgreSQL database serverfor storing persistent configuration and deployment information Thedatabasesettings you enter here are required for the Rhino SDK config files Theinstall script can optionally configure the database for you you will beprompted for this later in the install processPostgres host [localhost]Postgres port [5432]Postgres user [user] entrer le username posseacutedant lrsquoacces a la base SQLPostgres password

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 13 -

Postgres password (again)

On deacutefinit ensuite le nom de la base de donneacutees qui sera creacutee pour contenir lestables necessaries pour le fonctionnement de rhino Ensuite si tous les preacuterequis onteacuteteacute respecteacutes (JAVA_HOME etc) lrsquoinstalleur devrait renseigner automatiquement lesparamegravetres demandeacutes

Database name [rhino]Enter the directory where you want to install the Rhino SDKThese two ports are used for accessing the Management MBeans from a JavaRMI(Remote Method Invocation) client such as the Rhino SDK command-lineutilitiesManagement Interface RMI Registry Port [1199]Management Interface RMI Object Port [1200]This port is used for accessing the JMX Remote server The Rhino WebConsoleuses this for remote managementManagement Interface JMX Remote Service Port [1202]This port is used for the Web Console (Jetty) server and providesremote management user interface This is a secure port (TLS)Secure Web Console HTTPS Port [8443]Enter the location of your Java J2SEJDK installationThis must be at least version 142JAVA_HOME directory [usrlocaljava]Found Java version 142_04The Java heap size is an argument passed to the JVM to specify the amountofmain memory (in megabytes) which should be allocated for running theRhino SDK To prevent extensive disk swapping this should be set to lessthan the total memory available at runtimeJava heap size [512] Network Configuration The Rhino SDK install will now attempt to determine local networksettings The hostname detected here is used by the web console The IPaddresses detected here are used in generating the default securitypolicy for the management interfacesThe following network settings were detected These can be modified afterinstallation by editing homeuserrhinoconfigconfig_variablesCanonical hostname cycloneLocal IP Addresses 192168622 127001 192168022The Rhino SDK installation needs to use the PostgreSQL interactiveclient psql Enter the full path to your local psql client here If you donot have a psql client installed (eg if postgres is running on a remotehostand not installed on this one) then enter - here to skip this questionYou will still need to initialise the database on the remote host usinginit-management-dbshLocation of psql client [usrbinpsql]

Confirm Settings Installation directory homeuserrhinoPostgres host localhostPostgres port 5432Postgres user userDatabase name rhinoJAVA_HOME directory usrlocaljavaManagement Interface RMIJMX Ports 119912001202

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 14 -

Web Console Interface HTTPS Port 8443Are these settings correct (yn) yCreating installation directoryThe installer has detected you are running a 142 JVM This version ofSunsJVM has a bug related to incorrect compilation of a particular list methodSee homeuserrhinoconfighotspot_compiler_fix for more informationWriting configuration to homeuserrhinoconfigconfig_variablesI will now generate the keystores used for secure transport authenticationRemote management and connections must be verified using paired keyshomeuserrhinorhino-publickeystorewith a storepass of changeit and a shared keypass of changeithomeuserrhinorhino-privatekeystorewith a storepass of changeit and a shared keypass of changeitThe behaviour of the Rhino SDK paired key SSL can be configured by editinghomeuserrhinoconfigrmisslservice_namepropertiesCreating key pairs for common servicesExporting the certificates into the public keystore for servicedistributionCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCopying the public keystore to the client distribution directoryThe Open Cloud Rhino SDK is now installed in homeuserrhinoNext Steps- Start the Rhino SDK SLEE by running homeuserrhinostart-rhinosh- Access the Rhino management console at httpscyclone8443- Login with username admin and password password- Deploy the example SIP services see the filehomeuserrhinoexamplessipREADME for more informationOpen Cloud Rhino SDK installation complete

Initialisation de la meacutemoire drsquoexeacutecution de Rhino

Rhino SLEE SDK utilise une base de donneacutees PostgreSQL pour contenir les statutsdes diffeacuterents composants SLEE Pour pouvoir lrsquoutiliser il nous faut initialiser cettebase comme ci-dessous

Attention lrsquoexeacutecution de ce script effacera tout possible base existante et donceffacera toutes les donneacutees continues preacuteceacutedemment

$ init-management-dbshCREATE DATABASEYou are now connected to database rhinoNOTICE CREATE TABLE PRIMARY KEY will create implicit index versioning_pkey for table versioningCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index keyspaces_pkey for table keyspacesCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index timestamps_pkey for table timestampsCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index registrations_pkey for table registrationsCREATE TABLECOMMENT

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 15 -

Deacutemarrage du serveur Rhino

On deacutemarre le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstart-rhinosh Durant le deacutemarrage de celui-ci les eacuteveacutenementssuivants se produisent

1 La JVM se lance2 Le SDK geacuteneacutere et lit sa configuration3 Le SDK initialise et synchronise sa meacutemoire avec le serveur SQL4 Le SDK initialise les laquo per-machine MLets raquo (Management Agents)5 Le SLEE entre en ldquoRUNNING staterdquo6 Le SDK Rhino SLEE SDK est precirct agrave recevoir des commandes drsquoadministration

Arrecirct du serveur Rhino

On arrecircte le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstop-rhinoshOn obtient la sortie suivante

gtstop-rhinosh --niceSLEE shutdown initiated

SLEE stop completed shutdown phase initiatedSLEE shutdown successfully

Interface de management

Un composant SLEE peut ecirctre configure ou manageacute au biais de la console en lignede commande ou de lrsquointerface Web

On deacutemarre la console comme ci-dessous

$ cd $RHINO_HOME$ clientbinrhino-consoleInteractive Management Shell[Rhino (cmd (args) | help (command) | bye) 1] StateSLEE is in the Running state_

On accegravede agrave la console web en rentrant lrsquoadresse httpslthostnamegt8443 dansson browser webLrsquoutilisateur par deacutefaut est ldquoadminrdquo et le mdp ldquopasswordrdquo

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 16 -

Nous pouvons maintenant deacuteployer des services gracircce agrave ces consoles

d) Deacuteploiement du service SIP

Nous devons tout drsquoabord eacutediter le fichier de configuration suivant $RHINO_HOMEexamplessipsipproperties contains these properties

Pour la mise en place du service sur notre serveur de test nous devons tout drsquoabordchanger les parametres comme ci-dessous

Proxy SBB configuration Add names that the proxy host is known by The first name in the list will be treated as the Proxys canonical hostname and will be used in Via and Record-Route headers inserted by the proxyPROXY_HOSTNAMES=ns0sleeorg 127001 On rentre le DNS de notre serveur de test en tant que proxy Add domains that the proxy is authoritative forPROXY_DOMAINS=ns0sleeorgsleeorg On rentre le nom du domaine drsquoapplication de notre plateforme de testpour lesquels le proxy sera actifPROXY_LOOP_DETECTION=falseOn deacutesactive la deacutetection de boucle SIP du fait que le serveur fait agrave lafois DNS et JSLEE server En effet dans les deacutefinitions de la RFC 3261un proxy ne peut pas envoyer une reacuteponse agrave lui-mecircme ( dans notreplateforme de test les utilisateur srsquoauthentifient en userns0sleeorgLes messages qui sont envoyeacutes au proxy sont tout d abord redirigeacutes vers leserveur lui-mecircme (agrave cause du ns0sleeorg) puis transfeacutereacutes au receveur sicelui-ci se trouve dans la table de routage du proxy

Geacuteneacuteration et deacuteploiement des services

Pour creacuteer les uniteacutes de deacuteploiement des services Registrar Proxy et Locationlancez ldquoAntrdquo avec pour cible laquo build raquo comme ci-dessous

userhost~rhinoexamplessip$ ant buildBuildfile buildxmlinit[mkdir] Created dir homeuserrhinoexamplessipjarssipjars[mkdir] Created dir homeuserrhinoexamplessipjarssipclasses

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 5: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 5 -

Plugin Eclipse

Il existe un plugin Eclipse que nous avons utiliseacute durant le projet pour deacuteployer lesapplications

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 6 -

Deacuteploiement drsquoune plateforme Rhino

Preacute requis drsquoinstallation dans le cas de la mise en place drsquoun Proxy SIP sur uneplateforme JSLEE

- Serveur fonctionnant sous Linux (release UBUNTU pour nos tests)- Le service SQL laquo POSTGRE raquo- Le service DNS laquo Bind raquo- Le serveur JSLEE laquo Rhino OpenCloudraquo- Lrsquouniteacute de deacuteploiement SIP fourni avec Rhino

a) Installation de PostGre

1 Teacuteleacutecharger le package disponible sur le site httpwwwpostgresqlorg2 Deacutecompresser lrsquoarchive dans un reacutepertoire appartenant agrave lrsquoutilisateur3 Exeacutecuter les commandes ci-dessous

configure lance le script de generation de fichiers drsquoinstallationmake lance le make file pour creacuteer les scriptssumake install installe le packagemkdir usrlocalpgsqldata on creacutee un dossier ougrave sera contenu la BDchown ltuser_en_coursgt usrlocalpgsqldata on attribut le dossier agravelrsquoutilisateur en courssu - ltuser_en_coursgtusrlocalpgsqlbininitdb -D usrlocalpgsqldata on initialise leconteneur de BDusrlocalpgsqlbinpostmaster -D usrlocalpgsqldata gtlogfile 2gtamp1 amp on creacutee un fichier de log pour contenir les logs renvoyeacutes par le serviceusrlocalpgsqlbincreatedb test on creacutee une base de donneacutee ldquotestrdquousrlocalpgsqlbinpsql test pour tester le service PGSQL

b) Personnalisation de Bind

1 Installer le service DNS laquo Bind9 raquo

2 Configurer le serveur DNS

21 Les fichiers de configuration

Les fichiers de configuration de Bind se trouvent dans le reacutepertoireetcbind On y trouve notamment le fichier dbroot qui contient lesadresses IP des serveurs DNS racines (ie les serveurs centraux dusystegraveme DNS de lrsquoENIC) et le fichier namedconf qui est le fichier deconfiguration principal de Bind

Le reacutepertoire varcachebind est destineacute agrave accueillir les fichiers dezone pour ceux (ici sleeorgzone) qui veulent configurer un serveurDNS primaire ou secondaire

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 7 -

22 Configurer le serveur DNS primaire laquoindeacutependant raquo

Par deacutefaut Bind est configureacute en tant que serveur DNS indeacutependantqui nest primaire ou secondaire pour aucun domaine Quel est linteacuterecirctdun tel serveur Faire office de cache DNS En effet le serveur DNSva retenir dans son cache les correspondances IP-DNS demandeacutees parles clients et ne sera pas obligeacute daller chercher agrave chaque fois aupregravesdes autres serveurs DNS la reacuteponse aux requecirctesPar exemple si vous trouvez que le serveur DNS de votre fournisseurdaccegraves est trop long agrave reacutepondre vous aurez inteacuterecirct agrave installer unserveur DNS sur votre ordinateur et configurer votre systegraveme pour quilinterroge en prioriteacute le serveur local Pour optimiser les temps derequecirctes configurez le serveur DNS pour quil demande lesenregistrements quil na pas dans son cache aux serveurs DNS devotre fournisseur daccegraves au lieu daller les demander lui-mecircme aupregravesdes autres serveurs DNSPour cela eacuteditez le fichier namedconf et deacutecommentez les lignes de lasous-section forwarders de la section options en y inscrivant lesadresses IPs des serveurs DNS de votre fournisseur daccegraves Le deacutebutdu fichier namedconf ressemble alors agrave cela

options directory varcachebind

forwarders 19348251101934825111

auth-nxdomain no

ougrave 1934825110 et 1934825111 sont les adresses IPs des serveursDNS de lrsquoENICEnfin modifiez le fichier etcresolvconf et mettez votre serveur enpremiegravere position dans la liste des serveurs DNS

search enicfrnameserver ltIP_de_la_machinegtnameserver 1934825110nameserver 1934825111

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 8 -

23 Configurer le serveur DNS pour creacuteer la zone laquo sleeorg raquo

231 Modifier le fichier laquo namedconf raquo

Ajoutez agrave la fin du fichier namedconf les lignes suivantes

zone sleeorg

type master

file sleeorgzone

ougrave

sleeeorg est le nom de domaine pour lequel votre serveur sera primaire

sleeorgzone deacutesigne le fichier varcachebindsleeorgzone ougrave seront stockeacutes lesenregistrements de la zone

232 Ecriture du fichier de zone

Le fichier de configuration de la zone se preacutesente comme ci-dessous

varcachebindmondomaineorgzone Fichier de zone type pour le domaine sleeorg Tireacute de la formation Debian GNULinux par Alexis de Lattre httpwwwviaecpfr~alexisformation-linux

Utiliser la commande named-checkzone mondomaineorg varcachebindsleeorgzone pour veacuterifier la validiteacute du fichier de zone

Utiliser la commande named-checkconf pour verifier la validite du fichier de configuration etcbindnamedconf

ATTENTION ne pas oublier de mettre a jour le serial a chaque modification des enresgitrements de ce fichier

ATTENTION dans les fichiers de zone les noms DNS complets doivent se terminer par des points (par exemple mastermondomaineorg)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 9 -

Tous les noms DNS qui ne sont pas complets (ie qui ne se terminent pas par un point) se terminent implicitement par mondomaineorg

TTL (Time To Live) par dfaut Le TTL permet de dire aux serveurs DNS tiers quils ne devront pas garder les enregistrements de notre zone en cache au dela de cette dure On met une journe (86400 secondes)$TTL 86400

ENREGISTREMENT SOA (Start Of a zone of Authority)

Cet enregistrement donne le nom du serveur DNS primaire et ladresse mail a laquelle on peut joindre ladministrateur du domaine Par exemple le serveur DNS primaire sappellera ns0 et ladresse mail de ladministrateur sera ltrootns0sleeorggt IN SOA ns0sleeorg rootdnssleeorg (

Serial (ou Numero de serie) de la zone Il permet aux serveurs secondaires de savoir sils ont besoin de se mettre jour en faisant un transfert de zone avec le serveur primaire ou non en comparant leurs serial pour cette zone Par convention il est constitue de la date du jour au format AAAAMMJJ suivi du nombre de modifications deja effectuees sur le fichier de zone dans la journee + 1 Par exemple nous sommes le 1er mai 2003 et cest la deuxieme fois que je modifie le fichier de zone aujourdhui

2006060505

Refresh Intervalle de temps en secondes pendant lequel les serveurs DNS secondaires attendent avant de verifier (et eventuellement de mettre a jour) lenregistrement SOA du serveur DNS primaire On met un 1 journee (86400 secondes)

86400

Retry Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de reessayer une requete vers le serveur DNS primaire si ce dernier nest pas accessible On met 5 minutes (300 secondes)

300

Expire Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de rejeter les informations de zones sils nont pas pu contacter le serveur DNS primaire On met 1 mois (2592000 secondes)

2592000

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 10 -

TTL (Time To Live) minimum Duree minimum du TTL dun enregistrement DNS de la zone On met 1 journee (86400 secondes)

86400)

ENREGISTREMENTS NS

Ces enregistrements donnent les noms DNS des serveurs primaires et secondairessleeorg IN NS ns0sleeorg IN NS ns0

ENREGISTREMENTS A

Les enregistrements A donnent les correspondances DNS lt-gt IP classiques

Pour quune requete DNS ns0sleeorg renvoie 17227131230 qui est lrsquoIP denotre serveur de testns0 IN A 17227131230

ENREGISTREMENTS CNAME

Le champ CNAME est utilise pour faire des alias DNS cest-a-dire avoir une IP qui repond a plusieurs noms DNS

Par exemple pour quune requete DNS wwwsleeorg renvoie aussi lIP du serveur de test

www IN CNAME ns0mailhost IN CNAME ns0

ENREGISTREMENTS MX

Le champ MX est utilise pour les envois de mail Quand un serveur de mail doit envoyer un mail a ladresse ltalexissleeorggt il fait une requete DNS de type MX sur sleeorg Il obtient en retour une liste dadresses IP classees avec des priorites Il essaye alors denvoyer le mail au serveur principale sil est injoignable au serveur secondaire etc

Pour les adresses sleeorg le serveur principal est ns0sleeorg IN MX 10 ns0

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 11 -

ATTENTION on ne met pas de MX sur un CNAME mais uniquement sur un A

Si on veut inclure un autre fichier de ce fichier $INCLUDE nom_de_lautre_fichier

233 Veacuterifications et relance

Veacuterifiez que vous navez pas fait derreur de syntaxe dans le fichier namedconf

named-checkconf

Si la commande naffiche rien cest que le fichier namedconf est valide Ensuiteveacuterifiez la syntaxe du fichier de zone

named-checkzone sleeorg varcachebindsleeorgzone

zone sleeorgIN loaded serial 2006060505

OK

Si la commande naffiche aucun message derreur alors il ny a pas derreur desyntaxe dans le fichier de zone Vous pouvez alors dire agrave Bind de relire son fichier deconfiguration

etcinitdbind9 reload

Attention si vous faites un restart au lieu dun reload le cache de votre serveurDNS se videra

c) Installation du serveur Rhino

Utilitaires annexes requis

La variable drsquoenvironnement JAVA_HOME doit ecirctre pointeacutee sur le reacutepertoire racine duJava SDKPour veacuterifier entrez les commandes ci-dessous

$ which javausrlocaljavabinjava$ java -versionjava version 150_05Java(TM) 2 Runtime Environment Standard Edition (build 150_05-b05)Java HotSpot(TM) Client VM (build 150_05-b05 mixed mode sharing)$ export JAVA_HOME=usrlocaljava$ PATH=$JAVA_HOMEbin$PATH_

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 12 -

Apache Ant 162 doit ecirctre installeacute La variable drsquoenvironnement ANT_HOME doit ecirctrepointeacutee sur le reacutepertoire racine drsquoApache Ant Pour veacuterifier entrez les commandes ci-dessous

$ which antusrlocalantbinant$ ant -versionApache Ant version 162 compiled on July 16 2004$ export ANT_HOME=usrlocalant$ PATH=$ANT_HOMEbin$PATH

La commande unzip

$ which unzipusrbinunzip

Lrsquoutilitaire TAR

$ which tarbintar

Lrsquoutilitaire awk

$ which awkbinawk

Lrsquoutilitaire ldquosedrdquo

$ which sedbinsed

Installation du package RhinoSLEE

Le SDK Rhino SLEE est livreacute sous forme drsquoarchive compresseacutee tar RhinoSDK-142tar On la deacutecompresse gracircce aux commandes ci-dessous

$ tar xvf RhinoSDK-142tar$ cd rhino-sdk-install

Ceci va creacuteer un reacutepertoire ldquorhino_sdk-install raquo contenant les fichiers drsquoinstallation Apartir de ce reacutepertoire lance le script drsquoinstallation laquo rhino-installshrdquoOn obtient le reacutesultat ci-dessous

$ rhino-installshOpen Cloud Rhino SDK InstallationThe Rhino SDK install requires access to a PostgreSQL database serverfor storing persistent configuration and deployment information Thedatabasesettings you enter here are required for the Rhino SDK config files Theinstall script can optionally configure the database for you you will beprompted for this later in the install processPostgres host [localhost]Postgres port [5432]Postgres user [user] entrer le username posseacutedant lrsquoacces a la base SQLPostgres password

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 13 -

Postgres password (again)

On deacutefinit ensuite le nom de la base de donneacutees qui sera creacutee pour contenir lestables necessaries pour le fonctionnement de rhino Ensuite si tous les preacuterequis onteacuteteacute respecteacutes (JAVA_HOME etc) lrsquoinstalleur devrait renseigner automatiquement lesparamegravetres demandeacutes

Database name [rhino]Enter the directory where you want to install the Rhino SDKThese two ports are used for accessing the Management MBeans from a JavaRMI(Remote Method Invocation) client such as the Rhino SDK command-lineutilitiesManagement Interface RMI Registry Port [1199]Management Interface RMI Object Port [1200]This port is used for accessing the JMX Remote server The Rhino WebConsoleuses this for remote managementManagement Interface JMX Remote Service Port [1202]This port is used for the Web Console (Jetty) server and providesremote management user interface This is a secure port (TLS)Secure Web Console HTTPS Port [8443]Enter the location of your Java J2SEJDK installationThis must be at least version 142JAVA_HOME directory [usrlocaljava]Found Java version 142_04The Java heap size is an argument passed to the JVM to specify the amountofmain memory (in megabytes) which should be allocated for running theRhino SDK To prevent extensive disk swapping this should be set to lessthan the total memory available at runtimeJava heap size [512] Network Configuration The Rhino SDK install will now attempt to determine local networksettings The hostname detected here is used by the web console The IPaddresses detected here are used in generating the default securitypolicy for the management interfacesThe following network settings were detected These can be modified afterinstallation by editing homeuserrhinoconfigconfig_variablesCanonical hostname cycloneLocal IP Addresses 192168622 127001 192168022The Rhino SDK installation needs to use the PostgreSQL interactiveclient psql Enter the full path to your local psql client here If you donot have a psql client installed (eg if postgres is running on a remotehostand not installed on this one) then enter - here to skip this questionYou will still need to initialise the database on the remote host usinginit-management-dbshLocation of psql client [usrbinpsql]

Confirm Settings Installation directory homeuserrhinoPostgres host localhostPostgres port 5432Postgres user userDatabase name rhinoJAVA_HOME directory usrlocaljavaManagement Interface RMIJMX Ports 119912001202

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 14 -

Web Console Interface HTTPS Port 8443Are these settings correct (yn) yCreating installation directoryThe installer has detected you are running a 142 JVM This version ofSunsJVM has a bug related to incorrect compilation of a particular list methodSee homeuserrhinoconfighotspot_compiler_fix for more informationWriting configuration to homeuserrhinoconfigconfig_variablesI will now generate the keystores used for secure transport authenticationRemote management and connections must be verified using paired keyshomeuserrhinorhino-publickeystorewith a storepass of changeit and a shared keypass of changeithomeuserrhinorhino-privatekeystorewith a storepass of changeit and a shared keypass of changeitThe behaviour of the Rhino SDK paired key SSL can be configured by editinghomeuserrhinoconfigrmisslservice_namepropertiesCreating key pairs for common servicesExporting the certificates into the public keystore for servicedistributionCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCopying the public keystore to the client distribution directoryThe Open Cloud Rhino SDK is now installed in homeuserrhinoNext Steps- Start the Rhino SDK SLEE by running homeuserrhinostart-rhinosh- Access the Rhino management console at httpscyclone8443- Login with username admin and password password- Deploy the example SIP services see the filehomeuserrhinoexamplessipREADME for more informationOpen Cloud Rhino SDK installation complete

Initialisation de la meacutemoire drsquoexeacutecution de Rhino

Rhino SLEE SDK utilise une base de donneacutees PostgreSQL pour contenir les statutsdes diffeacuterents composants SLEE Pour pouvoir lrsquoutiliser il nous faut initialiser cettebase comme ci-dessous

Attention lrsquoexeacutecution de ce script effacera tout possible base existante et donceffacera toutes les donneacutees continues preacuteceacutedemment

$ init-management-dbshCREATE DATABASEYou are now connected to database rhinoNOTICE CREATE TABLE PRIMARY KEY will create implicit index versioning_pkey for table versioningCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index keyspaces_pkey for table keyspacesCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index timestamps_pkey for table timestampsCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index registrations_pkey for table registrationsCREATE TABLECOMMENT

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 15 -

Deacutemarrage du serveur Rhino

On deacutemarre le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstart-rhinosh Durant le deacutemarrage de celui-ci les eacuteveacutenementssuivants se produisent

1 La JVM se lance2 Le SDK geacuteneacutere et lit sa configuration3 Le SDK initialise et synchronise sa meacutemoire avec le serveur SQL4 Le SDK initialise les laquo per-machine MLets raquo (Management Agents)5 Le SLEE entre en ldquoRUNNING staterdquo6 Le SDK Rhino SLEE SDK est precirct agrave recevoir des commandes drsquoadministration

Arrecirct du serveur Rhino

On arrecircte le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstop-rhinoshOn obtient la sortie suivante

gtstop-rhinosh --niceSLEE shutdown initiated

SLEE stop completed shutdown phase initiatedSLEE shutdown successfully

Interface de management

Un composant SLEE peut ecirctre configure ou manageacute au biais de la console en lignede commande ou de lrsquointerface Web

On deacutemarre la console comme ci-dessous

$ cd $RHINO_HOME$ clientbinrhino-consoleInteractive Management Shell[Rhino (cmd (args) | help (command) | bye) 1] StateSLEE is in the Running state_

On accegravede agrave la console web en rentrant lrsquoadresse httpslthostnamegt8443 dansson browser webLrsquoutilisateur par deacutefaut est ldquoadminrdquo et le mdp ldquopasswordrdquo

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 16 -

Nous pouvons maintenant deacuteployer des services gracircce agrave ces consoles

d) Deacuteploiement du service SIP

Nous devons tout drsquoabord eacutediter le fichier de configuration suivant $RHINO_HOMEexamplessipsipproperties contains these properties

Pour la mise en place du service sur notre serveur de test nous devons tout drsquoabordchanger les parametres comme ci-dessous

Proxy SBB configuration Add names that the proxy host is known by The first name in the list will be treated as the Proxys canonical hostname and will be used in Via and Record-Route headers inserted by the proxyPROXY_HOSTNAMES=ns0sleeorg 127001 On rentre le DNS de notre serveur de test en tant que proxy Add domains that the proxy is authoritative forPROXY_DOMAINS=ns0sleeorgsleeorg On rentre le nom du domaine drsquoapplication de notre plateforme de testpour lesquels le proxy sera actifPROXY_LOOP_DETECTION=falseOn deacutesactive la deacutetection de boucle SIP du fait que le serveur fait agrave lafois DNS et JSLEE server En effet dans les deacutefinitions de la RFC 3261un proxy ne peut pas envoyer une reacuteponse agrave lui-mecircme ( dans notreplateforme de test les utilisateur srsquoauthentifient en userns0sleeorgLes messages qui sont envoyeacutes au proxy sont tout d abord redirigeacutes vers leserveur lui-mecircme (agrave cause du ns0sleeorg) puis transfeacutereacutes au receveur sicelui-ci se trouve dans la table de routage du proxy

Geacuteneacuteration et deacuteploiement des services

Pour creacuteer les uniteacutes de deacuteploiement des services Registrar Proxy et Locationlancez ldquoAntrdquo avec pour cible laquo build raquo comme ci-dessous

userhost~rhinoexamplessip$ ant buildBuildfile buildxmlinit[mkdir] Created dir homeuserrhinoexamplessipjarssipjars[mkdir] Created dir homeuserrhinoexamplessipjarssipclasses

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 6: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 6 -

Deacuteploiement drsquoune plateforme Rhino

Preacute requis drsquoinstallation dans le cas de la mise en place drsquoun Proxy SIP sur uneplateforme JSLEE

- Serveur fonctionnant sous Linux (release UBUNTU pour nos tests)- Le service SQL laquo POSTGRE raquo- Le service DNS laquo Bind raquo- Le serveur JSLEE laquo Rhino OpenCloudraquo- Lrsquouniteacute de deacuteploiement SIP fourni avec Rhino

a) Installation de PostGre

1 Teacuteleacutecharger le package disponible sur le site httpwwwpostgresqlorg2 Deacutecompresser lrsquoarchive dans un reacutepertoire appartenant agrave lrsquoutilisateur3 Exeacutecuter les commandes ci-dessous

configure lance le script de generation de fichiers drsquoinstallationmake lance le make file pour creacuteer les scriptssumake install installe le packagemkdir usrlocalpgsqldata on creacutee un dossier ougrave sera contenu la BDchown ltuser_en_coursgt usrlocalpgsqldata on attribut le dossier agravelrsquoutilisateur en courssu - ltuser_en_coursgtusrlocalpgsqlbininitdb -D usrlocalpgsqldata on initialise leconteneur de BDusrlocalpgsqlbinpostmaster -D usrlocalpgsqldata gtlogfile 2gtamp1 amp on creacutee un fichier de log pour contenir les logs renvoyeacutes par le serviceusrlocalpgsqlbincreatedb test on creacutee une base de donneacutee ldquotestrdquousrlocalpgsqlbinpsql test pour tester le service PGSQL

b) Personnalisation de Bind

1 Installer le service DNS laquo Bind9 raquo

2 Configurer le serveur DNS

21 Les fichiers de configuration

Les fichiers de configuration de Bind se trouvent dans le reacutepertoireetcbind On y trouve notamment le fichier dbroot qui contient lesadresses IP des serveurs DNS racines (ie les serveurs centraux dusystegraveme DNS de lrsquoENIC) et le fichier namedconf qui est le fichier deconfiguration principal de Bind

Le reacutepertoire varcachebind est destineacute agrave accueillir les fichiers dezone pour ceux (ici sleeorgzone) qui veulent configurer un serveurDNS primaire ou secondaire

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 7 -

22 Configurer le serveur DNS primaire laquoindeacutependant raquo

Par deacutefaut Bind est configureacute en tant que serveur DNS indeacutependantqui nest primaire ou secondaire pour aucun domaine Quel est linteacuterecirctdun tel serveur Faire office de cache DNS En effet le serveur DNSva retenir dans son cache les correspondances IP-DNS demandeacutees parles clients et ne sera pas obligeacute daller chercher agrave chaque fois aupregravesdes autres serveurs DNS la reacuteponse aux requecirctesPar exemple si vous trouvez que le serveur DNS de votre fournisseurdaccegraves est trop long agrave reacutepondre vous aurez inteacuterecirct agrave installer unserveur DNS sur votre ordinateur et configurer votre systegraveme pour quilinterroge en prioriteacute le serveur local Pour optimiser les temps derequecirctes configurez le serveur DNS pour quil demande lesenregistrements quil na pas dans son cache aux serveurs DNS devotre fournisseur daccegraves au lieu daller les demander lui-mecircme aupregravesdes autres serveurs DNSPour cela eacuteditez le fichier namedconf et deacutecommentez les lignes de lasous-section forwarders de la section options en y inscrivant lesadresses IPs des serveurs DNS de votre fournisseur daccegraves Le deacutebutdu fichier namedconf ressemble alors agrave cela

options directory varcachebind

forwarders 19348251101934825111

auth-nxdomain no

ougrave 1934825110 et 1934825111 sont les adresses IPs des serveursDNS de lrsquoENICEnfin modifiez le fichier etcresolvconf et mettez votre serveur enpremiegravere position dans la liste des serveurs DNS

search enicfrnameserver ltIP_de_la_machinegtnameserver 1934825110nameserver 1934825111

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 8 -

23 Configurer le serveur DNS pour creacuteer la zone laquo sleeorg raquo

231 Modifier le fichier laquo namedconf raquo

Ajoutez agrave la fin du fichier namedconf les lignes suivantes

zone sleeorg

type master

file sleeorgzone

ougrave

sleeeorg est le nom de domaine pour lequel votre serveur sera primaire

sleeorgzone deacutesigne le fichier varcachebindsleeorgzone ougrave seront stockeacutes lesenregistrements de la zone

232 Ecriture du fichier de zone

Le fichier de configuration de la zone se preacutesente comme ci-dessous

varcachebindmondomaineorgzone Fichier de zone type pour le domaine sleeorg Tireacute de la formation Debian GNULinux par Alexis de Lattre httpwwwviaecpfr~alexisformation-linux

Utiliser la commande named-checkzone mondomaineorg varcachebindsleeorgzone pour veacuterifier la validiteacute du fichier de zone

Utiliser la commande named-checkconf pour verifier la validite du fichier de configuration etcbindnamedconf

ATTENTION ne pas oublier de mettre a jour le serial a chaque modification des enresgitrements de ce fichier

ATTENTION dans les fichiers de zone les noms DNS complets doivent se terminer par des points (par exemple mastermondomaineorg)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 9 -

Tous les noms DNS qui ne sont pas complets (ie qui ne se terminent pas par un point) se terminent implicitement par mondomaineorg

TTL (Time To Live) par dfaut Le TTL permet de dire aux serveurs DNS tiers quils ne devront pas garder les enregistrements de notre zone en cache au dela de cette dure On met une journe (86400 secondes)$TTL 86400

ENREGISTREMENT SOA (Start Of a zone of Authority)

Cet enregistrement donne le nom du serveur DNS primaire et ladresse mail a laquelle on peut joindre ladministrateur du domaine Par exemple le serveur DNS primaire sappellera ns0 et ladresse mail de ladministrateur sera ltrootns0sleeorggt IN SOA ns0sleeorg rootdnssleeorg (

Serial (ou Numero de serie) de la zone Il permet aux serveurs secondaires de savoir sils ont besoin de se mettre jour en faisant un transfert de zone avec le serveur primaire ou non en comparant leurs serial pour cette zone Par convention il est constitue de la date du jour au format AAAAMMJJ suivi du nombre de modifications deja effectuees sur le fichier de zone dans la journee + 1 Par exemple nous sommes le 1er mai 2003 et cest la deuxieme fois que je modifie le fichier de zone aujourdhui

2006060505

Refresh Intervalle de temps en secondes pendant lequel les serveurs DNS secondaires attendent avant de verifier (et eventuellement de mettre a jour) lenregistrement SOA du serveur DNS primaire On met un 1 journee (86400 secondes)

86400

Retry Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de reessayer une requete vers le serveur DNS primaire si ce dernier nest pas accessible On met 5 minutes (300 secondes)

300

Expire Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de rejeter les informations de zones sils nont pas pu contacter le serveur DNS primaire On met 1 mois (2592000 secondes)

2592000

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 10 -

TTL (Time To Live) minimum Duree minimum du TTL dun enregistrement DNS de la zone On met 1 journee (86400 secondes)

86400)

ENREGISTREMENTS NS

Ces enregistrements donnent les noms DNS des serveurs primaires et secondairessleeorg IN NS ns0sleeorg IN NS ns0

ENREGISTREMENTS A

Les enregistrements A donnent les correspondances DNS lt-gt IP classiques

Pour quune requete DNS ns0sleeorg renvoie 17227131230 qui est lrsquoIP denotre serveur de testns0 IN A 17227131230

ENREGISTREMENTS CNAME

Le champ CNAME est utilise pour faire des alias DNS cest-a-dire avoir une IP qui repond a plusieurs noms DNS

Par exemple pour quune requete DNS wwwsleeorg renvoie aussi lIP du serveur de test

www IN CNAME ns0mailhost IN CNAME ns0

ENREGISTREMENTS MX

Le champ MX est utilise pour les envois de mail Quand un serveur de mail doit envoyer un mail a ladresse ltalexissleeorggt il fait une requete DNS de type MX sur sleeorg Il obtient en retour une liste dadresses IP classees avec des priorites Il essaye alors denvoyer le mail au serveur principale sil est injoignable au serveur secondaire etc

Pour les adresses sleeorg le serveur principal est ns0sleeorg IN MX 10 ns0

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 11 -

ATTENTION on ne met pas de MX sur un CNAME mais uniquement sur un A

Si on veut inclure un autre fichier de ce fichier $INCLUDE nom_de_lautre_fichier

233 Veacuterifications et relance

Veacuterifiez que vous navez pas fait derreur de syntaxe dans le fichier namedconf

named-checkconf

Si la commande naffiche rien cest que le fichier namedconf est valide Ensuiteveacuterifiez la syntaxe du fichier de zone

named-checkzone sleeorg varcachebindsleeorgzone

zone sleeorgIN loaded serial 2006060505

OK

Si la commande naffiche aucun message derreur alors il ny a pas derreur desyntaxe dans le fichier de zone Vous pouvez alors dire agrave Bind de relire son fichier deconfiguration

etcinitdbind9 reload

Attention si vous faites un restart au lieu dun reload le cache de votre serveurDNS se videra

c) Installation du serveur Rhino

Utilitaires annexes requis

La variable drsquoenvironnement JAVA_HOME doit ecirctre pointeacutee sur le reacutepertoire racine duJava SDKPour veacuterifier entrez les commandes ci-dessous

$ which javausrlocaljavabinjava$ java -versionjava version 150_05Java(TM) 2 Runtime Environment Standard Edition (build 150_05-b05)Java HotSpot(TM) Client VM (build 150_05-b05 mixed mode sharing)$ export JAVA_HOME=usrlocaljava$ PATH=$JAVA_HOMEbin$PATH_

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 12 -

Apache Ant 162 doit ecirctre installeacute La variable drsquoenvironnement ANT_HOME doit ecirctrepointeacutee sur le reacutepertoire racine drsquoApache Ant Pour veacuterifier entrez les commandes ci-dessous

$ which antusrlocalantbinant$ ant -versionApache Ant version 162 compiled on July 16 2004$ export ANT_HOME=usrlocalant$ PATH=$ANT_HOMEbin$PATH

La commande unzip

$ which unzipusrbinunzip

Lrsquoutilitaire TAR

$ which tarbintar

Lrsquoutilitaire awk

$ which awkbinawk

Lrsquoutilitaire ldquosedrdquo

$ which sedbinsed

Installation du package RhinoSLEE

Le SDK Rhino SLEE est livreacute sous forme drsquoarchive compresseacutee tar RhinoSDK-142tar On la deacutecompresse gracircce aux commandes ci-dessous

$ tar xvf RhinoSDK-142tar$ cd rhino-sdk-install

Ceci va creacuteer un reacutepertoire ldquorhino_sdk-install raquo contenant les fichiers drsquoinstallation Apartir de ce reacutepertoire lance le script drsquoinstallation laquo rhino-installshrdquoOn obtient le reacutesultat ci-dessous

$ rhino-installshOpen Cloud Rhino SDK InstallationThe Rhino SDK install requires access to a PostgreSQL database serverfor storing persistent configuration and deployment information Thedatabasesettings you enter here are required for the Rhino SDK config files Theinstall script can optionally configure the database for you you will beprompted for this later in the install processPostgres host [localhost]Postgres port [5432]Postgres user [user] entrer le username posseacutedant lrsquoacces a la base SQLPostgres password

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 13 -

Postgres password (again)

On deacutefinit ensuite le nom de la base de donneacutees qui sera creacutee pour contenir lestables necessaries pour le fonctionnement de rhino Ensuite si tous les preacuterequis onteacuteteacute respecteacutes (JAVA_HOME etc) lrsquoinstalleur devrait renseigner automatiquement lesparamegravetres demandeacutes

Database name [rhino]Enter the directory where you want to install the Rhino SDKThese two ports are used for accessing the Management MBeans from a JavaRMI(Remote Method Invocation) client such as the Rhino SDK command-lineutilitiesManagement Interface RMI Registry Port [1199]Management Interface RMI Object Port [1200]This port is used for accessing the JMX Remote server The Rhino WebConsoleuses this for remote managementManagement Interface JMX Remote Service Port [1202]This port is used for the Web Console (Jetty) server and providesremote management user interface This is a secure port (TLS)Secure Web Console HTTPS Port [8443]Enter the location of your Java J2SEJDK installationThis must be at least version 142JAVA_HOME directory [usrlocaljava]Found Java version 142_04The Java heap size is an argument passed to the JVM to specify the amountofmain memory (in megabytes) which should be allocated for running theRhino SDK To prevent extensive disk swapping this should be set to lessthan the total memory available at runtimeJava heap size [512] Network Configuration The Rhino SDK install will now attempt to determine local networksettings The hostname detected here is used by the web console The IPaddresses detected here are used in generating the default securitypolicy for the management interfacesThe following network settings were detected These can be modified afterinstallation by editing homeuserrhinoconfigconfig_variablesCanonical hostname cycloneLocal IP Addresses 192168622 127001 192168022The Rhino SDK installation needs to use the PostgreSQL interactiveclient psql Enter the full path to your local psql client here If you donot have a psql client installed (eg if postgres is running on a remotehostand not installed on this one) then enter - here to skip this questionYou will still need to initialise the database on the remote host usinginit-management-dbshLocation of psql client [usrbinpsql]

Confirm Settings Installation directory homeuserrhinoPostgres host localhostPostgres port 5432Postgres user userDatabase name rhinoJAVA_HOME directory usrlocaljavaManagement Interface RMIJMX Ports 119912001202

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 14 -

Web Console Interface HTTPS Port 8443Are these settings correct (yn) yCreating installation directoryThe installer has detected you are running a 142 JVM This version ofSunsJVM has a bug related to incorrect compilation of a particular list methodSee homeuserrhinoconfighotspot_compiler_fix for more informationWriting configuration to homeuserrhinoconfigconfig_variablesI will now generate the keystores used for secure transport authenticationRemote management and connections must be verified using paired keyshomeuserrhinorhino-publickeystorewith a storepass of changeit and a shared keypass of changeithomeuserrhinorhino-privatekeystorewith a storepass of changeit and a shared keypass of changeitThe behaviour of the Rhino SDK paired key SSL can be configured by editinghomeuserrhinoconfigrmisslservice_namepropertiesCreating key pairs for common servicesExporting the certificates into the public keystore for servicedistributionCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCopying the public keystore to the client distribution directoryThe Open Cloud Rhino SDK is now installed in homeuserrhinoNext Steps- Start the Rhino SDK SLEE by running homeuserrhinostart-rhinosh- Access the Rhino management console at httpscyclone8443- Login with username admin and password password- Deploy the example SIP services see the filehomeuserrhinoexamplessipREADME for more informationOpen Cloud Rhino SDK installation complete

Initialisation de la meacutemoire drsquoexeacutecution de Rhino

Rhino SLEE SDK utilise une base de donneacutees PostgreSQL pour contenir les statutsdes diffeacuterents composants SLEE Pour pouvoir lrsquoutiliser il nous faut initialiser cettebase comme ci-dessous

Attention lrsquoexeacutecution de ce script effacera tout possible base existante et donceffacera toutes les donneacutees continues preacuteceacutedemment

$ init-management-dbshCREATE DATABASEYou are now connected to database rhinoNOTICE CREATE TABLE PRIMARY KEY will create implicit index versioning_pkey for table versioningCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index keyspaces_pkey for table keyspacesCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index timestamps_pkey for table timestampsCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index registrations_pkey for table registrationsCREATE TABLECOMMENT

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 15 -

Deacutemarrage du serveur Rhino

On deacutemarre le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstart-rhinosh Durant le deacutemarrage de celui-ci les eacuteveacutenementssuivants se produisent

1 La JVM se lance2 Le SDK geacuteneacutere et lit sa configuration3 Le SDK initialise et synchronise sa meacutemoire avec le serveur SQL4 Le SDK initialise les laquo per-machine MLets raquo (Management Agents)5 Le SLEE entre en ldquoRUNNING staterdquo6 Le SDK Rhino SLEE SDK est precirct agrave recevoir des commandes drsquoadministration

Arrecirct du serveur Rhino

On arrecircte le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstop-rhinoshOn obtient la sortie suivante

gtstop-rhinosh --niceSLEE shutdown initiated

SLEE stop completed shutdown phase initiatedSLEE shutdown successfully

Interface de management

Un composant SLEE peut ecirctre configure ou manageacute au biais de la console en lignede commande ou de lrsquointerface Web

On deacutemarre la console comme ci-dessous

$ cd $RHINO_HOME$ clientbinrhino-consoleInteractive Management Shell[Rhino (cmd (args) | help (command) | bye) 1] StateSLEE is in the Running state_

On accegravede agrave la console web en rentrant lrsquoadresse httpslthostnamegt8443 dansson browser webLrsquoutilisateur par deacutefaut est ldquoadminrdquo et le mdp ldquopasswordrdquo

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 16 -

Nous pouvons maintenant deacuteployer des services gracircce agrave ces consoles

d) Deacuteploiement du service SIP

Nous devons tout drsquoabord eacutediter le fichier de configuration suivant $RHINO_HOMEexamplessipsipproperties contains these properties

Pour la mise en place du service sur notre serveur de test nous devons tout drsquoabordchanger les parametres comme ci-dessous

Proxy SBB configuration Add names that the proxy host is known by The first name in the list will be treated as the Proxys canonical hostname and will be used in Via and Record-Route headers inserted by the proxyPROXY_HOSTNAMES=ns0sleeorg 127001 On rentre le DNS de notre serveur de test en tant que proxy Add domains that the proxy is authoritative forPROXY_DOMAINS=ns0sleeorgsleeorg On rentre le nom du domaine drsquoapplication de notre plateforme de testpour lesquels le proxy sera actifPROXY_LOOP_DETECTION=falseOn deacutesactive la deacutetection de boucle SIP du fait que le serveur fait agrave lafois DNS et JSLEE server En effet dans les deacutefinitions de la RFC 3261un proxy ne peut pas envoyer une reacuteponse agrave lui-mecircme ( dans notreplateforme de test les utilisateur srsquoauthentifient en userns0sleeorgLes messages qui sont envoyeacutes au proxy sont tout d abord redirigeacutes vers leserveur lui-mecircme (agrave cause du ns0sleeorg) puis transfeacutereacutes au receveur sicelui-ci se trouve dans la table de routage du proxy

Geacuteneacuteration et deacuteploiement des services

Pour creacuteer les uniteacutes de deacuteploiement des services Registrar Proxy et Locationlancez ldquoAntrdquo avec pour cible laquo build raquo comme ci-dessous

userhost~rhinoexamplessip$ ant buildBuildfile buildxmlinit[mkdir] Created dir homeuserrhinoexamplessipjarssipjars[mkdir] Created dir homeuserrhinoexamplessipjarssipclasses

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 7: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 7 -

22 Configurer le serveur DNS primaire laquoindeacutependant raquo

Par deacutefaut Bind est configureacute en tant que serveur DNS indeacutependantqui nest primaire ou secondaire pour aucun domaine Quel est linteacuterecirctdun tel serveur Faire office de cache DNS En effet le serveur DNSva retenir dans son cache les correspondances IP-DNS demandeacutees parles clients et ne sera pas obligeacute daller chercher agrave chaque fois aupregravesdes autres serveurs DNS la reacuteponse aux requecirctesPar exemple si vous trouvez que le serveur DNS de votre fournisseurdaccegraves est trop long agrave reacutepondre vous aurez inteacuterecirct agrave installer unserveur DNS sur votre ordinateur et configurer votre systegraveme pour quilinterroge en prioriteacute le serveur local Pour optimiser les temps derequecirctes configurez le serveur DNS pour quil demande lesenregistrements quil na pas dans son cache aux serveurs DNS devotre fournisseur daccegraves au lieu daller les demander lui-mecircme aupregravesdes autres serveurs DNSPour cela eacuteditez le fichier namedconf et deacutecommentez les lignes de lasous-section forwarders de la section options en y inscrivant lesadresses IPs des serveurs DNS de votre fournisseur daccegraves Le deacutebutdu fichier namedconf ressemble alors agrave cela

options directory varcachebind

forwarders 19348251101934825111

auth-nxdomain no

ougrave 1934825110 et 1934825111 sont les adresses IPs des serveursDNS de lrsquoENICEnfin modifiez le fichier etcresolvconf et mettez votre serveur enpremiegravere position dans la liste des serveurs DNS

search enicfrnameserver ltIP_de_la_machinegtnameserver 1934825110nameserver 1934825111

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 8 -

23 Configurer le serveur DNS pour creacuteer la zone laquo sleeorg raquo

231 Modifier le fichier laquo namedconf raquo

Ajoutez agrave la fin du fichier namedconf les lignes suivantes

zone sleeorg

type master

file sleeorgzone

ougrave

sleeeorg est le nom de domaine pour lequel votre serveur sera primaire

sleeorgzone deacutesigne le fichier varcachebindsleeorgzone ougrave seront stockeacutes lesenregistrements de la zone

232 Ecriture du fichier de zone

Le fichier de configuration de la zone se preacutesente comme ci-dessous

varcachebindmondomaineorgzone Fichier de zone type pour le domaine sleeorg Tireacute de la formation Debian GNULinux par Alexis de Lattre httpwwwviaecpfr~alexisformation-linux

Utiliser la commande named-checkzone mondomaineorg varcachebindsleeorgzone pour veacuterifier la validiteacute du fichier de zone

Utiliser la commande named-checkconf pour verifier la validite du fichier de configuration etcbindnamedconf

ATTENTION ne pas oublier de mettre a jour le serial a chaque modification des enresgitrements de ce fichier

ATTENTION dans les fichiers de zone les noms DNS complets doivent se terminer par des points (par exemple mastermondomaineorg)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 9 -

Tous les noms DNS qui ne sont pas complets (ie qui ne se terminent pas par un point) se terminent implicitement par mondomaineorg

TTL (Time To Live) par dfaut Le TTL permet de dire aux serveurs DNS tiers quils ne devront pas garder les enregistrements de notre zone en cache au dela de cette dure On met une journe (86400 secondes)$TTL 86400

ENREGISTREMENT SOA (Start Of a zone of Authority)

Cet enregistrement donne le nom du serveur DNS primaire et ladresse mail a laquelle on peut joindre ladministrateur du domaine Par exemple le serveur DNS primaire sappellera ns0 et ladresse mail de ladministrateur sera ltrootns0sleeorggt IN SOA ns0sleeorg rootdnssleeorg (

Serial (ou Numero de serie) de la zone Il permet aux serveurs secondaires de savoir sils ont besoin de se mettre jour en faisant un transfert de zone avec le serveur primaire ou non en comparant leurs serial pour cette zone Par convention il est constitue de la date du jour au format AAAAMMJJ suivi du nombre de modifications deja effectuees sur le fichier de zone dans la journee + 1 Par exemple nous sommes le 1er mai 2003 et cest la deuxieme fois que je modifie le fichier de zone aujourdhui

2006060505

Refresh Intervalle de temps en secondes pendant lequel les serveurs DNS secondaires attendent avant de verifier (et eventuellement de mettre a jour) lenregistrement SOA du serveur DNS primaire On met un 1 journee (86400 secondes)

86400

Retry Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de reessayer une requete vers le serveur DNS primaire si ce dernier nest pas accessible On met 5 minutes (300 secondes)

300

Expire Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de rejeter les informations de zones sils nont pas pu contacter le serveur DNS primaire On met 1 mois (2592000 secondes)

2592000

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 10 -

TTL (Time To Live) minimum Duree minimum du TTL dun enregistrement DNS de la zone On met 1 journee (86400 secondes)

86400)

ENREGISTREMENTS NS

Ces enregistrements donnent les noms DNS des serveurs primaires et secondairessleeorg IN NS ns0sleeorg IN NS ns0

ENREGISTREMENTS A

Les enregistrements A donnent les correspondances DNS lt-gt IP classiques

Pour quune requete DNS ns0sleeorg renvoie 17227131230 qui est lrsquoIP denotre serveur de testns0 IN A 17227131230

ENREGISTREMENTS CNAME

Le champ CNAME est utilise pour faire des alias DNS cest-a-dire avoir une IP qui repond a plusieurs noms DNS

Par exemple pour quune requete DNS wwwsleeorg renvoie aussi lIP du serveur de test

www IN CNAME ns0mailhost IN CNAME ns0

ENREGISTREMENTS MX

Le champ MX est utilise pour les envois de mail Quand un serveur de mail doit envoyer un mail a ladresse ltalexissleeorggt il fait une requete DNS de type MX sur sleeorg Il obtient en retour une liste dadresses IP classees avec des priorites Il essaye alors denvoyer le mail au serveur principale sil est injoignable au serveur secondaire etc

Pour les adresses sleeorg le serveur principal est ns0sleeorg IN MX 10 ns0

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 11 -

ATTENTION on ne met pas de MX sur un CNAME mais uniquement sur un A

Si on veut inclure un autre fichier de ce fichier $INCLUDE nom_de_lautre_fichier

233 Veacuterifications et relance

Veacuterifiez que vous navez pas fait derreur de syntaxe dans le fichier namedconf

named-checkconf

Si la commande naffiche rien cest que le fichier namedconf est valide Ensuiteveacuterifiez la syntaxe du fichier de zone

named-checkzone sleeorg varcachebindsleeorgzone

zone sleeorgIN loaded serial 2006060505

OK

Si la commande naffiche aucun message derreur alors il ny a pas derreur desyntaxe dans le fichier de zone Vous pouvez alors dire agrave Bind de relire son fichier deconfiguration

etcinitdbind9 reload

Attention si vous faites un restart au lieu dun reload le cache de votre serveurDNS se videra

c) Installation du serveur Rhino

Utilitaires annexes requis

La variable drsquoenvironnement JAVA_HOME doit ecirctre pointeacutee sur le reacutepertoire racine duJava SDKPour veacuterifier entrez les commandes ci-dessous

$ which javausrlocaljavabinjava$ java -versionjava version 150_05Java(TM) 2 Runtime Environment Standard Edition (build 150_05-b05)Java HotSpot(TM) Client VM (build 150_05-b05 mixed mode sharing)$ export JAVA_HOME=usrlocaljava$ PATH=$JAVA_HOMEbin$PATH_

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 12 -

Apache Ant 162 doit ecirctre installeacute La variable drsquoenvironnement ANT_HOME doit ecirctrepointeacutee sur le reacutepertoire racine drsquoApache Ant Pour veacuterifier entrez les commandes ci-dessous

$ which antusrlocalantbinant$ ant -versionApache Ant version 162 compiled on July 16 2004$ export ANT_HOME=usrlocalant$ PATH=$ANT_HOMEbin$PATH

La commande unzip

$ which unzipusrbinunzip

Lrsquoutilitaire TAR

$ which tarbintar

Lrsquoutilitaire awk

$ which awkbinawk

Lrsquoutilitaire ldquosedrdquo

$ which sedbinsed

Installation du package RhinoSLEE

Le SDK Rhino SLEE est livreacute sous forme drsquoarchive compresseacutee tar RhinoSDK-142tar On la deacutecompresse gracircce aux commandes ci-dessous

$ tar xvf RhinoSDK-142tar$ cd rhino-sdk-install

Ceci va creacuteer un reacutepertoire ldquorhino_sdk-install raquo contenant les fichiers drsquoinstallation Apartir de ce reacutepertoire lance le script drsquoinstallation laquo rhino-installshrdquoOn obtient le reacutesultat ci-dessous

$ rhino-installshOpen Cloud Rhino SDK InstallationThe Rhino SDK install requires access to a PostgreSQL database serverfor storing persistent configuration and deployment information Thedatabasesettings you enter here are required for the Rhino SDK config files Theinstall script can optionally configure the database for you you will beprompted for this later in the install processPostgres host [localhost]Postgres port [5432]Postgres user [user] entrer le username posseacutedant lrsquoacces a la base SQLPostgres password

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 13 -

Postgres password (again)

On deacutefinit ensuite le nom de la base de donneacutees qui sera creacutee pour contenir lestables necessaries pour le fonctionnement de rhino Ensuite si tous les preacuterequis onteacuteteacute respecteacutes (JAVA_HOME etc) lrsquoinstalleur devrait renseigner automatiquement lesparamegravetres demandeacutes

Database name [rhino]Enter the directory where you want to install the Rhino SDKThese two ports are used for accessing the Management MBeans from a JavaRMI(Remote Method Invocation) client such as the Rhino SDK command-lineutilitiesManagement Interface RMI Registry Port [1199]Management Interface RMI Object Port [1200]This port is used for accessing the JMX Remote server The Rhino WebConsoleuses this for remote managementManagement Interface JMX Remote Service Port [1202]This port is used for the Web Console (Jetty) server and providesremote management user interface This is a secure port (TLS)Secure Web Console HTTPS Port [8443]Enter the location of your Java J2SEJDK installationThis must be at least version 142JAVA_HOME directory [usrlocaljava]Found Java version 142_04The Java heap size is an argument passed to the JVM to specify the amountofmain memory (in megabytes) which should be allocated for running theRhino SDK To prevent extensive disk swapping this should be set to lessthan the total memory available at runtimeJava heap size [512] Network Configuration The Rhino SDK install will now attempt to determine local networksettings The hostname detected here is used by the web console The IPaddresses detected here are used in generating the default securitypolicy for the management interfacesThe following network settings were detected These can be modified afterinstallation by editing homeuserrhinoconfigconfig_variablesCanonical hostname cycloneLocal IP Addresses 192168622 127001 192168022The Rhino SDK installation needs to use the PostgreSQL interactiveclient psql Enter the full path to your local psql client here If you donot have a psql client installed (eg if postgres is running on a remotehostand not installed on this one) then enter - here to skip this questionYou will still need to initialise the database on the remote host usinginit-management-dbshLocation of psql client [usrbinpsql]

Confirm Settings Installation directory homeuserrhinoPostgres host localhostPostgres port 5432Postgres user userDatabase name rhinoJAVA_HOME directory usrlocaljavaManagement Interface RMIJMX Ports 119912001202

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 14 -

Web Console Interface HTTPS Port 8443Are these settings correct (yn) yCreating installation directoryThe installer has detected you are running a 142 JVM This version ofSunsJVM has a bug related to incorrect compilation of a particular list methodSee homeuserrhinoconfighotspot_compiler_fix for more informationWriting configuration to homeuserrhinoconfigconfig_variablesI will now generate the keystores used for secure transport authenticationRemote management and connections must be verified using paired keyshomeuserrhinorhino-publickeystorewith a storepass of changeit and a shared keypass of changeithomeuserrhinorhino-privatekeystorewith a storepass of changeit and a shared keypass of changeitThe behaviour of the Rhino SDK paired key SSL can be configured by editinghomeuserrhinoconfigrmisslservice_namepropertiesCreating key pairs for common servicesExporting the certificates into the public keystore for servicedistributionCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCopying the public keystore to the client distribution directoryThe Open Cloud Rhino SDK is now installed in homeuserrhinoNext Steps- Start the Rhino SDK SLEE by running homeuserrhinostart-rhinosh- Access the Rhino management console at httpscyclone8443- Login with username admin and password password- Deploy the example SIP services see the filehomeuserrhinoexamplessipREADME for more informationOpen Cloud Rhino SDK installation complete

Initialisation de la meacutemoire drsquoexeacutecution de Rhino

Rhino SLEE SDK utilise une base de donneacutees PostgreSQL pour contenir les statutsdes diffeacuterents composants SLEE Pour pouvoir lrsquoutiliser il nous faut initialiser cettebase comme ci-dessous

Attention lrsquoexeacutecution de ce script effacera tout possible base existante et donceffacera toutes les donneacutees continues preacuteceacutedemment

$ init-management-dbshCREATE DATABASEYou are now connected to database rhinoNOTICE CREATE TABLE PRIMARY KEY will create implicit index versioning_pkey for table versioningCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index keyspaces_pkey for table keyspacesCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index timestamps_pkey for table timestampsCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index registrations_pkey for table registrationsCREATE TABLECOMMENT

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 15 -

Deacutemarrage du serveur Rhino

On deacutemarre le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstart-rhinosh Durant le deacutemarrage de celui-ci les eacuteveacutenementssuivants se produisent

1 La JVM se lance2 Le SDK geacuteneacutere et lit sa configuration3 Le SDK initialise et synchronise sa meacutemoire avec le serveur SQL4 Le SDK initialise les laquo per-machine MLets raquo (Management Agents)5 Le SLEE entre en ldquoRUNNING staterdquo6 Le SDK Rhino SLEE SDK est precirct agrave recevoir des commandes drsquoadministration

Arrecirct du serveur Rhino

On arrecircte le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstop-rhinoshOn obtient la sortie suivante

gtstop-rhinosh --niceSLEE shutdown initiated

SLEE stop completed shutdown phase initiatedSLEE shutdown successfully

Interface de management

Un composant SLEE peut ecirctre configure ou manageacute au biais de la console en lignede commande ou de lrsquointerface Web

On deacutemarre la console comme ci-dessous

$ cd $RHINO_HOME$ clientbinrhino-consoleInteractive Management Shell[Rhino (cmd (args) | help (command) | bye) 1] StateSLEE is in the Running state_

On accegravede agrave la console web en rentrant lrsquoadresse httpslthostnamegt8443 dansson browser webLrsquoutilisateur par deacutefaut est ldquoadminrdquo et le mdp ldquopasswordrdquo

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 16 -

Nous pouvons maintenant deacuteployer des services gracircce agrave ces consoles

d) Deacuteploiement du service SIP

Nous devons tout drsquoabord eacutediter le fichier de configuration suivant $RHINO_HOMEexamplessipsipproperties contains these properties

Pour la mise en place du service sur notre serveur de test nous devons tout drsquoabordchanger les parametres comme ci-dessous

Proxy SBB configuration Add names that the proxy host is known by The first name in the list will be treated as the Proxys canonical hostname and will be used in Via and Record-Route headers inserted by the proxyPROXY_HOSTNAMES=ns0sleeorg 127001 On rentre le DNS de notre serveur de test en tant que proxy Add domains that the proxy is authoritative forPROXY_DOMAINS=ns0sleeorgsleeorg On rentre le nom du domaine drsquoapplication de notre plateforme de testpour lesquels le proxy sera actifPROXY_LOOP_DETECTION=falseOn deacutesactive la deacutetection de boucle SIP du fait que le serveur fait agrave lafois DNS et JSLEE server En effet dans les deacutefinitions de la RFC 3261un proxy ne peut pas envoyer une reacuteponse agrave lui-mecircme ( dans notreplateforme de test les utilisateur srsquoauthentifient en userns0sleeorgLes messages qui sont envoyeacutes au proxy sont tout d abord redirigeacutes vers leserveur lui-mecircme (agrave cause du ns0sleeorg) puis transfeacutereacutes au receveur sicelui-ci se trouve dans la table de routage du proxy

Geacuteneacuteration et deacuteploiement des services

Pour creacuteer les uniteacutes de deacuteploiement des services Registrar Proxy et Locationlancez ldquoAntrdquo avec pour cible laquo build raquo comme ci-dessous

userhost~rhinoexamplessip$ ant buildBuildfile buildxmlinit[mkdir] Created dir homeuserrhinoexamplessipjarssipjars[mkdir] Created dir homeuserrhinoexamplessipjarssipclasses

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 8: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 8 -

23 Configurer le serveur DNS pour creacuteer la zone laquo sleeorg raquo

231 Modifier le fichier laquo namedconf raquo

Ajoutez agrave la fin du fichier namedconf les lignes suivantes

zone sleeorg

type master

file sleeorgzone

ougrave

sleeeorg est le nom de domaine pour lequel votre serveur sera primaire

sleeorgzone deacutesigne le fichier varcachebindsleeorgzone ougrave seront stockeacutes lesenregistrements de la zone

232 Ecriture du fichier de zone

Le fichier de configuration de la zone se preacutesente comme ci-dessous

varcachebindmondomaineorgzone Fichier de zone type pour le domaine sleeorg Tireacute de la formation Debian GNULinux par Alexis de Lattre httpwwwviaecpfr~alexisformation-linux

Utiliser la commande named-checkzone mondomaineorg varcachebindsleeorgzone pour veacuterifier la validiteacute du fichier de zone

Utiliser la commande named-checkconf pour verifier la validite du fichier de configuration etcbindnamedconf

ATTENTION ne pas oublier de mettre a jour le serial a chaque modification des enresgitrements de ce fichier

ATTENTION dans les fichiers de zone les noms DNS complets doivent se terminer par des points (par exemple mastermondomaineorg)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 9 -

Tous les noms DNS qui ne sont pas complets (ie qui ne se terminent pas par un point) se terminent implicitement par mondomaineorg

TTL (Time To Live) par dfaut Le TTL permet de dire aux serveurs DNS tiers quils ne devront pas garder les enregistrements de notre zone en cache au dela de cette dure On met une journe (86400 secondes)$TTL 86400

ENREGISTREMENT SOA (Start Of a zone of Authority)

Cet enregistrement donne le nom du serveur DNS primaire et ladresse mail a laquelle on peut joindre ladministrateur du domaine Par exemple le serveur DNS primaire sappellera ns0 et ladresse mail de ladministrateur sera ltrootns0sleeorggt IN SOA ns0sleeorg rootdnssleeorg (

Serial (ou Numero de serie) de la zone Il permet aux serveurs secondaires de savoir sils ont besoin de se mettre jour en faisant un transfert de zone avec le serveur primaire ou non en comparant leurs serial pour cette zone Par convention il est constitue de la date du jour au format AAAAMMJJ suivi du nombre de modifications deja effectuees sur le fichier de zone dans la journee + 1 Par exemple nous sommes le 1er mai 2003 et cest la deuxieme fois que je modifie le fichier de zone aujourdhui

2006060505

Refresh Intervalle de temps en secondes pendant lequel les serveurs DNS secondaires attendent avant de verifier (et eventuellement de mettre a jour) lenregistrement SOA du serveur DNS primaire On met un 1 journee (86400 secondes)

86400

Retry Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de reessayer une requete vers le serveur DNS primaire si ce dernier nest pas accessible On met 5 minutes (300 secondes)

300

Expire Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de rejeter les informations de zones sils nont pas pu contacter le serveur DNS primaire On met 1 mois (2592000 secondes)

2592000

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 10 -

TTL (Time To Live) minimum Duree minimum du TTL dun enregistrement DNS de la zone On met 1 journee (86400 secondes)

86400)

ENREGISTREMENTS NS

Ces enregistrements donnent les noms DNS des serveurs primaires et secondairessleeorg IN NS ns0sleeorg IN NS ns0

ENREGISTREMENTS A

Les enregistrements A donnent les correspondances DNS lt-gt IP classiques

Pour quune requete DNS ns0sleeorg renvoie 17227131230 qui est lrsquoIP denotre serveur de testns0 IN A 17227131230

ENREGISTREMENTS CNAME

Le champ CNAME est utilise pour faire des alias DNS cest-a-dire avoir une IP qui repond a plusieurs noms DNS

Par exemple pour quune requete DNS wwwsleeorg renvoie aussi lIP du serveur de test

www IN CNAME ns0mailhost IN CNAME ns0

ENREGISTREMENTS MX

Le champ MX est utilise pour les envois de mail Quand un serveur de mail doit envoyer un mail a ladresse ltalexissleeorggt il fait une requete DNS de type MX sur sleeorg Il obtient en retour une liste dadresses IP classees avec des priorites Il essaye alors denvoyer le mail au serveur principale sil est injoignable au serveur secondaire etc

Pour les adresses sleeorg le serveur principal est ns0sleeorg IN MX 10 ns0

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 11 -

ATTENTION on ne met pas de MX sur un CNAME mais uniquement sur un A

Si on veut inclure un autre fichier de ce fichier $INCLUDE nom_de_lautre_fichier

233 Veacuterifications et relance

Veacuterifiez que vous navez pas fait derreur de syntaxe dans le fichier namedconf

named-checkconf

Si la commande naffiche rien cest que le fichier namedconf est valide Ensuiteveacuterifiez la syntaxe du fichier de zone

named-checkzone sleeorg varcachebindsleeorgzone

zone sleeorgIN loaded serial 2006060505

OK

Si la commande naffiche aucun message derreur alors il ny a pas derreur desyntaxe dans le fichier de zone Vous pouvez alors dire agrave Bind de relire son fichier deconfiguration

etcinitdbind9 reload

Attention si vous faites un restart au lieu dun reload le cache de votre serveurDNS se videra

c) Installation du serveur Rhino

Utilitaires annexes requis

La variable drsquoenvironnement JAVA_HOME doit ecirctre pointeacutee sur le reacutepertoire racine duJava SDKPour veacuterifier entrez les commandes ci-dessous

$ which javausrlocaljavabinjava$ java -versionjava version 150_05Java(TM) 2 Runtime Environment Standard Edition (build 150_05-b05)Java HotSpot(TM) Client VM (build 150_05-b05 mixed mode sharing)$ export JAVA_HOME=usrlocaljava$ PATH=$JAVA_HOMEbin$PATH_

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 12 -

Apache Ant 162 doit ecirctre installeacute La variable drsquoenvironnement ANT_HOME doit ecirctrepointeacutee sur le reacutepertoire racine drsquoApache Ant Pour veacuterifier entrez les commandes ci-dessous

$ which antusrlocalantbinant$ ant -versionApache Ant version 162 compiled on July 16 2004$ export ANT_HOME=usrlocalant$ PATH=$ANT_HOMEbin$PATH

La commande unzip

$ which unzipusrbinunzip

Lrsquoutilitaire TAR

$ which tarbintar

Lrsquoutilitaire awk

$ which awkbinawk

Lrsquoutilitaire ldquosedrdquo

$ which sedbinsed

Installation du package RhinoSLEE

Le SDK Rhino SLEE est livreacute sous forme drsquoarchive compresseacutee tar RhinoSDK-142tar On la deacutecompresse gracircce aux commandes ci-dessous

$ tar xvf RhinoSDK-142tar$ cd rhino-sdk-install

Ceci va creacuteer un reacutepertoire ldquorhino_sdk-install raquo contenant les fichiers drsquoinstallation Apartir de ce reacutepertoire lance le script drsquoinstallation laquo rhino-installshrdquoOn obtient le reacutesultat ci-dessous

$ rhino-installshOpen Cloud Rhino SDK InstallationThe Rhino SDK install requires access to a PostgreSQL database serverfor storing persistent configuration and deployment information Thedatabasesettings you enter here are required for the Rhino SDK config files Theinstall script can optionally configure the database for you you will beprompted for this later in the install processPostgres host [localhost]Postgres port [5432]Postgres user [user] entrer le username posseacutedant lrsquoacces a la base SQLPostgres password

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 13 -

Postgres password (again)

On deacutefinit ensuite le nom de la base de donneacutees qui sera creacutee pour contenir lestables necessaries pour le fonctionnement de rhino Ensuite si tous les preacuterequis onteacuteteacute respecteacutes (JAVA_HOME etc) lrsquoinstalleur devrait renseigner automatiquement lesparamegravetres demandeacutes

Database name [rhino]Enter the directory where you want to install the Rhino SDKThese two ports are used for accessing the Management MBeans from a JavaRMI(Remote Method Invocation) client such as the Rhino SDK command-lineutilitiesManagement Interface RMI Registry Port [1199]Management Interface RMI Object Port [1200]This port is used for accessing the JMX Remote server The Rhino WebConsoleuses this for remote managementManagement Interface JMX Remote Service Port [1202]This port is used for the Web Console (Jetty) server and providesremote management user interface This is a secure port (TLS)Secure Web Console HTTPS Port [8443]Enter the location of your Java J2SEJDK installationThis must be at least version 142JAVA_HOME directory [usrlocaljava]Found Java version 142_04The Java heap size is an argument passed to the JVM to specify the amountofmain memory (in megabytes) which should be allocated for running theRhino SDK To prevent extensive disk swapping this should be set to lessthan the total memory available at runtimeJava heap size [512] Network Configuration The Rhino SDK install will now attempt to determine local networksettings The hostname detected here is used by the web console The IPaddresses detected here are used in generating the default securitypolicy for the management interfacesThe following network settings were detected These can be modified afterinstallation by editing homeuserrhinoconfigconfig_variablesCanonical hostname cycloneLocal IP Addresses 192168622 127001 192168022The Rhino SDK installation needs to use the PostgreSQL interactiveclient psql Enter the full path to your local psql client here If you donot have a psql client installed (eg if postgres is running on a remotehostand not installed on this one) then enter - here to skip this questionYou will still need to initialise the database on the remote host usinginit-management-dbshLocation of psql client [usrbinpsql]

Confirm Settings Installation directory homeuserrhinoPostgres host localhostPostgres port 5432Postgres user userDatabase name rhinoJAVA_HOME directory usrlocaljavaManagement Interface RMIJMX Ports 119912001202

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 14 -

Web Console Interface HTTPS Port 8443Are these settings correct (yn) yCreating installation directoryThe installer has detected you are running a 142 JVM This version ofSunsJVM has a bug related to incorrect compilation of a particular list methodSee homeuserrhinoconfighotspot_compiler_fix for more informationWriting configuration to homeuserrhinoconfigconfig_variablesI will now generate the keystores used for secure transport authenticationRemote management and connections must be verified using paired keyshomeuserrhinorhino-publickeystorewith a storepass of changeit and a shared keypass of changeithomeuserrhinorhino-privatekeystorewith a storepass of changeit and a shared keypass of changeitThe behaviour of the Rhino SDK paired key SSL can be configured by editinghomeuserrhinoconfigrmisslservice_namepropertiesCreating key pairs for common servicesExporting the certificates into the public keystore for servicedistributionCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCopying the public keystore to the client distribution directoryThe Open Cloud Rhino SDK is now installed in homeuserrhinoNext Steps- Start the Rhino SDK SLEE by running homeuserrhinostart-rhinosh- Access the Rhino management console at httpscyclone8443- Login with username admin and password password- Deploy the example SIP services see the filehomeuserrhinoexamplessipREADME for more informationOpen Cloud Rhino SDK installation complete

Initialisation de la meacutemoire drsquoexeacutecution de Rhino

Rhino SLEE SDK utilise une base de donneacutees PostgreSQL pour contenir les statutsdes diffeacuterents composants SLEE Pour pouvoir lrsquoutiliser il nous faut initialiser cettebase comme ci-dessous

Attention lrsquoexeacutecution de ce script effacera tout possible base existante et donceffacera toutes les donneacutees continues preacuteceacutedemment

$ init-management-dbshCREATE DATABASEYou are now connected to database rhinoNOTICE CREATE TABLE PRIMARY KEY will create implicit index versioning_pkey for table versioningCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index keyspaces_pkey for table keyspacesCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index timestamps_pkey for table timestampsCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index registrations_pkey for table registrationsCREATE TABLECOMMENT

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 15 -

Deacutemarrage du serveur Rhino

On deacutemarre le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstart-rhinosh Durant le deacutemarrage de celui-ci les eacuteveacutenementssuivants se produisent

1 La JVM se lance2 Le SDK geacuteneacutere et lit sa configuration3 Le SDK initialise et synchronise sa meacutemoire avec le serveur SQL4 Le SDK initialise les laquo per-machine MLets raquo (Management Agents)5 Le SLEE entre en ldquoRUNNING staterdquo6 Le SDK Rhino SLEE SDK est precirct agrave recevoir des commandes drsquoadministration

Arrecirct du serveur Rhino

On arrecircte le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstop-rhinoshOn obtient la sortie suivante

gtstop-rhinosh --niceSLEE shutdown initiated

SLEE stop completed shutdown phase initiatedSLEE shutdown successfully

Interface de management

Un composant SLEE peut ecirctre configure ou manageacute au biais de la console en lignede commande ou de lrsquointerface Web

On deacutemarre la console comme ci-dessous

$ cd $RHINO_HOME$ clientbinrhino-consoleInteractive Management Shell[Rhino (cmd (args) | help (command) | bye) 1] StateSLEE is in the Running state_

On accegravede agrave la console web en rentrant lrsquoadresse httpslthostnamegt8443 dansson browser webLrsquoutilisateur par deacutefaut est ldquoadminrdquo et le mdp ldquopasswordrdquo

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 16 -

Nous pouvons maintenant deacuteployer des services gracircce agrave ces consoles

d) Deacuteploiement du service SIP

Nous devons tout drsquoabord eacutediter le fichier de configuration suivant $RHINO_HOMEexamplessipsipproperties contains these properties

Pour la mise en place du service sur notre serveur de test nous devons tout drsquoabordchanger les parametres comme ci-dessous

Proxy SBB configuration Add names that the proxy host is known by The first name in the list will be treated as the Proxys canonical hostname and will be used in Via and Record-Route headers inserted by the proxyPROXY_HOSTNAMES=ns0sleeorg 127001 On rentre le DNS de notre serveur de test en tant que proxy Add domains that the proxy is authoritative forPROXY_DOMAINS=ns0sleeorgsleeorg On rentre le nom du domaine drsquoapplication de notre plateforme de testpour lesquels le proxy sera actifPROXY_LOOP_DETECTION=falseOn deacutesactive la deacutetection de boucle SIP du fait que le serveur fait agrave lafois DNS et JSLEE server En effet dans les deacutefinitions de la RFC 3261un proxy ne peut pas envoyer une reacuteponse agrave lui-mecircme ( dans notreplateforme de test les utilisateur srsquoauthentifient en userns0sleeorgLes messages qui sont envoyeacutes au proxy sont tout d abord redirigeacutes vers leserveur lui-mecircme (agrave cause du ns0sleeorg) puis transfeacutereacutes au receveur sicelui-ci se trouve dans la table de routage du proxy

Geacuteneacuteration et deacuteploiement des services

Pour creacuteer les uniteacutes de deacuteploiement des services Registrar Proxy et Locationlancez ldquoAntrdquo avec pour cible laquo build raquo comme ci-dessous

userhost~rhinoexamplessip$ ant buildBuildfile buildxmlinit[mkdir] Created dir homeuserrhinoexamplessipjarssipjars[mkdir] Created dir homeuserrhinoexamplessipjarssipclasses

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 9: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 9 -

Tous les noms DNS qui ne sont pas complets (ie qui ne se terminent pas par un point) se terminent implicitement par mondomaineorg

TTL (Time To Live) par dfaut Le TTL permet de dire aux serveurs DNS tiers quils ne devront pas garder les enregistrements de notre zone en cache au dela de cette dure On met une journe (86400 secondes)$TTL 86400

ENREGISTREMENT SOA (Start Of a zone of Authority)

Cet enregistrement donne le nom du serveur DNS primaire et ladresse mail a laquelle on peut joindre ladministrateur du domaine Par exemple le serveur DNS primaire sappellera ns0 et ladresse mail de ladministrateur sera ltrootns0sleeorggt IN SOA ns0sleeorg rootdnssleeorg (

Serial (ou Numero de serie) de la zone Il permet aux serveurs secondaires de savoir sils ont besoin de se mettre jour en faisant un transfert de zone avec le serveur primaire ou non en comparant leurs serial pour cette zone Par convention il est constitue de la date du jour au format AAAAMMJJ suivi du nombre de modifications deja effectuees sur le fichier de zone dans la journee + 1 Par exemple nous sommes le 1er mai 2003 et cest la deuxieme fois que je modifie le fichier de zone aujourdhui

2006060505

Refresh Intervalle de temps en secondes pendant lequel les serveurs DNS secondaires attendent avant de verifier (et eventuellement de mettre a jour) lenregistrement SOA du serveur DNS primaire On met un 1 journee (86400 secondes)

86400

Retry Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de reessayer une requete vers le serveur DNS primaire si ce dernier nest pas accessible On met 5 minutes (300 secondes)

300

Expire Intervalle de temps en secondes durant lequel les serveurs DNS secondaires attendent avant de rejeter les informations de zones sils nont pas pu contacter le serveur DNS primaire On met 1 mois (2592000 secondes)

2592000

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 10 -

TTL (Time To Live) minimum Duree minimum du TTL dun enregistrement DNS de la zone On met 1 journee (86400 secondes)

86400)

ENREGISTREMENTS NS

Ces enregistrements donnent les noms DNS des serveurs primaires et secondairessleeorg IN NS ns0sleeorg IN NS ns0

ENREGISTREMENTS A

Les enregistrements A donnent les correspondances DNS lt-gt IP classiques

Pour quune requete DNS ns0sleeorg renvoie 17227131230 qui est lrsquoIP denotre serveur de testns0 IN A 17227131230

ENREGISTREMENTS CNAME

Le champ CNAME est utilise pour faire des alias DNS cest-a-dire avoir une IP qui repond a plusieurs noms DNS

Par exemple pour quune requete DNS wwwsleeorg renvoie aussi lIP du serveur de test

www IN CNAME ns0mailhost IN CNAME ns0

ENREGISTREMENTS MX

Le champ MX est utilise pour les envois de mail Quand un serveur de mail doit envoyer un mail a ladresse ltalexissleeorggt il fait une requete DNS de type MX sur sleeorg Il obtient en retour une liste dadresses IP classees avec des priorites Il essaye alors denvoyer le mail au serveur principale sil est injoignable au serveur secondaire etc

Pour les adresses sleeorg le serveur principal est ns0sleeorg IN MX 10 ns0

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 11 -

ATTENTION on ne met pas de MX sur un CNAME mais uniquement sur un A

Si on veut inclure un autre fichier de ce fichier $INCLUDE nom_de_lautre_fichier

233 Veacuterifications et relance

Veacuterifiez que vous navez pas fait derreur de syntaxe dans le fichier namedconf

named-checkconf

Si la commande naffiche rien cest que le fichier namedconf est valide Ensuiteveacuterifiez la syntaxe du fichier de zone

named-checkzone sleeorg varcachebindsleeorgzone

zone sleeorgIN loaded serial 2006060505

OK

Si la commande naffiche aucun message derreur alors il ny a pas derreur desyntaxe dans le fichier de zone Vous pouvez alors dire agrave Bind de relire son fichier deconfiguration

etcinitdbind9 reload

Attention si vous faites un restart au lieu dun reload le cache de votre serveurDNS se videra

c) Installation du serveur Rhino

Utilitaires annexes requis

La variable drsquoenvironnement JAVA_HOME doit ecirctre pointeacutee sur le reacutepertoire racine duJava SDKPour veacuterifier entrez les commandes ci-dessous

$ which javausrlocaljavabinjava$ java -versionjava version 150_05Java(TM) 2 Runtime Environment Standard Edition (build 150_05-b05)Java HotSpot(TM) Client VM (build 150_05-b05 mixed mode sharing)$ export JAVA_HOME=usrlocaljava$ PATH=$JAVA_HOMEbin$PATH_

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 12 -

Apache Ant 162 doit ecirctre installeacute La variable drsquoenvironnement ANT_HOME doit ecirctrepointeacutee sur le reacutepertoire racine drsquoApache Ant Pour veacuterifier entrez les commandes ci-dessous

$ which antusrlocalantbinant$ ant -versionApache Ant version 162 compiled on July 16 2004$ export ANT_HOME=usrlocalant$ PATH=$ANT_HOMEbin$PATH

La commande unzip

$ which unzipusrbinunzip

Lrsquoutilitaire TAR

$ which tarbintar

Lrsquoutilitaire awk

$ which awkbinawk

Lrsquoutilitaire ldquosedrdquo

$ which sedbinsed

Installation du package RhinoSLEE

Le SDK Rhino SLEE est livreacute sous forme drsquoarchive compresseacutee tar RhinoSDK-142tar On la deacutecompresse gracircce aux commandes ci-dessous

$ tar xvf RhinoSDK-142tar$ cd rhino-sdk-install

Ceci va creacuteer un reacutepertoire ldquorhino_sdk-install raquo contenant les fichiers drsquoinstallation Apartir de ce reacutepertoire lance le script drsquoinstallation laquo rhino-installshrdquoOn obtient le reacutesultat ci-dessous

$ rhino-installshOpen Cloud Rhino SDK InstallationThe Rhino SDK install requires access to a PostgreSQL database serverfor storing persistent configuration and deployment information Thedatabasesettings you enter here are required for the Rhino SDK config files Theinstall script can optionally configure the database for you you will beprompted for this later in the install processPostgres host [localhost]Postgres port [5432]Postgres user [user] entrer le username posseacutedant lrsquoacces a la base SQLPostgres password

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 13 -

Postgres password (again)

On deacutefinit ensuite le nom de la base de donneacutees qui sera creacutee pour contenir lestables necessaries pour le fonctionnement de rhino Ensuite si tous les preacuterequis onteacuteteacute respecteacutes (JAVA_HOME etc) lrsquoinstalleur devrait renseigner automatiquement lesparamegravetres demandeacutes

Database name [rhino]Enter the directory where you want to install the Rhino SDKThese two ports are used for accessing the Management MBeans from a JavaRMI(Remote Method Invocation) client such as the Rhino SDK command-lineutilitiesManagement Interface RMI Registry Port [1199]Management Interface RMI Object Port [1200]This port is used for accessing the JMX Remote server The Rhino WebConsoleuses this for remote managementManagement Interface JMX Remote Service Port [1202]This port is used for the Web Console (Jetty) server and providesremote management user interface This is a secure port (TLS)Secure Web Console HTTPS Port [8443]Enter the location of your Java J2SEJDK installationThis must be at least version 142JAVA_HOME directory [usrlocaljava]Found Java version 142_04The Java heap size is an argument passed to the JVM to specify the amountofmain memory (in megabytes) which should be allocated for running theRhino SDK To prevent extensive disk swapping this should be set to lessthan the total memory available at runtimeJava heap size [512] Network Configuration The Rhino SDK install will now attempt to determine local networksettings The hostname detected here is used by the web console The IPaddresses detected here are used in generating the default securitypolicy for the management interfacesThe following network settings were detected These can be modified afterinstallation by editing homeuserrhinoconfigconfig_variablesCanonical hostname cycloneLocal IP Addresses 192168622 127001 192168022The Rhino SDK installation needs to use the PostgreSQL interactiveclient psql Enter the full path to your local psql client here If you donot have a psql client installed (eg if postgres is running on a remotehostand not installed on this one) then enter - here to skip this questionYou will still need to initialise the database on the remote host usinginit-management-dbshLocation of psql client [usrbinpsql]

Confirm Settings Installation directory homeuserrhinoPostgres host localhostPostgres port 5432Postgres user userDatabase name rhinoJAVA_HOME directory usrlocaljavaManagement Interface RMIJMX Ports 119912001202

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 14 -

Web Console Interface HTTPS Port 8443Are these settings correct (yn) yCreating installation directoryThe installer has detected you are running a 142 JVM This version ofSunsJVM has a bug related to incorrect compilation of a particular list methodSee homeuserrhinoconfighotspot_compiler_fix for more informationWriting configuration to homeuserrhinoconfigconfig_variablesI will now generate the keystores used for secure transport authenticationRemote management and connections must be verified using paired keyshomeuserrhinorhino-publickeystorewith a storepass of changeit and a shared keypass of changeithomeuserrhinorhino-privatekeystorewith a storepass of changeit and a shared keypass of changeitThe behaviour of the Rhino SDK paired key SSL can be configured by editinghomeuserrhinoconfigrmisslservice_namepropertiesCreating key pairs for common servicesExporting the certificates into the public keystore for servicedistributionCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCopying the public keystore to the client distribution directoryThe Open Cloud Rhino SDK is now installed in homeuserrhinoNext Steps- Start the Rhino SDK SLEE by running homeuserrhinostart-rhinosh- Access the Rhino management console at httpscyclone8443- Login with username admin and password password- Deploy the example SIP services see the filehomeuserrhinoexamplessipREADME for more informationOpen Cloud Rhino SDK installation complete

Initialisation de la meacutemoire drsquoexeacutecution de Rhino

Rhino SLEE SDK utilise une base de donneacutees PostgreSQL pour contenir les statutsdes diffeacuterents composants SLEE Pour pouvoir lrsquoutiliser il nous faut initialiser cettebase comme ci-dessous

Attention lrsquoexeacutecution de ce script effacera tout possible base existante et donceffacera toutes les donneacutees continues preacuteceacutedemment

$ init-management-dbshCREATE DATABASEYou are now connected to database rhinoNOTICE CREATE TABLE PRIMARY KEY will create implicit index versioning_pkey for table versioningCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index keyspaces_pkey for table keyspacesCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index timestamps_pkey for table timestampsCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index registrations_pkey for table registrationsCREATE TABLECOMMENT

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 15 -

Deacutemarrage du serveur Rhino

On deacutemarre le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstart-rhinosh Durant le deacutemarrage de celui-ci les eacuteveacutenementssuivants se produisent

1 La JVM se lance2 Le SDK geacuteneacutere et lit sa configuration3 Le SDK initialise et synchronise sa meacutemoire avec le serveur SQL4 Le SDK initialise les laquo per-machine MLets raquo (Management Agents)5 Le SLEE entre en ldquoRUNNING staterdquo6 Le SDK Rhino SLEE SDK est precirct agrave recevoir des commandes drsquoadministration

Arrecirct du serveur Rhino

On arrecircte le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstop-rhinoshOn obtient la sortie suivante

gtstop-rhinosh --niceSLEE shutdown initiated

SLEE stop completed shutdown phase initiatedSLEE shutdown successfully

Interface de management

Un composant SLEE peut ecirctre configure ou manageacute au biais de la console en lignede commande ou de lrsquointerface Web

On deacutemarre la console comme ci-dessous

$ cd $RHINO_HOME$ clientbinrhino-consoleInteractive Management Shell[Rhino (cmd (args) | help (command) | bye) 1] StateSLEE is in the Running state_

On accegravede agrave la console web en rentrant lrsquoadresse httpslthostnamegt8443 dansson browser webLrsquoutilisateur par deacutefaut est ldquoadminrdquo et le mdp ldquopasswordrdquo

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 16 -

Nous pouvons maintenant deacuteployer des services gracircce agrave ces consoles

d) Deacuteploiement du service SIP

Nous devons tout drsquoabord eacutediter le fichier de configuration suivant $RHINO_HOMEexamplessipsipproperties contains these properties

Pour la mise en place du service sur notre serveur de test nous devons tout drsquoabordchanger les parametres comme ci-dessous

Proxy SBB configuration Add names that the proxy host is known by The first name in the list will be treated as the Proxys canonical hostname and will be used in Via and Record-Route headers inserted by the proxyPROXY_HOSTNAMES=ns0sleeorg 127001 On rentre le DNS de notre serveur de test en tant que proxy Add domains that the proxy is authoritative forPROXY_DOMAINS=ns0sleeorgsleeorg On rentre le nom du domaine drsquoapplication de notre plateforme de testpour lesquels le proxy sera actifPROXY_LOOP_DETECTION=falseOn deacutesactive la deacutetection de boucle SIP du fait que le serveur fait agrave lafois DNS et JSLEE server En effet dans les deacutefinitions de la RFC 3261un proxy ne peut pas envoyer une reacuteponse agrave lui-mecircme ( dans notreplateforme de test les utilisateur srsquoauthentifient en userns0sleeorgLes messages qui sont envoyeacutes au proxy sont tout d abord redirigeacutes vers leserveur lui-mecircme (agrave cause du ns0sleeorg) puis transfeacutereacutes au receveur sicelui-ci se trouve dans la table de routage du proxy

Geacuteneacuteration et deacuteploiement des services

Pour creacuteer les uniteacutes de deacuteploiement des services Registrar Proxy et Locationlancez ldquoAntrdquo avec pour cible laquo build raquo comme ci-dessous

userhost~rhinoexamplessip$ ant buildBuildfile buildxmlinit[mkdir] Created dir homeuserrhinoexamplessipjarssipjars[mkdir] Created dir homeuserrhinoexamplessipjarssipclasses

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 10: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 10 -

TTL (Time To Live) minimum Duree minimum du TTL dun enregistrement DNS de la zone On met 1 journee (86400 secondes)

86400)

ENREGISTREMENTS NS

Ces enregistrements donnent les noms DNS des serveurs primaires et secondairessleeorg IN NS ns0sleeorg IN NS ns0

ENREGISTREMENTS A

Les enregistrements A donnent les correspondances DNS lt-gt IP classiques

Pour quune requete DNS ns0sleeorg renvoie 17227131230 qui est lrsquoIP denotre serveur de testns0 IN A 17227131230

ENREGISTREMENTS CNAME

Le champ CNAME est utilise pour faire des alias DNS cest-a-dire avoir une IP qui repond a plusieurs noms DNS

Par exemple pour quune requete DNS wwwsleeorg renvoie aussi lIP du serveur de test

www IN CNAME ns0mailhost IN CNAME ns0

ENREGISTREMENTS MX

Le champ MX est utilise pour les envois de mail Quand un serveur de mail doit envoyer un mail a ladresse ltalexissleeorggt il fait une requete DNS de type MX sur sleeorg Il obtient en retour une liste dadresses IP classees avec des priorites Il essaye alors denvoyer le mail au serveur principale sil est injoignable au serveur secondaire etc

Pour les adresses sleeorg le serveur principal est ns0sleeorg IN MX 10 ns0

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 11 -

ATTENTION on ne met pas de MX sur un CNAME mais uniquement sur un A

Si on veut inclure un autre fichier de ce fichier $INCLUDE nom_de_lautre_fichier

233 Veacuterifications et relance

Veacuterifiez que vous navez pas fait derreur de syntaxe dans le fichier namedconf

named-checkconf

Si la commande naffiche rien cest que le fichier namedconf est valide Ensuiteveacuterifiez la syntaxe du fichier de zone

named-checkzone sleeorg varcachebindsleeorgzone

zone sleeorgIN loaded serial 2006060505

OK

Si la commande naffiche aucun message derreur alors il ny a pas derreur desyntaxe dans le fichier de zone Vous pouvez alors dire agrave Bind de relire son fichier deconfiguration

etcinitdbind9 reload

Attention si vous faites un restart au lieu dun reload le cache de votre serveurDNS se videra

c) Installation du serveur Rhino

Utilitaires annexes requis

La variable drsquoenvironnement JAVA_HOME doit ecirctre pointeacutee sur le reacutepertoire racine duJava SDKPour veacuterifier entrez les commandes ci-dessous

$ which javausrlocaljavabinjava$ java -versionjava version 150_05Java(TM) 2 Runtime Environment Standard Edition (build 150_05-b05)Java HotSpot(TM) Client VM (build 150_05-b05 mixed mode sharing)$ export JAVA_HOME=usrlocaljava$ PATH=$JAVA_HOMEbin$PATH_

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 12 -

Apache Ant 162 doit ecirctre installeacute La variable drsquoenvironnement ANT_HOME doit ecirctrepointeacutee sur le reacutepertoire racine drsquoApache Ant Pour veacuterifier entrez les commandes ci-dessous

$ which antusrlocalantbinant$ ant -versionApache Ant version 162 compiled on July 16 2004$ export ANT_HOME=usrlocalant$ PATH=$ANT_HOMEbin$PATH

La commande unzip

$ which unzipusrbinunzip

Lrsquoutilitaire TAR

$ which tarbintar

Lrsquoutilitaire awk

$ which awkbinawk

Lrsquoutilitaire ldquosedrdquo

$ which sedbinsed

Installation du package RhinoSLEE

Le SDK Rhino SLEE est livreacute sous forme drsquoarchive compresseacutee tar RhinoSDK-142tar On la deacutecompresse gracircce aux commandes ci-dessous

$ tar xvf RhinoSDK-142tar$ cd rhino-sdk-install

Ceci va creacuteer un reacutepertoire ldquorhino_sdk-install raquo contenant les fichiers drsquoinstallation Apartir de ce reacutepertoire lance le script drsquoinstallation laquo rhino-installshrdquoOn obtient le reacutesultat ci-dessous

$ rhino-installshOpen Cloud Rhino SDK InstallationThe Rhino SDK install requires access to a PostgreSQL database serverfor storing persistent configuration and deployment information Thedatabasesettings you enter here are required for the Rhino SDK config files Theinstall script can optionally configure the database for you you will beprompted for this later in the install processPostgres host [localhost]Postgres port [5432]Postgres user [user] entrer le username posseacutedant lrsquoacces a la base SQLPostgres password

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 13 -

Postgres password (again)

On deacutefinit ensuite le nom de la base de donneacutees qui sera creacutee pour contenir lestables necessaries pour le fonctionnement de rhino Ensuite si tous les preacuterequis onteacuteteacute respecteacutes (JAVA_HOME etc) lrsquoinstalleur devrait renseigner automatiquement lesparamegravetres demandeacutes

Database name [rhino]Enter the directory where you want to install the Rhino SDKThese two ports are used for accessing the Management MBeans from a JavaRMI(Remote Method Invocation) client such as the Rhino SDK command-lineutilitiesManagement Interface RMI Registry Port [1199]Management Interface RMI Object Port [1200]This port is used for accessing the JMX Remote server The Rhino WebConsoleuses this for remote managementManagement Interface JMX Remote Service Port [1202]This port is used for the Web Console (Jetty) server and providesremote management user interface This is a secure port (TLS)Secure Web Console HTTPS Port [8443]Enter the location of your Java J2SEJDK installationThis must be at least version 142JAVA_HOME directory [usrlocaljava]Found Java version 142_04The Java heap size is an argument passed to the JVM to specify the amountofmain memory (in megabytes) which should be allocated for running theRhino SDK To prevent extensive disk swapping this should be set to lessthan the total memory available at runtimeJava heap size [512] Network Configuration The Rhino SDK install will now attempt to determine local networksettings The hostname detected here is used by the web console The IPaddresses detected here are used in generating the default securitypolicy for the management interfacesThe following network settings were detected These can be modified afterinstallation by editing homeuserrhinoconfigconfig_variablesCanonical hostname cycloneLocal IP Addresses 192168622 127001 192168022The Rhino SDK installation needs to use the PostgreSQL interactiveclient psql Enter the full path to your local psql client here If you donot have a psql client installed (eg if postgres is running on a remotehostand not installed on this one) then enter - here to skip this questionYou will still need to initialise the database on the remote host usinginit-management-dbshLocation of psql client [usrbinpsql]

Confirm Settings Installation directory homeuserrhinoPostgres host localhostPostgres port 5432Postgres user userDatabase name rhinoJAVA_HOME directory usrlocaljavaManagement Interface RMIJMX Ports 119912001202

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 14 -

Web Console Interface HTTPS Port 8443Are these settings correct (yn) yCreating installation directoryThe installer has detected you are running a 142 JVM This version ofSunsJVM has a bug related to incorrect compilation of a particular list methodSee homeuserrhinoconfighotspot_compiler_fix for more informationWriting configuration to homeuserrhinoconfigconfig_variablesI will now generate the keystores used for secure transport authenticationRemote management and connections must be verified using paired keyshomeuserrhinorhino-publickeystorewith a storepass of changeit and a shared keypass of changeithomeuserrhinorhino-privatekeystorewith a storepass of changeit and a shared keypass of changeitThe behaviour of the Rhino SDK paired key SSL can be configured by editinghomeuserrhinoconfigrmisslservice_namepropertiesCreating key pairs for common servicesExporting the certificates into the public keystore for servicedistributionCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCopying the public keystore to the client distribution directoryThe Open Cloud Rhino SDK is now installed in homeuserrhinoNext Steps- Start the Rhino SDK SLEE by running homeuserrhinostart-rhinosh- Access the Rhino management console at httpscyclone8443- Login with username admin and password password- Deploy the example SIP services see the filehomeuserrhinoexamplessipREADME for more informationOpen Cloud Rhino SDK installation complete

Initialisation de la meacutemoire drsquoexeacutecution de Rhino

Rhino SLEE SDK utilise une base de donneacutees PostgreSQL pour contenir les statutsdes diffeacuterents composants SLEE Pour pouvoir lrsquoutiliser il nous faut initialiser cettebase comme ci-dessous

Attention lrsquoexeacutecution de ce script effacera tout possible base existante et donceffacera toutes les donneacutees continues preacuteceacutedemment

$ init-management-dbshCREATE DATABASEYou are now connected to database rhinoNOTICE CREATE TABLE PRIMARY KEY will create implicit index versioning_pkey for table versioningCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index keyspaces_pkey for table keyspacesCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index timestamps_pkey for table timestampsCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index registrations_pkey for table registrationsCREATE TABLECOMMENT

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 15 -

Deacutemarrage du serveur Rhino

On deacutemarre le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstart-rhinosh Durant le deacutemarrage de celui-ci les eacuteveacutenementssuivants se produisent

1 La JVM se lance2 Le SDK geacuteneacutere et lit sa configuration3 Le SDK initialise et synchronise sa meacutemoire avec le serveur SQL4 Le SDK initialise les laquo per-machine MLets raquo (Management Agents)5 Le SLEE entre en ldquoRUNNING staterdquo6 Le SDK Rhino SLEE SDK est precirct agrave recevoir des commandes drsquoadministration

Arrecirct du serveur Rhino

On arrecircte le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstop-rhinoshOn obtient la sortie suivante

gtstop-rhinosh --niceSLEE shutdown initiated

SLEE stop completed shutdown phase initiatedSLEE shutdown successfully

Interface de management

Un composant SLEE peut ecirctre configure ou manageacute au biais de la console en lignede commande ou de lrsquointerface Web

On deacutemarre la console comme ci-dessous

$ cd $RHINO_HOME$ clientbinrhino-consoleInteractive Management Shell[Rhino (cmd (args) | help (command) | bye) 1] StateSLEE is in the Running state_

On accegravede agrave la console web en rentrant lrsquoadresse httpslthostnamegt8443 dansson browser webLrsquoutilisateur par deacutefaut est ldquoadminrdquo et le mdp ldquopasswordrdquo

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 16 -

Nous pouvons maintenant deacuteployer des services gracircce agrave ces consoles

d) Deacuteploiement du service SIP

Nous devons tout drsquoabord eacutediter le fichier de configuration suivant $RHINO_HOMEexamplessipsipproperties contains these properties

Pour la mise en place du service sur notre serveur de test nous devons tout drsquoabordchanger les parametres comme ci-dessous

Proxy SBB configuration Add names that the proxy host is known by The first name in the list will be treated as the Proxys canonical hostname and will be used in Via and Record-Route headers inserted by the proxyPROXY_HOSTNAMES=ns0sleeorg 127001 On rentre le DNS de notre serveur de test en tant que proxy Add domains that the proxy is authoritative forPROXY_DOMAINS=ns0sleeorgsleeorg On rentre le nom du domaine drsquoapplication de notre plateforme de testpour lesquels le proxy sera actifPROXY_LOOP_DETECTION=falseOn deacutesactive la deacutetection de boucle SIP du fait que le serveur fait agrave lafois DNS et JSLEE server En effet dans les deacutefinitions de la RFC 3261un proxy ne peut pas envoyer une reacuteponse agrave lui-mecircme ( dans notreplateforme de test les utilisateur srsquoauthentifient en userns0sleeorgLes messages qui sont envoyeacutes au proxy sont tout d abord redirigeacutes vers leserveur lui-mecircme (agrave cause du ns0sleeorg) puis transfeacutereacutes au receveur sicelui-ci se trouve dans la table de routage du proxy

Geacuteneacuteration et deacuteploiement des services

Pour creacuteer les uniteacutes de deacuteploiement des services Registrar Proxy et Locationlancez ldquoAntrdquo avec pour cible laquo build raquo comme ci-dessous

userhost~rhinoexamplessip$ ant buildBuildfile buildxmlinit[mkdir] Created dir homeuserrhinoexamplessipjarssipjars[mkdir] Created dir homeuserrhinoexamplessipjarssipclasses

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 11: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 11 -

ATTENTION on ne met pas de MX sur un CNAME mais uniquement sur un A

Si on veut inclure un autre fichier de ce fichier $INCLUDE nom_de_lautre_fichier

233 Veacuterifications et relance

Veacuterifiez que vous navez pas fait derreur de syntaxe dans le fichier namedconf

named-checkconf

Si la commande naffiche rien cest que le fichier namedconf est valide Ensuiteveacuterifiez la syntaxe du fichier de zone

named-checkzone sleeorg varcachebindsleeorgzone

zone sleeorgIN loaded serial 2006060505

OK

Si la commande naffiche aucun message derreur alors il ny a pas derreur desyntaxe dans le fichier de zone Vous pouvez alors dire agrave Bind de relire son fichier deconfiguration

etcinitdbind9 reload

Attention si vous faites un restart au lieu dun reload le cache de votre serveurDNS se videra

c) Installation du serveur Rhino

Utilitaires annexes requis

La variable drsquoenvironnement JAVA_HOME doit ecirctre pointeacutee sur le reacutepertoire racine duJava SDKPour veacuterifier entrez les commandes ci-dessous

$ which javausrlocaljavabinjava$ java -versionjava version 150_05Java(TM) 2 Runtime Environment Standard Edition (build 150_05-b05)Java HotSpot(TM) Client VM (build 150_05-b05 mixed mode sharing)$ export JAVA_HOME=usrlocaljava$ PATH=$JAVA_HOMEbin$PATH_

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 12 -

Apache Ant 162 doit ecirctre installeacute La variable drsquoenvironnement ANT_HOME doit ecirctrepointeacutee sur le reacutepertoire racine drsquoApache Ant Pour veacuterifier entrez les commandes ci-dessous

$ which antusrlocalantbinant$ ant -versionApache Ant version 162 compiled on July 16 2004$ export ANT_HOME=usrlocalant$ PATH=$ANT_HOMEbin$PATH

La commande unzip

$ which unzipusrbinunzip

Lrsquoutilitaire TAR

$ which tarbintar

Lrsquoutilitaire awk

$ which awkbinawk

Lrsquoutilitaire ldquosedrdquo

$ which sedbinsed

Installation du package RhinoSLEE

Le SDK Rhino SLEE est livreacute sous forme drsquoarchive compresseacutee tar RhinoSDK-142tar On la deacutecompresse gracircce aux commandes ci-dessous

$ tar xvf RhinoSDK-142tar$ cd rhino-sdk-install

Ceci va creacuteer un reacutepertoire ldquorhino_sdk-install raquo contenant les fichiers drsquoinstallation Apartir de ce reacutepertoire lance le script drsquoinstallation laquo rhino-installshrdquoOn obtient le reacutesultat ci-dessous

$ rhino-installshOpen Cloud Rhino SDK InstallationThe Rhino SDK install requires access to a PostgreSQL database serverfor storing persistent configuration and deployment information Thedatabasesettings you enter here are required for the Rhino SDK config files Theinstall script can optionally configure the database for you you will beprompted for this later in the install processPostgres host [localhost]Postgres port [5432]Postgres user [user] entrer le username posseacutedant lrsquoacces a la base SQLPostgres password

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 13 -

Postgres password (again)

On deacutefinit ensuite le nom de la base de donneacutees qui sera creacutee pour contenir lestables necessaries pour le fonctionnement de rhino Ensuite si tous les preacuterequis onteacuteteacute respecteacutes (JAVA_HOME etc) lrsquoinstalleur devrait renseigner automatiquement lesparamegravetres demandeacutes

Database name [rhino]Enter the directory where you want to install the Rhino SDKThese two ports are used for accessing the Management MBeans from a JavaRMI(Remote Method Invocation) client such as the Rhino SDK command-lineutilitiesManagement Interface RMI Registry Port [1199]Management Interface RMI Object Port [1200]This port is used for accessing the JMX Remote server The Rhino WebConsoleuses this for remote managementManagement Interface JMX Remote Service Port [1202]This port is used for the Web Console (Jetty) server and providesremote management user interface This is a secure port (TLS)Secure Web Console HTTPS Port [8443]Enter the location of your Java J2SEJDK installationThis must be at least version 142JAVA_HOME directory [usrlocaljava]Found Java version 142_04The Java heap size is an argument passed to the JVM to specify the amountofmain memory (in megabytes) which should be allocated for running theRhino SDK To prevent extensive disk swapping this should be set to lessthan the total memory available at runtimeJava heap size [512] Network Configuration The Rhino SDK install will now attempt to determine local networksettings The hostname detected here is used by the web console The IPaddresses detected here are used in generating the default securitypolicy for the management interfacesThe following network settings were detected These can be modified afterinstallation by editing homeuserrhinoconfigconfig_variablesCanonical hostname cycloneLocal IP Addresses 192168622 127001 192168022The Rhino SDK installation needs to use the PostgreSQL interactiveclient psql Enter the full path to your local psql client here If you donot have a psql client installed (eg if postgres is running on a remotehostand not installed on this one) then enter - here to skip this questionYou will still need to initialise the database on the remote host usinginit-management-dbshLocation of psql client [usrbinpsql]

Confirm Settings Installation directory homeuserrhinoPostgres host localhostPostgres port 5432Postgres user userDatabase name rhinoJAVA_HOME directory usrlocaljavaManagement Interface RMIJMX Ports 119912001202

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 14 -

Web Console Interface HTTPS Port 8443Are these settings correct (yn) yCreating installation directoryThe installer has detected you are running a 142 JVM This version ofSunsJVM has a bug related to incorrect compilation of a particular list methodSee homeuserrhinoconfighotspot_compiler_fix for more informationWriting configuration to homeuserrhinoconfigconfig_variablesI will now generate the keystores used for secure transport authenticationRemote management and connections must be verified using paired keyshomeuserrhinorhino-publickeystorewith a storepass of changeit and a shared keypass of changeithomeuserrhinorhino-privatekeystorewith a storepass of changeit and a shared keypass of changeitThe behaviour of the Rhino SDK paired key SSL can be configured by editinghomeuserrhinoconfigrmisslservice_namepropertiesCreating key pairs for common servicesExporting the certificates into the public keystore for servicedistributionCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCopying the public keystore to the client distribution directoryThe Open Cloud Rhino SDK is now installed in homeuserrhinoNext Steps- Start the Rhino SDK SLEE by running homeuserrhinostart-rhinosh- Access the Rhino management console at httpscyclone8443- Login with username admin and password password- Deploy the example SIP services see the filehomeuserrhinoexamplessipREADME for more informationOpen Cloud Rhino SDK installation complete

Initialisation de la meacutemoire drsquoexeacutecution de Rhino

Rhino SLEE SDK utilise une base de donneacutees PostgreSQL pour contenir les statutsdes diffeacuterents composants SLEE Pour pouvoir lrsquoutiliser il nous faut initialiser cettebase comme ci-dessous

Attention lrsquoexeacutecution de ce script effacera tout possible base existante et donceffacera toutes les donneacutees continues preacuteceacutedemment

$ init-management-dbshCREATE DATABASEYou are now connected to database rhinoNOTICE CREATE TABLE PRIMARY KEY will create implicit index versioning_pkey for table versioningCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index keyspaces_pkey for table keyspacesCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index timestamps_pkey for table timestampsCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index registrations_pkey for table registrationsCREATE TABLECOMMENT

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 15 -

Deacutemarrage du serveur Rhino

On deacutemarre le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstart-rhinosh Durant le deacutemarrage de celui-ci les eacuteveacutenementssuivants se produisent

1 La JVM se lance2 Le SDK geacuteneacutere et lit sa configuration3 Le SDK initialise et synchronise sa meacutemoire avec le serveur SQL4 Le SDK initialise les laquo per-machine MLets raquo (Management Agents)5 Le SLEE entre en ldquoRUNNING staterdquo6 Le SDK Rhino SLEE SDK est precirct agrave recevoir des commandes drsquoadministration

Arrecirct du serveur Rhino

On arrecircte le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstop-rhinoshOn obtient la sortie suivante

gtstop-rhinosh --niceSLEE shutdown initiated

SLEE stop completed shutdown phase initiatedSLEE shutdown successfully

Interface de management

Un composant SLEE peut ecirctre configure ou manageacute au biais de la console en lignede commande ou de lrsquointerface Web

On deacutemarre la console comme ci-dessous

$ cd $RHINO_HOME$ clientbinrhino-consoleInteractive Management Shell[Rhino (cmd (args) | help (command) | bye) 1] StateSLEE is in the Running state_

On accegravede agrave la console web en rentrant lrsquoadresse httpslthostnamegt8443 dansson browser webLrsquoutilisateur par deacutefaut est ldquoadminrdquo et le mdp ldquopasswordrdquo

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 16 -

Nous pouvons maintenant deacuteployer des services gracircce agrave ces consoles

d) Deacuteploiement du service SIP

Nous devons tout drsquoabord eacutediter le fichier de configuration suivant $RHINO_HOMEexamplessipsipproperties contains these properties

Pour la mise en place du service sur notre serveur de test nous devons tout drsquoabordchanger les parametres comme ci-dessous

Proxy SBB configuration Add names that the proxy host is known by The first name in the list will be treated as the Proxys canonical hostname and will be used in Via and Record-Route headers inserted by the proxyPROXY_HOSTNAMES=ns0sleeorg 127001 On rentre le DNS de notre serveur de test en tant que proxy Add domains that the proxy is authoritative forPROXY_DOMAINS=ns0sleeorgsleeorg On rentre le nom du domaine drsquoapplication de notre plateforme de testpour lesquels le proxy sera actifPROXY_LOOP_DETECTION=falseOn deacutesactive la deacutetection de boucle SIP du fait que le serveur fait agrave lafois DNS et JSLEE server En effet dans les deacutefinitions de la RFC 3261un proxy ne peut pas envoyer une reacuteponse agrave lui-mecircme ( dans notreplateforme de test les utilisateur srsquoauthentifient en userns0sleeorgLes messages qui sont envoyeacutes au proxy sont tout d abord redirigeacutes vers leserveur lui-mecircme (agrave cause du ns0sleeorg) puis transfeacutereacutes au receveur sicelui-ci se trouve dans la table de routage du proxy

Geacuteneacuteration et deacuteploiement des services

Pour creacuteer les uniteacutes de deacuteploiement des services Registrar Proxy et Locationlancez ldquoAntrdquo avec pour cible laquo build raquo comme ci-dessous

userhost~rhinoexamplessip$ ant buildBuildfile buildxmlinit[mkdir] Created dir homeuserrhinoexamplessipjarssipjars[mkdir] Created dir homeuserrhinoexamplessipjarssipclasses

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 12: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 12 -

Apache Ant 162 doit ecirctre installeacute La variable drsquoenvironnement ANT_HOME doit ecirctrepointeacutee sur le reacutepertoire racine drsquoApache Ant Pour veacuterifier entrez les commandes ci-dessous

$ which antusrlocalantbinant$ ant -versionApache Ant version 162 compiled on July 16 2004$ export ANT_HOME=usrlocalant$ PATH=$ANT_HOMEbin$PATH

La commande unzip

$ which unzipusrbinunzip

Lrsquoutilitaire TAR

$ which tarbintar

Lrsquoutilitaire awk

$ which awkbinawk

Lrsquoutilitaire ldquosedrdquo

$ which sedbinsed

Installation du package RhinoSLEE

Le SDK Rhino SLEE est livreacute sous forme drsquoarchive compresseacutee tar RhinoSDK-142tar On la deacutecompresse gracircce aux commandes ci-dessous

$ tar xvf RhinoSDK-142tar$ cd rhino-sdk-install

Ceci va creacuteer un reacutepertoire ldquorhino_sdk-install raquo contenant les fichiers drsquoinstallation Apartir de ce reacutepertoire lance le script drsquoinstallation laquo rhino-installshrdquoOn obtient le reacutesultat ci-dessous

$ rhino-installshOpen Cloud Rhino SDK InstallationThe Rhino SDK install requires access to a PostgreSQL database serverfor storing persistent configuration and deployment information Thedatabasesettings you enter here are required for the Rhino SDK config files Theinstall script can optionally configure the database for you you will beprompted for this later in the install processPostgres host [localhost]Postgres port [5432]Postgres user [user] entrer le username posseacutedant lrsquoacces a la base SQLPostgres password

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 13 -

Postgres password (again)

On deacutefinit ensuite le nom de la base de donneacutees qui sera creacutee pour contenir lestables necessaries pour le fonctionnement de rhino Ensuite si tous les preacuterequis onteacuteteacute respecteacutes (JAVA_HOME etc) lrsquoinstalleur devrait renseigner automatiquement lesparamegravetres demandeacutes

Database name [rhino]Enter the directory where you want to install the Rhino SDKThese two ports are used for accessing the Management MBeans from a JavaRMI(Remote Method Invocation) client such as the Rhino SDK command-lineutilitiesManagement Interface RMI Registry Port [1199]Management Interface RMI Object Port [1200]This port is used for accessing the JMX Remote server The Rhino WebConsoleuses this for remote managementManagement Interface JMX Remote Service Port [1202]This port is used for the Web Console (Jetty) server and providesremote management user interface This is a secure port (TLS)Secure Web Console HTTPS Port [8443]Enter the location of your Java J2SEJDK installationThis must be at least version 142JAVA_HOME directory [usrlocaljava]Found Java version 142_04The Java heap size is an argument passed to the JVM to specify the amountofmain memory (in megabytes) which should be allocated for running theRhino SDK To prevent extensive disk swapping this should be set to lessthan the total memory available at runtimeJava heap size [512] Network Configuration The Rhino SDK install will now attempt to determine local networksettings The hostname detected here is used by the web console The IPaddresses detected here are used in generating the default securitypolicy for the management interfacesThe following network settings were detected These can be modified afterinstallation by editing homeuserrhinoconfigconfig_variablesCanonical hostname cycloneLocal IP Addresses 192168622 127001 192168022The Rhino SDK installation needs to use the PostgreSQL interactiveclient psql Enter the full path to your local psql client here If you donot have a psql client installed (eg if postgres is running on a remotehostand not installed on this one) then enter - here to skip this questionYou will still need to initialise the database on the remote host usinginit-management-dbshLocation of psql client [usrbinpsql]

Confirm Settings Installation directory homeuserrhinoPostgres host localhostPostgres port 5432Postgres user userDatabase name rhinoJAVA_HOME directory usrlocaljavaManagement Interface RMIJMX Ports 119912001202

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 14 -

Web Console Interface HTTPS Port 8443Are these settings correct (yn) yCreating installation directoryThe installer has detected you are running a 142 JVM This version ofSunsJVM has a bug related to incorrect compilation of a particular list methodSee homeuserrhinoconfighotspot_compiler_fix for more informationWriting configuration to homeuserrhinoconfigconfig_variablesI will now generate the keystores used for secure transport authenticationRemote management and connections must be verified using paired keyshomeuserrhinorhino-publickeystorewith a storepass of changeit and a shared keypass of changeithomeuserrhinorhino-privatekeystorewith a storepass of changeit and a shared keypass of changeitThe behaviour of the Rhino SDK paired key SSL can be configured by editinghomeuserrhinoconfigrmisslservice_namepropertiesCreating key pairs for common servicesExporting the certificates into the public keystore for servicedistributionCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCopying the public keystore to the client distribution directoryThe Open Cloud Rhino SDK is now installed in homeuserrhinoNext Steps- Start the Rhino SDK SLEE by running homeuserrhinostart-rhinosh- Access the Rhino management console at httpscyclone8443- Login with username admin and password password- Deploy the example SIP services see the filehomeuserrhinoexamplessipREADME for more informationOpen Cloud Rhino SDK installation complete

Initialisation de la meacutemoire drsquoexeacutecution de Rhino

Rhino SLEE SDK utilise une base de donneacutees PostgreSQL pour contenir les statutsdes diffeacuterents composants SLEE Pour pouvoir lrsquoutiliser il nous faut initialiser cettebase comme ci-dessous

Attention lrsquoexeacutecution de ce script effacera tout possible base existante et donceffacera toutes les donneacutees continues preacuteceacutedemment

$ init-management-dbshCREATE DATABASEYou are now connected to database rhinoNOTICE CREATE TABLE PRIMARY KEY will create implicit index versioning_pkey for table versioningCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index keyspaces_pkey for table keyspacesCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index timestamps_pkey for table timestampsCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index registrations_pkey for table registrationsCREATE TABLECOMMENT

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 15 -

Deacutemarrage du serveur Rhino

On deacutemarre le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstart-rhinosh Durant le deacutemarrage de celui-ci les eacuteveacutenementssuivants se produisent

1 La JVM se lance2 Le SDK geacuteneacutere et lit sa configuration3 Le SDK initialise et synchronise sa meacutemoire avec le serveur SQL4 Le SDK initialise les laquo per-machine MLets raquo (Management Agents)5 Le SLEE entre en ldquoRUNNING staterdquo6 Le SDK Rhino SLEE SDK est precirct agrave recevoir des commandes drsquoadministration

Arrecirct du serveur Rhino

On arrecircte le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstop-rhinoshOn obtient la sortie suivante

gtstop-rhinosh --niceSLEE shutdown initiated

SLEE stop completed shutdown phase initiatedSLEE shutdown successfully

Interface de management

Un composant SLEE peut ecirctre configure ou manageacute au biais de la console en lignede commande ou de lrsquointerface Web

On deacutemarre la console comme ci-dessous

$ cd $RHINO_HOME$ clientbinrhino-consoleInteractive Management Shell[Rhino (cmd (args) | help (command) | bye) 1] StateSLEE is in the Running state_

On accegravede agrave la console web en rentrant lrsquoadresse httpslthostnamegt8443 dansson browser webLrsquoutilisateur par deacutefaut est ldquoadminrdquo et le mdp ldquopasswordrdquo

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 16 -

Nous pouvons maintenant deacuteployer des services gracircce agrave ces consoles

d) Deacuteploiement du service SIP

Nous devons tout drsquoabord eacutediter le fichier de configuration suivant $RHINO_HOMEexamplessipsipproperties contains these properties

Pour la mise en place du service sur notre serveur de test nous devons tout drsquoabordchanger les parametres comme ci-dessous

Proxy SBB configuration Add names that the proxy host is known by The first name in the list will be treated as the Proxys canonical hostname and will be used in Via and Record-Route headers inserted by the proxyPROXY_HOSTNAMES=ns0sleeorg 127001 On rentre le DNS de notre serveur de test en tant que proxy Add domains that the proxy is authoritative forPROXY_DOMAINS=ns0sleeorgsleeorg On rentre le nom du domaine drsquoapplication de notre plateforme de testpour lesquels le proxy sera actifPROXY_LOOP_DETECTION=falseOn deacutesactive la deacutetection de boucle SIP du fait que le serveur fait agrave lafois DNS et JSLEE server En effet dans les deacutefinitions de la RFC 3261un proxy ne peut pas envoyer une reacuteponse agrave lui-mecircme ( dans notreplateforme de test les utilisateur srsquoauthentifient en userns0sleeorgLes messages qui sont envoyeacutes au proxy sont tout d abord redirigeacutes vers leserveur lui-mecircme (agrave cause du ns0sleeorg) puis transfeacutereacutes au receveur sicelui-ci se trouve dans la table de routage du proxy

Geacuteneacuteration et deacuteploiement des services

Pour creacuteer les uniteacutes de deacuteploiement des services Registrar Proxy et Locationlancez ldquoAntrdquo avec pour cible laquo build raquo comme ci-dessous

userhost~rhinoexamplessip$ ant buildBuildfile buildxmlinit[mkdir] Created dir homeuserrhinoexamplessipjarssipjars[mkdir] Created dir homeuserrhinoexamplessipjarssipclasses

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 13: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 13 -

Postgres password (again)

On deacutefinit ensuite le nom de la base de donneacutees qui sera creacutee pour contenir lestables necessaries pour le fonctionnement de rhino Ensuite si tous les preacuterequis onteacuteteacute respecteacutes (JAVA_HOME etc) lrsquoinstalleur devrait renseigner automatiquement lesparamegravetres demandeacutes

Database name [rhino]Enter the directory where you want to install the Rhino SDKThese two ports are used for accessing the Management MBeans from a JavaRMI(Remote Method Invocation) client such as the Rhino SDK command-lineutilitiesManagement Interface RMI Registry Port [1199]Management Interface RMI Object Port [1200]This port is used for accessing the JMX Remote server The Rhino WebConsoleuses this for remote managementManagement Interface JMX Remote Service Port [1202]This port is used for the Web Console (Jetty) server and providesremote management user interface This is a secure port (TLS)Secure Web Console HTTPS Port [8443]Enter the location of your Java J2SEJDK installationThis must be at least version 142JAVA_HOME directory [usrlocaljava]Found Java version 142_04The Java heap size is an argument passed to the JVM to specify the amountofmain memory (in megabytes) which should be allocated for running theRhino SDK To prevent extensive disk swapping this should be set to lessthan the total memory available at runtimeJava heap size [512] Network Configuration The Rhino SDK install will now attempt to determine local networksettings The hostname detected here is used by the web console The IPaddresses detected here are used in generating the default securitypolicy for the management interfacesThe following network settings were detected These can be modified afterinstallation by editing homeuserrhinoconfigconfig_variablesCanonical hostname cycloneLocal IP Addresses 192168622 127001 192168022The Rhino SDK installation needs to use the PostgreSQL interactiveclient psql Enter the full path to your local psql client here If you donot have a psql client installed (eg if postgres is running on a remotehostand not installed on this one) then enter - here to skip this questionYou will still need to initialise the database on the remote host usinginit-management-dbshLocation of psql client [usrbinpsql]

Confirm Settings Installation directory homeuserrhinoPostgres host localhostPostgres port 5432Postgres user userDatabase name rhinoJAVA_HOME directory usrlocaljavaManagement Interface RMIJMX Ports 119912001202

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 14 -

Web Console Interface HTTPS Port 8443Are these settings correct (yn) yCreating installation directoryThe installer has detected you are running a 142 JVM This version ofSunsJVM has a bug related to incorrect compilation of a particular list methodSee homeuserrhinoconfighotspot_compiler_fix for more informationWriting configuration to homeuserrhinoconfigconfig_variablesI will now generate the keystores used for secure transport authenticationRemote management and connections must be verified using paired keyshomeuserrhinorhino-publickeystorewith a storepass of changeit and a shared keypass of changeithomeuserrhinorhino-privatekeystorewith a storepass of changeit and a shared keypass of changeitThe behaviour of the Rhino SDK paired key SSL can be configured by editinghomeuserrhinoconfigrmisslservice_namepropertiesCreating key pairs for common servicesExporting the certificates into the public keystore for servicedistributionCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCopying the public keystore to the client distribution directoryThe Open Cloud Rhino SDK is now installed in homeuserrhinoNext Steps- Start the Rhino SDK SLEE by running homeuserrhinostart-rhinosh- Access the Rhino management console at httpscyclone8443- Login with username admin and password password- Deploy the example SIP services see the filehomeuserrhinoexamplessipREADME for more informationOpen Cloud Rhino SDK installation complete

Initialisation de la meacutemoire drsquoexeacutecution de Rhino

Rhino SLEE SDK utilise une base de donneacutees PostgreSQL pour contenir les statutsdes diffeacuterents composants SLEE Pour pouvoir lrsquoutiliser il nous faut initialiser cettebase comme ci-dessous

Attention lrsquoexeacutecution de ce script effacera tout possible base existante et donceffacera toutes les donneacutees continues preacuteceacutedemment

$ init-management-dbshCREATE DATABASEYou are now connected to database rhinoNOTICE CREATE TABLE PRIMARY KEY will create implicit index versioning_pkey for table versioningCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index keyspaces_pkey for table keyspacesCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index timestamps_pkey for table timestampsCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index registrations_pkey for table registrationsCREATE TABLECOMMENT

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 15 -

Deacutemarrage du serveur Rhino

On deacutemarre le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstart-rhinosh Durant le deacutemarrage de celui-ci les eacuteveacutenementssuivants se produisent

1 La JVM se lance2 Le SDK geacuteneacutere et lit sa configuration3 Le SDK initialise et synchronise sa meacutemoire avec le serveur SQL4 Le SDK initialise les laquo per-machine MLets raquo (Management Agents)5 Le SLEE entre en ldquoRUNNING staterdquo6 Le SDK Rhino SLEE SDK est precirct agrave recevoir des commandes drsquoadministration

Arrecirct du serveur Rhino

On arrecircte le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstop-rhinoshOn obtient la sortie suivante

gtstop-rhinosh --niceSLEE shutdown initiated

SLEE stop completed shutdown phase initiatedSLEE shutdown successfully

Interface de management

Un composant SLEE peut ecirctre configure ou manageacute au biais de la console en lignede commande ou de lrsquointerface Web

On deacutemarre la console comme ci-dessous

$ cd $RHINO_HOME$ clientbinrhino-consoleInteractive Management Shell[Rhino (cmd (args) | help (command) | bye) 1] StateSLEE is in the Running state_

On accegravede agrave la console web en rentrant lrsquoadresse httpslthostnamegt8443 dansson browser webLrsquoutilisateur par deacutefaut est ldquoadminrdquo et le mdp ldquopasswordrdquo

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 16 -

Nous pouvons maintenant deacuteployer des services gracircce agrave ces consoles

d) Deacuteploiement du service SIP

Nous devons tout drsquoabord eacutediter le fichier de configuration suivant $RHINO_HOMEexamplessipsipproperties contains these properties

Pour la mise en place du service sur notre serveur de test nous devons tout drsquoabordchanger les parametres comme ci-dessous

Proxy SBB configuration Add names that the proxy host is known by The first name in the list will be treated as the Proxys canonical hostname and will be used in Via and Record-Route headers inserted by the proxyPROXY_HOSTNAMES=ns0sleeorg 127001 On rentre le DNS de notre serveur de test en tant que proxy Add domains that the proxy is authoritative forPROXY_DOMAINS=ns0sleeorgsleeorg On rentre le nom du domaine drsquoapplication de notre plateforme de testpour lesquels le proxy sera actifPROXY_LOOP_DETECTION=falseOn deacutesactive la deacutetection de boucle SIP du fait que le serveur fait agrave lafois DNS et JSLEE server En effet dans les deacutefinitions de la RFC 3261un proxy ne peut pas envoyer une reacuteponse agrave lui-mecircme ( dans notreplateforme de test les utilisateur srsquoauthentifient en userns0sleeorgLes messages qui sont envoyeacutes au proxy sont tout d abord redirigeacutes vers leserveur lui-mecircme (agrave cause du ns0sleeorg) puis transfeacutereacutes au receveur sicelui-ci se trouve dans la table de routage du proxy

Geacuteneacuteration et deacuteploiement des services

Pour creacuteer les uniteacutes de deacuteploiement des services Registrar Proxy et Locationlancez ldquoAntrdquo avec pour cible laquo build raquo comme ci-dessous

userhost~rhinoexamplessip$ ant buildBuildfile buildxmlinit[mkdir] Created dir homeuserrhinoexamplessipjarssipjars[mkdir] Created dir homeuserrhinoexamplessipjarssipclasses

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 14: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 14 -

Web Console Interface HTTPS Port 8443Are these settings correct (yn) yCreating installation directoryThe installer has detected you are running a 142 JVM This version ofSunsJVM has a bug related to incorrect compilation of a particular list methodSee homeuserrhinoconfighotspot_compiler_fix for more informationWriting configuration to homeuserrhinoconfigconfig_variablesI will now generate the keystores used for secure transport authenticationRemote management and connections must be verified using paired keyshomeuserrhinorhino-publickeystorewith a storepass of changeit and a shared keypass of changeithomeuserrhinorhino-privatekeystorewith a storepass of changeit and a shared keypass of changeitThe behaviour of the Rhino SDK paired key SSL can be configured by editinghomeuserrhinoconfigrmisslservice_namepropertiesCreating key pairs for common servicesExporting the certificates into the public keystore for servicedistributionCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCertificate was added to keystoreCopying the public keystore to the client distribution directoryThe Open Cloud Rhino SDK is now installed in homeuserrhinoNext Steps- Start the Rhino SDK SLEE by running homeuserrhinostart-rhinosh- Access the Rhino management console at httpscyclone8443- Login with username admin and password password- Deploy the example SIP services see the filehomeuserrhinoexamplessipREADME for more informationOpen Cloud Rhino SDK installation complete

Initialisation de la meacutemoire drsquoexeacutecution de Rhino

Rhino SLEE SDK utilise une base de donneacutees PostgreSQL pour contenir les statutsdes diffeacuterents composants SLEE Pour pouvoir lrsquoutiliser il nous faut initialiser cettebase comme ci-dessous

Attention lrsquoexeacutecution de ce script effacera tout possible base existante et donceffacera toutes les donneacutees continues preacuteceacutedemment

$ init-management-dbshCREATE DATABASEYou are now connected to database rhinoNOTICE CREATE TABLE PRIMARY KEY will create implicit index versioning_pkey for table versioningCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index keyspaces_pkey for table keyspacesCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index timestamps_pkey for table timestampsCREATE TABLECOMMENTNOTICE CREATE TABLE PRIMARY KEY will create implicit index registrations_pkey for table registrationsCREATE TABLECOMMENT

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 15 -

Deacutemarrage du serveur Rhino

On deacutemarre le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstart-rhinosh Durant le deacutemarrage de celui-ci les eacuteveacutenementssuivants se produisent

1 La JVM se lance2 Le SDK geacuteneacutere et lit sa configuration3 Le SDK initialise et synchronise sa meacutemoire avec le serveur SQL4 Le SDK initialise les laquo per-machine MLets raquo (Management Agents)5 Le SLEE entre en ldquoRUNNING staterdquo6 Le SDK Rhino SLEE SDK est precirct agrave recevoir des commandes drsquoadministration

Arrecirct du serveur Rhino

On arrecircte le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstop-rhinoshOn obtient la sortie suivante

gtstop-rhinosh --niceSLEE shutdown initiated

SLEE stop completed shutdown phase initiatedSLEE shutdown successfully

Interface de management

Un composant SLEE peut ecirctre configure ou manageacute au biais de la console en lignede commande ou de lrsquointerface Web

On deacutemarre la console comme ci-dessous

$ cd $RHINO_HOME$ clientbinrhino-consoleInteractive Management Shell[Rhino (cmd (args) | help (command) | bye) 1] StateSLEE is in the Running state_

On accegravede agrave la console web en rentrant lrsquoadresse httpslthostnamegt8443 dansson browser webLrsquoutilisateur par deacutefaut est ldquoadminrdquo et le mdp ldquopasswordrdquo

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 16 -

Nous pouvons maintenant deacuteployer des services gracircce agrave ces consoles

d) Deacuteploiement du service SIP

Nous devons tout drsquoabord eacutediter le fichier de configuration suivant $RHINO_HOMEexamplessipsipproperties contains these properties

Pour la mise en place du service sur notre serveur de test nous devons tout drsquoabordchanger les parametres comme ci-dessous

Proxy SBB configuration Add names that the proxy host is known by The first name in the list will be treated as the Proxys canonical hostname and will be used in Via and Record-Route headers inserted by the proxyPROXY_HOSTNAMES=ns0sleeorg 127001 On rentre le DNS de notre serveur de test en tant que proxy Add domains that the proxy is authoritative forPROXY_DOMAINS=ns0sleeorgsleeorg On rentre le nom du domaine drsquoapplication de notre plateforme de testpour lesquels le proxy sera actifPROXY_LOOP_DETECTION=falseOn deacutesactive la deacutetection de boucle SIP du fait que le serveur fait agrave lafois DNS et JSLEE server En effet dans les deacutefinitions de la RFC 3261un proxy ne peut pas envoyer une reacuteponse agrave lui-mecircme ( dans notreplateforme de test les utilisateur srsquoauthentifient en userns0sleeorgLes messages qui sont envoyeacutes au proxy sont tout d abord redirigeacutes vers leserveur lui-mecircme (agrave cause du ns0sleeorg) puis transfeacutereacutes au receveur sicelui-ci se trouve dans la table de routage du proxy

Geacuteneacuteration et deacuteploiement des services

Pour creacuteer les uniteacutes de deacuteploiement des services Registrar Proxy et Locationlancez ldquoAntrdquo avec pour cible laquo build raquo comme ci-dessous

userhost~rhinoexamplessip$ ant buildBuildfile buildxmlinit[mkdir] Created dir homeuserrhinoexamplessipjarssipjars[mkdir] Created dir homeuserrhinoexamplessipjarssipclasses

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 15: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 15 -

Deacutemarrage du serveur Rhino

On deacutemarre le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstart-rhinosh Durant le deacutemarrage de celui-ci les eacuteveacutenementssuivants se produisent

1 La JVM se lance2 Le SDK geacuteneacutere et lit sa configuration3 Le SDK initialise et synchronise sa meacutemoire avec le serveur SQL4 Le SDK initialise les laquo per-machine MLets raquo (Management Agents)5 Le SLEE entre en ldquoRUNNING staterdquo6 Le SDK Rhino SLEE SDK est precirct agrave recevoir des commandes drsquoadministration

Arrecirct du serveur Rhino

On arrecircte le serveur Rhino gracircce agrave la commande suivante $RHINO_HOMEstop-rhinoshOn obtient la sortie suivante

gtstop-rhinosh --niceSLEE shutdown initiated

SLEE stop completed shutdown phase initiatedSLEE shutdown successfully

Interface de management

Un composant SLEE peut ecirctre configure ou manageacute au biais de la console en lignede commande ou de lrsquointerface Web

On deacutemarre la console comme ci-dessous

$ cd $RHINO_HOME$ clientbinrhino-consoleInteractive Management Shell[Rhino (cmd (args) | help (command) | bye) 1] StateSLEE is in the Running state_

On accegravede agrave la console web en rentrant lrsquoadresse httpslthostnamegt8443 dansson browser webLrsquoutilisateur par deacutefaut est ldquoadminrdquo et le mdp ldquopasswordrdquo

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 16 -

Nous pouvons maintenant deacuteployer des services gracircce agrave ces consoles

d) Deacuteploiement du service SIP

Nous devons tout drsquoabord eacutediter le fichier de configuration suivant $RHINO_HOMEexamplessipsipproperties contains these properties

Pour la mise en place du service sur notre serveur de test nous devons tout drsquoabordchanger les parametres comme ci-dessous

Proxy SBB configuration Add names that the proxy host is known by The first name in the list will be treated as the Proxys canonical hostname and will be used in Via and Record-Route headers inserted by the proxyPROXY_HOSTNAMES=ns0sleeorg 127001 On rentre le DNS de notre serveur de test en tant que proxy Add domains that the proxy is authoritative forPROXY_DOMAINS=ns0sleeorgsleeorg On rentre le nom du domaine drsquoapplication de notre plateforme de testpour lesquels le proxy sera actifPROXY_LOOP_DETECTION=falseOn deacutesactive la deacutetection de boucle SIP du fait que le serveur fait agrave lafois DNS et JSLEE server En effet dans les deacutefinitions de la RFC 3261un proxy ne peut pas envoyer une reacuteponse agrave lui-mecircme ( dans notreplateforme de test les utilisateur srsquoauthentifient en userns0sleeorgLes messages qui sont envoyeacutes au proxy sont tout d abord redirigeacutes vers leserveur lui-mecircme (agrave cause du ns0sleeorg) puis transfeacutereacutes au receveur sicelui-ci se trouve dans la table de routage du proxy

Geacuteneacuteration et deacuteploiement des services

Pour creacuteer les uniteacutes de deacuteploiement des services Registrar Proxy et Locationlancez ldquoAntrdquo avec pour cible laquo build raquo comme ci-dessous

userhost~rhinoexamplessip$ ant buildBuildfile buildxmlinit[mkdir] Created dir homeuserrhinoexamplessipjarssipjars[mkdir] Created dir homeuserrhinoexamplessipjarssipclasses

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 16: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 16 -

Nous pouvons maintenant deacuteployer des services gracircce agrave ces consoles

d) Deacuteploiement du service SIP

Nous devons tout drsquoabord eacutediter le fichier de configuration suivant $RHINO_HOMEexamplessipsipproperties contains these properties

Pour la mise en place du service sur notre serveur de test nous devons tout drsquoabordchanger les parametres comme ci-dessous

Proxy SBB configuration Add names that the proxy host is known by The first name in the list will be treated as the Proxys canonical hostname and will be used in Via and Record-Route headers inserted by the proxyPROXY_HOSTNAMES=ns0sleeorg 127001 On rentre le DNS de notre serveur de test en tant que proxy Add domains that the proxy is authoritative forPROXY_DOMAINS=ns0sleeorgsleeorg On rentre le nom du domaine drsquoapplication de notre plateforme de testpour lesquels le proxy sera actifPROXY_LOOP_DETECTION=falseOn deacutesactive la deacutetection de boucle SIP du fait que le serveur fait agrave lafois DNS et JSLEE server En effet dans les deacutefinitions de la RFC 3261un proxy ne peut pas envoyer une reacuteponse agrave lui-mecircme ( dans notreplateforme de test les utilisateur srsquoauthentifient en userns0sleeorgLes messages qui sont envoyeacutes au proxy sont tout d abord redirigeacutes vers leserveur lui-mecircme (agrave cause du ns0sleeorg) puis transfeacutereacutes au receveur sicelui-ci se trouve dans la table de routage du proxy

Geacuteneacuteration et deacuteploiement des services

Pour creacuteer les uniteacutes de deacuteploiement des services Registrar Proxy et Locationlancez ldquoAntrdquo avec pour cible laquo build raquo comme ci-dessous

userhost~rhinoexamplessip$ ant buildBuildfile buildxmlinit[mkdir] Created dir homeuserrhinoexamplessipjarssipjars[mkdir] Created dir homeuserrhinoexamplessipjarssipclasses

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 17: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 17 -

compile-sip-examples[mkdir] Created dir homeuserrhinoexamplessipjarssipclassessip-examples[javac] Compiling 37 source files tohomeuserrhinoexamplessipjarssipclassessip-examplessip-ac-location[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsac-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipac-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsac-location-sbbjarsip-jdbc-location[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipjdbc-location-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsjdbc-location-sbbjarsip-registrar[copy] Copying 2 files tohomeuserrhinoexamplessipjarssipclassessip-examplesregistrar-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsregistrar-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipregistrar-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsregistrar-sbbjarsip-proxy[copy] Copying 3 files tohomeuserrhinoexamplessipjarssipclassessip-examplesproxy-META-INF[sbbjar] Building sbb-jarhomeuserrhinoexamplessipjarssipjarsproxy-sbbjar[deployablejar] Building deployable-unit-jarhomeuserrhinoexamplessipjarssipjarssipproxy-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsproxy-sbbjarsip-fmfm[copy] Copying 4 fi les to homeuserrhinoexamplessipjarssipclassessip-examplesfmfm-META-INF[profilespecjar] Building profile-spec-jar homeuserrhinoexamplessipjarssipjarsfmfm-profilejar[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsfmfm-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipfmfm-servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm -profilejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsfmfm-sbbjarsip-b2bua[copy] Copying 3 files to homeuserrhinoexamplessipjarssipclassessip-examplesb2bua-META-INF[sbbjar] Building sbb-jar homeuserrhinoexamplessipjarssipjarsb2bua-sbbjar[deployablejar] Building deployable-unit-jar homeuserrhinoexamplessipjarssipjarssipb2bua-

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 18: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 18 -

servicejar[delete] Deleting homeuserrhinoexamplessipjarssipjarsb2bua-sbbjarbuildBUILD SUCCESSFULTotal time 25 seconds

Par deacutefaut le script deacuteploiera les services Registrar et Proxy et les composants dontils deacutependent tells que le laquo SIP Resource Adaptor raquo et le laquo Location Service raquo Pourdeacuteployer ces exemples lancez ldquoAntrdquo avec pour cible laquo deployexamples raquo comme ci-dessous

userhost~rhinoexamplessip$ ant deployexamplesBuildfile buildxmlinitbuildmanagement-init[echo] OpenCloud Rhino SLEE Management tasks definedlogin[slee-management] establishing new connection to 1270011199admindeploysipra[slee-management] Install deployable unit filelibocjainsip-12-rajar[slee-management] Create resource adaptor entity sipra from OCSIP 12 OpenCloud[slee-management] Bind link name OCSIP to sipra[slee-management] Activate RA entity sipradeploy-jdbc-locationservicedeploy-ac-locationservice[slee-management] Install deployable unit filejarssip-ac-location-servicejar[slee-management] Activate service SIP AC Location Service 15 Open Cloud[slee-management] Set trace level of ACLocationSbb 15 Open Cloud to Infodeploylocationservicedeployregistrar[slee-management] Install deployable unit filejarssip-registrar-servicejar[slee-management] Activate service SIP Registrar Service 15 Open Cloud[slee-management] Set trace level of RegistrarSbb 15 Open Cloud to Infoundeployfmfm[slee-management] Remove profile table FMFMSubscribers[slee-management] [Failed] Profile table FMFMSubscribers does not exist[slee-management] Deactivate service SIP FMFM Service 15 Open Cloud[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Wait for service SIP FMFM Service 15 Open Cloud todeactivate[slee-management] [Failed] Could not find a service matching SIP FMFMService 15 Open Cloud[slee-management] Uninstall deployable unit filejarssip-fmfm-servicejar[slee-management] [Failed] Deployable unit filejarssip-fmfm-servicejarnot installeddeployproxy[slee-management] Install deployable unit filejarssip-proxy-servicejar[slee-management] Activate service SIP Proxy Service 15 Open Cloud[slee-management] Set trace level of ProxySbb 15 Open Cloud to InfodeployexamplesBUILD SUCCESSFULTotal time 1 minute 36 seconds

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 19: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 19 -

Veacuterifiez que Rhino SLEE est dans lrsquoeacutetat ldquoRUNNINGrdquo apregraves le deacuteploiement

userhost~rhino$ clientbinrhino-consoleInteractive Rhino Management ShellRhino management console enter help for a list of commands[Rhinolocalhost (0)] stateSLEE is in the Running state

Les services ldquoRegistrarrdquo et ldquoProxyrdquo sont maintenant deacuteployeacutes et precircts agrave lrsquoemploi

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 20: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 20 -

Meacutethode pour tracer les eacuteveacutenements sur le prompt du serveur

Commande sur la console pour afficher les messages SIP transitant par le proxy

setloglevel siptransportmanager debug

Doreacutenavant le terminal du serveur SLEE doit tracer les messages SIP

Actions agrave reacutealiser sur lrsquointerface web pour afficher les messages SIP transitant par leproxy

Aller sur la page principale de lrsquointerface webSeacutelectionner ldquoSLEE Subsystemsrdquo puis ldquoView Trace MBeanraquo

Sur la page ldquoTracerdquo se trouvent les boutons laquo setTraceLevel raquo etlaquo getTraceLevel raquoSur la liste deacuteroulante agrave coteacute de ldquosetTraceLevelrdquo seacutelectionner le composant agravedeboguer ici le SBB SIP Proxy Seacutelectionner le niveau de trace laquo finest raquo qui est leplus deacutetailleacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 21: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 21 -

Appuyez sur le bouton ldquosetTraceLevelrdquo Doreacutenavant le SBB Proxy SBB vageacuteneacuterer des informations de log deacutetailleacutes tels que le contenu des messages SIPqursquoils reccediloivent et envoient

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 22: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 22 -

2 Exemple SIP

Mateacuteriel utiliseacute

- Un portable sous Linux jouant le rocircle de serveur DNS et PROXY SIP au biaisdu serveur drsquoexeacutecution JSLEE laquo Rhino OpenCloud raquo

- Une station sous Windows 2000 executant le client de Messagerieinstantaneacutee MSN Messenger 46 rattacheacute au serveur DNS de test (entrez lrsquoIPdu serveur en tant que DNS primaire dans la configuration de la carte reacuteseau)

- Une station sous Windows 2000 exeacutecutant le SIPPhone laquo SJPhone raquo rattacheacuteau serveur DNS de test

Explication de la proceacutedure de test

Pour notre test nous avons voulu faire communiquer deux logiciels fournis pardiffeacuterents fournisseurs et ayant des vocations diffeacuterentes Ceci afin de montrerlrsquointeropeacuterabiliteacute lorsque leur fonctionnement repose sur la plateforme JSLEE Eneffet le protocole SIP eacutetant standardiseacute nous avons pu reacutealiser des communicationsde type VoIP gracircce au service Proxy deacuteployeacute sur notre serveur Pour cela il fautconfigurer ces logiciels comme ci-dessous

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 23: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 23 -

Configuration de msn

- lancer MSN Messenger 46 et allez dans les options puis dans laquo comptes raquo- Seacutelectionner le service laquo SIP raquo et entrer comme nom drsquoutilisateur

laquo msnns0sleeorg raquo- Allez dans les proprieacutetes avanceacutees de cette rubrique et rentrez comme nom

de serveur ns0sleeorg Pensez agrave speacutecifier le port(IP PORT) si vous avezchangeacute le port drsquoeacutecoute dans la configuration du Proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 24: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 24 -

Configuration de SJPhone

- Lancer SJPhone et allez dans les options Profile options- Dans proxy domain entrez le nom du serveur laquo ns0sleeorg raquo et comme port

laquo 5060 raquo (ou celui que vous avez mis en remplacement du port par deacutefautdans la configuration du proxy)

- Dans User domain entrez laquo ns0sleeorg raquo- Ne pas cocher laquo Use separate registrar raquo (la fonction nrsquoest pas supporteacutee par

lrsquoexemple deacuteployeacute)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 25: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 25 -

Une fois les machines configureacutees la proceacutedure de test srsquoeffectue comme deacutecrit surles scheacutemas ci-dessous

1) Enregistrement du poste sjphone sur le proxy

2) Enregistrement du poste msn sur le proxy

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 26: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 26 -

3) Les 2 stations sont enregistreacutees sur le proxy

4) Illustration du rocircle du DNS

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 27: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 27 -

5) Illustration de la communication entre les 2 stations

Une fois que les 2 stations sont enregistreacutees sur le proxy elles peuvent reacutealiser descommunications SIP par le biais de leur logiciel Par exemple on veut que la stationsjphone appelle la station msn Dans le logiciel SJPhone on entre commedestinataire laquo msnns0sleeorg raquo Des lors le logiciel envoie une requecircte SIP detype laquo INVITE raquo au serveur proxy ns0sleeorg Celui-ci regarde si il a lrsquoautoriteacute sur ledomaine ns0sleeorg (ici oui) puis transfegravere le message agrave la station msnns0sleeorgvu que son IP est contenue dans la table de translation sur service Proxy Ensuitela machine msnns0sleeorg envoie une trame pour le sjphone acquittant la reacuteceptionde lrsquoinvitation Cette trame sera relayeacutee par le proxy Une fois la trame drsquoacquitementrecue le sjphone sait que la station msn est joignable et formule une demande decommunication vocale Srsquoensuit alors un process de laquo ringing raquo Des que la machinemsn accepte lrsquoappel (envoie drsquoun acquittement SIP agrave sjphone) la communicationvocale commence (au biais du protocole RTP)

Le test de cette plateforme SIP reposant sur le protocole JAIN SLEE a eacuteteacute concluantNous avons mis en place ce test agrave lrsquoaide de deux logiciels diffeacuterents mais ce typedrsquoimplantation aurait pu ecirctre deacuteployeacute avec des PDA des teacuteleacutephones mobiles oudrsquoautres ordinateurs utilisant diffeacuterents systegravemes drsquoexploitations tout en sachantmecircme si nous ne lrsquoavons pas testeacute que le temps de reacuteponse est vraiment ideacuteal pource type drsquoapplication Cette portabiliteacute multi plateforme et les performances en termede temps de reacuteponse sont de reacuteels atouts de JAIN SLEE Nous allons maintenantexpliciter le fonctionnement interne en analysant le code drsquoune application aufonctionnement simple le Wake Up Call

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 28: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 28 -

3 Service Wake Up Call

Le service JAIN SLEE Wake Up Call permet de comprendre comment eacutecrirerapidement une application pour le protocole SIPCe service a pour rocircle de recevoir des messages des SIP UA (SIP User Agents) auformat ldquoTIME TEXT ldquo (un nombre suivi drsquoun espace puis du texte) Tout autre type demessage envoyeacute agrave lrsquoapplication geacutenegravere une erreur Le nombre envoyeacute est le deacutelai enseconde il permet de deacuteclencher un timer qui commence agrave compter agrave partir dumoment ou le message est reccedilu par le service wake up Apregraves que le deacutelai soitexpireacute le timer geacutenegravere automatiquement un message envoyeacute au client avec la partietexte seulement qui a eacuteteacute envoyeacutee dans le message originalNous avons fait fonctionner ce service avec des clients SIP (SJ Phone et WindowsMessenger)

Deacuteploiement et utilisationPour mettre en oeuvre ce service JAIN SLEE sous Windows 2000 nous avons suiviles eacutetapes suivantes

- Reacutecupeacuteration du code source des exemples mobicents httpsourceforgenetprojectshowfilesphpgroup_id=102670amppackage_id=165277

- Installation de Java Ant et du plugin eclipse JAIN SLEE- Lancement de ant pour deacuteployer la solution et reacutecupeacuterer le wake-up-sbbjar- Lancement du serveur (nous avons utiliseacute Rhino Slee)- Deacuteploiement du jar dans le serveur- Lancement et configuration des clients SIP SJ Phone et Windows Messenger

46- Envoi drsquoun message agrave wakeupns0sleeorg Par exemple laquo 10 COUCOU raquo- Apregraves quelques secondes (ici 10) le SIP phone doit recevoir un message

laquo COUCOU raquo de wakeupns0sleeorg

Code source de lrsquoapplication

Dans cet exemple nous allons nous inteacuteresser aux trois fichiers principaux quicomposent lrsquoapplication

a) un service SLEE wakeup-servicexml

Pour faire fonctionner le service wake up nous avons besoin drsquoun point drsquoentreacuteeCela est reacutealiseacute agrave travers ce fichier de deacutefinition de service Il permet de signaler auconteneur SLEE que nous avons deacuteployeacute et activeacute un nouveau service qui vaaccepter de recevoir certains types drsquoeacutevegravenement Le rocircle du conteneur SLEE est degarantir le transport de tous les eacutevegravenements auquel le service WakeUp a souscritLe fait que les composants soient asynchrones et que leur comportement peut ecirctredeacutefinit de maniegravere tregraves preacutecise permet une grande eacutevolutiviteacute et un control preacutecisnotamment affecter des prioriteacutes aux services de communications On peut par

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 29: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 29 -

exemple imaginer que les appels drsquourgence (numeacuteros 18 17) peuvent ecirctre implanteacuteavec une plus grande prioriteacute de maniegravere tregraves simple avec un conteneur SLEEVoici agrave preacutesent le code de notre fichier xml

ltservice-xmlgtltservicegt

ltdescriptiongtWake up serviceltdescriptiongtltservice-namegtWake Up Serviceltservice-namegtltservice-vendorgtFA06ltservice-vendorgtltservice-versiongt10ltservice-versiongtltroot-sbbgt

ltdescriptiongtThis Sbb send a wake up call to theuserltdescriptiongt

ltsbb-namegtWake Up Sbbltsbb-namegtltsbb-vendorgtFA06ltsbb-vendorgtltsbb-versiongt10ltsbb-versiongt

ltroot-sbbgtltdefault-prioritygt0ltdefault-prioritygt

ltservicegtltservice-xmlgt

Dans le conteneur SLEE le service WakeUp est uniquement identifieacute par le tuple(service-name service-vendor service-version) Le SBB racine doit ecirctre reacutefeacuterenceacutepar un identifiant unique (sbb-namesbb-vendor sbb-version)

Le descripteur de service est compris dans lrsquouniteacute de deacuteploiement du SLEE aveclrsquoarchive SBB qui sera geacuteneacutereacute crsquoest le fichier wakeup-DUjar qui aura la structuresuivante

wakeup-servicexmlMETA-INFdeployable-unitxml (ce service liste les archives SLEE agrave deacuteployer)jarsWakeUp-sbbjar wakeup-servicexml)

b) un Service Building Block ndash WakeUpSbb

WakeUpSbb est le SBB racine du service Son rocircle est drsquoaccepter les eacutevegravenementsde type message SIP drsquoanalyser le texte reccedilu et de lancer un wakeup timer Il vaaussi eacutecouteacute les eacutevegravenements timer et envoyer un SIP MESSAGE en retour agrave lrsquoUA quia envoyeacute le message

c) une interface pour le contexte drsquoactiviteacute ndash WakeUpSbbActivityContextInterface

Cette interface java est une vue du contexte drsquoactiviteacute Lrsquointerface a deux proprieacuteteacutes contact et body Le contact enregistre lrsquoadresse physique du SIP phone utiliseacute Lebody va stocker le message texte envoyeacute par lrsquoutilisateur Le conteneur SLEE vadrsquoabord creacuteer une instance drsquoobjet qui impleacutemente cette interface Ensuite on le lie agraveun timer ce qui va permettre de reacutecupeacuterer les donneacutees quand celui-ci est termineacute

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 30: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 30 -

Vue deacutetailleacutee du code

Le WakeUpSBB est impleacutementeacute dans la classe WakeUpSBB et est deacuteclareacute auconteneur SLEE gracircce au fichier descriptif sbb-jarxml Ces deux fichiers sontinteacutegreacutes dans une archive jar WakeUp-sbbjar qui possegravede la structure suivante

META-INFsbb-jarxml ndash Le fichier descriptif du SBBorgmobicents - Les classes Java

sbb-jarxmlInteacuteressons nous au fichier sbb-jarxml qui declare les points suivants

- un identifiant unique pour le SBB (Wake Up Sbb NIST 10)- Sa classe Java drsquoimplantation

(orgmobicentssleeexampleswakeupWakeUpSbb) crsquoest une classeabstraite Le conteneur SLEE creacuteer une sous-classe et lrsquoinstancie lors delrsquoexeacutecution La meacutethode abstraite impleacutementeacutee par le conteneur SLEE permetau runtime de lrsquoapplication de beacuteneacuteficier de nombreuses informations etpermet au conteneur SLEE drsquoavoir une persistance des SBB de maniegraveretransparente Cette technique est emprunteacutee des speacutecifications des EJB

- Lrsquointerface du contexte drsquoactiviteacute qui sera utiliseacute pour les actions du timer(orgmobicentssleeexampleswakeupWakeUpSbbActivityContextInterface)

- La liste drsquoeacutevegravenements auquel le SBB souhaite des notifications o SIP MESSAGE event (javaxsipmessageRequestMESSAGE) Cet

eacutevegravenement est marqueacute en tant qursquoeacutevegravenement initial cela signifie queles eacutevegravenements MESSAGE reccedilus par le service WakeUp vont creacuteerune nouvelle instance du SBB racine qui aura son propre contextedrsquoactiviteacute associeacute Dans notre cas nous aurons une seule instance dece SBB lors du cycle de vie du service

o SLEE Timer event (javaxsleefacilitiesTimerEvent) Crsquoest lrsquoeacutevegravenementqui va initier un message wake up agrave renvoyer agrave lrsquoUA emetteur

- Une reacutefeacuterence au SIP Ressource Adaptor (jain-sip) Le SBB utilisera ce SIPRA pour interragir avec lrsquoUA

WakeUpSBBjava

Cette classe java possegravede une douzaine de meacutethodes nous allons analyser cellesqui sont speacutecifiques au service deacuteployeacute et qui sont diffeacuterentes drsquoautres services quiutilisent SIP

public void onMessageEvent(javaxsipRequestEvent eventActivityContextInterface aci)Cette meacutethode est appeleacutee quand une requecircte MESSAGE est reccedilue par le SLEEDans un premier temps la meacutethode accuse reacuteception du message agrave lrsquoUA Elle utilisele contexte drsquoactiviteacute creacuteer par le serveur pour interagir avec le client pour encapsulerune reacuteponse SIP

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 31: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 31 -

Notifiy the client that we received the SIP MESSAGE requestServerTransaction st = (ServerTransaction) acigetActivity()Response response = messageFactorycreateResponse(ResponseOK

request)stsendResponse(response)

Dans un second temps la meacutethode creacutee un jeton (NullActivity) et lrsquoassocie agravelrsquoinstance courante du SBB Ce mecircme jeton sera alors envoyeacute au timer quand unappel agrave la meacutethode du SBB onTimerEvent() sera planifieacutee

CREATE A NEW NULL ACTIVITIYNullActivity timerBus =

thisnullActivityFactorycreateNullActivity()

ATTACH ITSELF TO THE NULL ACTIVITY BY USING THE ACTIVITY CONTEXT INTERFACEActivityContextInterface timerBusACI =

thisnullACIFactorygetActivityContextInterface(timerBus)timerBusACIattach(sbbContextgetSbbLocalObject())

Ensuite le code analyse le message entrant et en extrait le temps en seconde et lecorps du message

PARSING THE MESSAGE BODYString body = new String(requestgetRawContent())int i = bodyindexOf( )String timerValue = bodysubstring(0i)int timer = IntegerparseInt(timerValue)String bodyMessage = bodysubstring(i+1)

Puis le SLEE creacuteer une vue sur le contexte drsquoactiviteacute du jeton que lrsquoon vient dedeacuteclarer (timerBusACI)

SETTING VALUES ON THE ACTIVITY CONTEXT USING THE SBB CUSTOM ACIWakeUpSbbActivityContextInterface myViewOfTimerBusACI =

thisasSbbActivityContextInterface(timerBusACI)

En utilisant le WakeUpSbbActivityContextInterface on enregistre le corps dumessage dans le jeton (NullActivity) creacuteer pour cela

myViewOfTimerBusACIsetBody(bodyMessage)

Ensuite on recherche lrsquoadresse de lrsquoUA pour renvoyer le wake up call

The From field of each SIP MESSAGE has the UA Address of Record(logical address)

which can be mapped to a current physical contact address Themapping is provided by the LocationService

which works together with the SIP Registrar serviceFromHeader fromHeader =

(FromHeader)requestgetHeader(FromHeaderNAME)Address fromAddress = fromHeadergetAddress()URI contactURI =

findLocalTarget(fromHeadergetAddress()getURI())

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 32: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 32 -

Address contactAddress = addressFactorycreateAddress(contactURI)ContactHeader contactHeader =

headerFactorycreateContactHeader(contactAddress)

On enregistre le contact dans le contexte drsquoactiviteacute du jeton

myViewOfTimerBusACIsetContact(contactHeader)

Pour finir un timer est creacutee et est planifieacute en utilisant le SLEE timer facility Le jetonest alors lieacute au timer afin qursquoil soit reacutecupeacutereacute facilement par la suite

SETTING THE TIMER BY USING THE VALUE IN THE SIP MESSAGE BODYTimerOptions options = new TimerOptions()optionssetPersistent(true)thistimerFacilitysetTimer(timerBusACI

nullSystemcurrentTimeMillis()+timer1000options)

public void onTimerEvent(TimerEvent event ActivityContextInterface

aci)Lorsque le timer arrive agrave sa fin le SLEE timer facility geacutenegravere un eacutevegravenement de typetimer Tous les SBB qui sont lieacutes au jeton (NullActivity) et qui eacutetaient associeacutes autimre vont recevoir cet eacutevegravenementCette meacutethode extrait tout simplement les donneacutees contact et body du jeton hellip

RETRIEVING STORED VALUE FROM THE ACTIVITY CONTEXT INTERFACEWakeUpSbbActivityContextInterface myViewOfACI =

thisasSbbActivityContextInterface(aci)Header contact = myViewOfACIgetContact()String body = myViewOfACIgetBody()

et les passe en argument agrave la meacutethode sendWakeCall

SENDING BACK THE WAKE UP CALLsendWakeUpCall(contact body)

private void sendWakeUpCall(Header toContact String body)

Cette meacutethode permet de composer un nouveau SIP MESSAGE addresseacute agravetoContact avec le texte body et lrsquoenvoieNotons que pour envoyer le message agrave lrsquoUA la meacutethode utilise le fournisseur de SIPRA comme cela est deacutecrit dans le sbb-jarxmlLe fournisseur SIP est reacutefeacuterenceacute lorsque le conteneur SLEE met en place le contexteSBB (voir serSbbContext())

Getting JAIN SIP Resource Adaptor interfacesfp = (SipFactoryProvider)

myEnvlookup(sleeresourcesjainsip11provider)

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 33: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 33 -

provider = fpgetSipProvider()

Le fournisseur (provider) est utiliseacute plus tard dans la meacutethode sendWakeUpCall()pour eacutetablir une transaction SIP avec lrsquoUA et envoyer un message

ClientTransaction ct = providergetNewClientTransaction(req)ctsendRequest()

Remarques

Le service Wake Up Call montre comment creacuteer un simple service SIP en utilisant lemodegravele de programmation JAIN SLEE Il nous a permit de bien comprendre lesbases du fonctionnement drsquoun programme de ce type Le chapitre qui vient drsquoecirctrepreacutesenteacute est inspireacute des explications preacutesentes sur le site de mobicents mais a eacuteteacuteadapteacute et traduit agrave ce que nous avons mis en œuvre durant notre projet

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 34: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 34 -

Conclusion

Les objectifs fixeacutes pour ce projet nrsquoont pas tous eacuteteacute remplis nous avons reacuteussi agravemettre en place une plateforme JAIN SLEE y deacuteployer des exemples et les fairefonctionner Nous nrsquoavons pas creacuteeacute de composant de traitement drsquoappel mais lesnombreux exemples que nous avons mis en œuvre et la bonne compreacutehension ducode nous porte agrave croire que la creacuteation de ce composant est agrave notre porteacutee apregravesun temps drsquoanalyse et de compreacutehension non neacutegligeable En effet la mise en placedrsquoexemples simples comme le service Wake Up nous a permis drsquoappreacutehender desprogrammes plus complexes

JAIN SLEE est une nouvelle technologie qui va permettre un rapprochement entre lemonde des teacuteleacutecommunications et celui de lrsquoInternet afin de creacuteer de nouveauxservices appeleacutes NGS (Next Generation Service) Il aura eacuteteacute tregraves inteacuteressant pournous durant ces deux semaines de projet de deacutecouvrir les nombreuses possibiliteacutesdrsquoutilisation et le fonctionnement drsquoune technologie porteuse drsquoavenir

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1

Page 35: Jain Slee Rapport final - Freeyassine.ab.free.fr/Documents/Jain_Slee_Rapport_final.pdf · Projet ILR : JAIN SLEE, mars 2006 F. Anjubault / P. Lancastre - 7 - 2.2 Configurer le serveur

Projet ILR JAIN SLEE mars 2006

F Anjubault P Lancastre - 35 -

Reacutefeacuterences et bibliographie

httpwikijavanetbinviewCommunicationsMobicentsExamplesWakeUphttpwwwjainsleeorghttpwwwopencloudcomhttpsys-concomstorystoryid=46230ampDE=1