Upload
dinhthu
View
220
Download
4
Embed Size (px)
Citation preview
1
Session Initiation Protocol
G.Vanwormhoudt
2
Préambule (1)
• Evolution RTC (1ère gen) vers RéseauxIntelligents
• Réseaux Intelligents– Introduction de l’informatique dans les réseaux
téléphoniques avec pour objectif création de services àvaleur ajoutée
– Même fonctions dans le réseau téléphonique globaleque le CTI (Computer Telephony Integration) dansl’entreprise
•Centre d’appel, gestion téléphonie personnelle, messagerieunifié, filtrage des appels, …
– Signalisation puissante et sophistiquée (SS7)
3
Préambule (2)
• Irruption de la téléphonie sur les réseaux de données (IP)
• Quid des procédures de signalisations dans le monde IP ?
=> Next Generation Network
RéseauxIntelligents
RéseauxIP
Circuits Paquets
?
Applications Telecoms
4
Signalisation sur IP
• « La signalisation concerne l’ensemble des informationséchangés par les terminaux, les entités de contrôle et lesgateways participant à toutes les phase d’établissementde contrôle et de rupture de la connexion » [Susbielle99]
• Protocoles de signalisation existants– Réseau intelligent : SS7
– Réseau IP : H323, SIP, MEGACO, SIGTRAN
Sur IP, les échanges de signalisation se font au niveauapplicatif
=> pas de participations des routeurs et commutateurs
5
Généralités SIP
• Session Initiation Protocol– Internet Engineering Task Force
– RFC2543, RFC3261, RFC3262, RFC3263, RF3264, …
– Historique: 1997 (Columbia university), 1999 (SIP Working group)
• Protocole de signalisation applicatif (niveau 7) utilisé pourl’établissement, la modification et la terminaison de sessionsmultimédias sur Internet
• Applications– Téléphonie IP (fonctions analogues à SS7)
– Audio/Vidéo conférence
– Services multimédia à la demande
– Jeu, Domotique, Messagerie instantanée, Pilotage d’appareils,..
6
Internet
Infrastructure SIP
Vue générale
Alice’s PC
@office.comBob’s SIP
Phone
flux multimédia
messages SIP
messages SIPm
essa
ges SI
P
7
Caractéristiques
• Protocole client/serveur de type requête/réponse
• Protocole transactionnel– Toute opération SIP se compose d’une série de
messages (requête/réponse)
• Protocole orienté Internet– Messages émis en mode texte
– Inspiration SMTP/HTTP
– compatible RFC 822 (mode texte / UTF-8)
• Indépendant de la couche transport– TCP, UDP, UDP multicast
8
SIP et les autres protocoles IP
9
Fonctionnalités
• Localisation du(des) participant(s) à la session– terminaux multiple, mobilité, identifiant unique, ...
• Gestion de la disponibilité– mise en attente, transfert, déviation (traitements sophistiqués)
• Gestion des capacités– configuration, négociation des paramètres de la session,
hétérogénéité des terminaux
• Etablissement de la session– mise en relation des deux participants
• Gestion de la session– modification, terminaison
10
Ce que SIP ne fait pas
• Ne décrit pas les sessions
• Ne contrôle pas les conférences
• Ne contrôle pas les passerelles
• Ne réserve pas les ressources pour la session
• Peut être utilisé conjointement avec d’autresprotocoles qui réalisent ses taches– RTP
– RTSP
– SDP
– MEGACO ... et autres
11
Les couches de SIP
Transaction User layer(traitement applicatif, creation session)
Transaction layer(gestion transactions, retransmission)
Transport Layer(connection/déconnection,
envoi/reception)
Syntax and encoding layer(analyse et formatage messages)
12
Entités d’une architecture SIP1
• Agent Utilisateur Client et Serveur– Points finaux capables d’émettre ou de recevoir des
requêtes (resp. réponses) SIP– Participants à une session SIP– Types d’agent serveur
•Personne physique, machine, enregistreur de message, serveurvidéo à la demande, ...
• Serveur de localisation– Offre des services pour obtenir et mettre à jour des
informations sur le destinataire (adresse actuelle etmultiple, droit, mot de passe, disponibilité, ...)
– Entité utilisée par les serveurs proxy et serveurs deredirection
13
Entités d’une architecture SIP2
• Serveur proxy– Entité intermédiaire active qui est à la fois client et serveur
– Retransmet les requêtes vers le destinataire (Routage) ens’appuyant sur son service de localisation
– Traite les requêtes (analyse pour authentification, transformation,multi-diffusion, ..)
– Mode opératoire
• stateless, call statefull, transaction stateful
• Serveur de redirection– Reçoit des requêtes et renvoie à l’émetteur une ou plusieurs
adresses pour contacter le destinataire (régulation charge)
– A la différence du serveur proxy, ce serveur n’initie pas derequêtes
14
Exemple d’architecture SIP
Sip proxy
User Agent A
SIP Redirect
Server
Location Information
Service
Sip proxy
(Registrar)
User Agent B
Sip proxy
Non SIP Protocol
SIP Request
SIP Response
Fig 2
1
3
47
8
652
12
9
10
11
15
Adresse SIP
• SIP exploite des formats d’adresses de type e-mail :user_ID@host_name– user_ID peut être un individu, un groupe, un service, ...
• Différents formes possibles– user@domain [email protected]
– user@host [email protected]
– user@IP_adress [email protected]
– phone-number@gateway [email protected]
• Résolution des adresses (directe, via DNS, SMTP)
16
URLs SIP
• Utilisé dans les requêtes (entête From, To, Contact)• Intégration dans des pages HTML, emails
Exemples : sip:[email protected]
sip:[email protected];user=phone
sip: infos_utilisateur @ domaine paramètres en-têtes
infos_utilisateur (nom de l’utilisateur:mot de passe) ou
(numéro téléphone, si user=phone)
domaine
paramètres
en-têtes
nom de domaine ou nom d’hôte ou adresse IP: port
;transport=udp ou tcp
;user=phone ou IP
;method=INVITE, ACK, OPTIONS, BYE, CANCEL, REGISTER
;ttl=0 à 255 (time-to-live d’un paquet IP multicast)
;maddr=adresse IP multicast
;tag=compteur
? par1=valeur1 & par2=valeur2 & par3=valeur3...
17
Message SIP
Ligne de début
En-tête message
ligne vide
Format générique des messages SIP - RFC822 (HTTP aussi)
(Requête et réponse)
Corps Message
18
Exemple de message SIP
INVITE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP gva.enic.fr;
Max-Forwards: 70
To: Pascal<sip:[email protected]>
From: Vanwormhoudt<sip:[email protected]>;
Call-ID: [email protected]
CSeq: 1 INVITE
Contact:<sip:[email protected]>
Content-Type: application/sdp
Content-Length: 142
o=gva 2874587367 2984095874 IN IP4 192.168.247.85
s=heure?
c=IN IP4 192.168.247.100
m=audio 3000 RTP/AVP 0 3
Corps
En-tête
Ligne de début
19
Requête SIP
méthode URL SIP/2.0
Via:
From:
To:
Call-ID:
Cseq:
Content-Length
Content-Type:
Champ:
SIP/2.0/protocole hôte:port
username <sip:from_user@source>
username <sip:to_user@destination>
localid@hôte
numéro_seq méthode
longueur du corps
type de média du corps
paramètre ;par1=valeur; par2= valeur
ligne vide
V=0
o= user_origine timestamp timestamp IN IP4 hôte
c=IN IP4 média adresse_destination
t=0 0
m= type_média port RTP/AVP types_payload
Lignedébut
En-têtemessage
Corpsmessage
20
Méthodes de requête1
• Méthode REGISTER– Gestion (ajout, maj, suppression) des liaisons (identifiant agent
utilisateur, adresse contact) enregistrées dans le service delocalisation
– Egalement utilisé pour interroger le service de liaison (serveurproxy, redirection)
– L’agent utilisateur doit indiquer la durée de vie de la liaison
– L’agent utilisateur est également responsable du rafraichissementde la liaison
• Méthode OPTIONS– Permet d’obtenir des informations sur les capacités d’un agent
utilisateur ou d’un serveur sans avoir besoin d’établir une session
– Informations : méthodes supportées, extension, type contenu, ..
– Peut être émis en dehors ou à l’intérieur d’une session
21
Méthodes de requête2
• Méthode INVITE– Initie une session en invitant un agent utilisateur à une conférence
ou à simple appel
– Le corps du message contient généralement une description de lasession (utilisation de SDP: type de média audio, vidéo, data,format, codage en vigueur)
• Méthode ACK– Indique que l’appelant a reçu une réponse finale à l’invitation
– Le corps du message peut contenir la description finale de lasession (négociation des capacités)
– Un corps vide indique que la description du message Invite serautilisée
22
Méthodes de requête3
• Méthode CANCEL– Annule un requête (Invite) émise par l’appelant
– Requête « Hop-by-hop »
– Doit être utilisé après la réception d’une première réponse
– Utilisé par les serveurs proxy lors de recherches parallèles delocalisation
• Méthode BYE– indique à l’autre participant que la session doit se terminer
• Autres méthodes– UPDATE - mise à jour de la Session
– PRACK (RFC3262) - ACK for Provisional Responses
– SUBSCRIBE & NOTIFY (RFC3265) - Service de présence
23
Réponse SIP
Via:
From:
To:
Call-ID:
Cseq:
Content-Length
Content-Type:
Champ:
SIP/2.0/protocole hôte:port
username <sip:from_user@source>
username <sip:to_user@destination>
localid@hôte
numéro_seq méthode
longueur du corps
type de média du corps
paramètre ;par1=valeur; par2= valeur
ligne vide
V=0
o= user_origine timestamp timestamp IN IP4 hôte
c=IN IP4 média adresse_destination
t=0 0
m= type_média port RTP/AVP types_payload
typeréponse
en-têtemessage
corpsmessage
SIP/2.0 status reason-phrase
24
Statut des réponses
• 1xx : information sur le traitement des requêtes– 100 trying, 180 ringing
• 2xx : succès– 200 Ok
• 3xx : redirection– 300 multiples choices, 302 moved temporarily
• 4xx : erreur client– 401 unauthorized, 404 not found
• 5xx : erreur serveur– 501 not implemented, 503 service unavailable
• 6xx : erreur globale– 600 busy, 601 decline, 606 not acceptable
25
Exemples de réponse
SIP/2.0 200 OK
Via: SIP/2.0/UDP sip-proxy.int.fr
Via: SIP/2.0/UDP gva.enic.fr;
Max-Forwards: 70
To: Pascal<sip:[email protected]>
From: Vanwormhoudt<sip:[email protected]>;
Call-ID: [email protected]
CSeq: 1 INVITE
Contact:<sip:[email protected]>
Content-Type: application/sdp
Content-Length: 142
o=pascal 4868949 4858949 IN IP4 198.7.6.5
s=Ok
c=IN IP4 goujon.int.fr
m=audio 3000 RTP/AVP 0 3
Corps
En-tête
Ligne de début
26
Principaux champs d’entêtes
• TO: URL-SIP de la destination
• From: URL-SIP de la source
• Call-ID: identifiant de session (vers.simple local-id@host)
• Maxforward: nombre max de sauts pour traiter le message
• Cseq(Command Sequence) : Numéro de transaction dansla session + méthode
• Via: route empruntée par un message jusqu’à ce noeud– prévention des boucles, garantie le chemin de retour (billing,...)
• Contact : pour l’enregistrement d’informations (Register) oule reroutage
• Content-type : type de média du corps (application/sdp)
• ...
27
Session Description Protocol
• SIP utilise le protocole SDP (session description protocol,RFC 2237)
• SDP est employé pour définir les attributs d’une sessionSIP avec une syntaxe standard– Echange des capacités des terminaux
• Les paramètres SDP sont placés dans le corps d’unerequête SIP
• Les entêtes SDP sont encodées en format text et sont de laforme <champ>=<valeur>.
• Le <champ> est toujours un simple caractère et la<valeur> est une chaine de caractères formatée selon lechamp
28
Quelques champs SDP
information sur laconnexion (PSTN, IP)
informationconnection
c
attributs de session,description de média
session attributesm
attributs de médiasmedia attributesa
bande passantebandwith (kbps)b
nom de la sessionsession names
propriétaire/créateurde la présentation
owner/creator
/session id
o
29
Exemple SDP
v=0
o=gva 2874587367 2984095874 IN IP4192.168.247.85
s=Inquiry
c=IN IP4 192.168.247.100
m=audio 3000 RTP/AVP 0
m=video 4000 RTP/AVP 31
30
Etablissement d’une sessionMode point à point
User Agent Client User Agent Server
[email protected]@193.48.251.57
INVITE [email protected]
SIP 180 Ringing
SIP 200 OK
ACK
BYE
SIP 200 OK
!
!
COMMUNICATION
31
Etablissement d’une sessionavec localisation1
1. Enregistrement de la localisationIdentifiant d’appel: <sip:[email protected]>
Alice enregistre son identifiant et son
adresse actuelle dans le proxy de
son domaine
home.com
office.comalice
bobm2.home.com
Proxy
[email protected] =>[email protected]
REGISTER home.com SIP/2.0To: sip:[email protected]: sip:[email protected]…
32
Etablissement d’une sessionavec localisation2
2. Appel (phase 1)– Bob appelle Alice en utilisant [email protected]
– Résolution DNS coté client
home.com
office.comalice
bobm2.home.com
DNS lookup for sip.udp.home.comResolve to pc4.home.com
pc4.home.com
33
Etablissement d’une sessionavec localisation3
2. Appel (phase 2)– Envoi de la requête Invite sur le réseau
home.com
office.comalice
bobm2.home.com
pc4.home.com
INVITE sip:[email protected] …To: sip:[email protected]: “Bob” <sip:[email protected]>…c=IN IP4 128.59.19.60m=audio 8000 RTP/AVP 0 5 8
User agent client
34
Etablissement d’une sessionavec localisation4
3. Traitement de la requête par le proxy- Recherche de la localisation à partir de l’identifiant
- Retransmission vers l’adresse actuelle d’Alice
home.com
office.comalice
bobm2.home.com
pc4.home.com
INVITE sip:[email protected] …To: sip:[email protected]: “Bob” <sip:[email protected]>…
Proxy
35
Etablissement d’une sessionavec localisation5
4. Attente du correspondant– Le correspondant a été trouvé, son “poste” est en train de
“sonné”
– L’attente est traduite par une réponse Ringing
home.com
office.comalice
bobm2.home.com
pc4.home.com
SIP/2.0 180 Ringing
Proxy
36
Etablissement d’une sessionavec localisation6
5. Etablissement de la session– Quand l’appel est accepté par Alice, la réponse OK est
retournée à Bob
– L’UAC de Bob accuse réception de la réponse avec un messageACK
home.com
office.comalice
bobm2.home.com
pc4.home.com
SIP/2.0 200 OK…c=IN IP4 135.180.144.32m=audio 9000 RTP/AVP 0 8
ACK sip:[email protected] …To: sip:[email protected]: “Bob” <sip:bob...>…c=IN IP4 128.59.19.60
37
Etablissement d’une sessionavec localisation7
6. Transmission des flux multimédia– Paquets RTP audio
home.com
office.comalice
bob
38
Etablissement d’une sessionavec localisation8
7. Fin de la session- Quand l’un des 2 participants met fin à la session, la requête
BYE est envoyée
home.com
office.comalice
bob
BYE sip:[email protected]
39
Sequence des messages avecplusieurs proxys
40
Etablissement d’une sessionmode redirect
Internet
Location ServerRedirection Server
INVITE [email protected]
SIP 301 Moved Temporarily
ACK
INVITE gva@ 193.48.251.66
ACK
SIP 180 Ringing
int.fr
sip.enic.fr
SIP 200 OK
193.48.251.66REGISTER
41
Exemple de scénario possibleavec SIP1
Internet Backbone
SIP Server columbia.edu
SIP Server Lucent.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
42
Exemple de scénario possibleavec SIP2
• Description du scenario– Bob a trois bureaux, un chez Lucent et deux à l’université Columbia
où il enseigne (bureau et lab)
– Bob publie une seule identifiant d’appel: [email protected]
– Un jour, Bob est à l’université et enregistre sur le serveur SIP de Lucentl’adresse [email protected] (1)
– Il enregistre aussi sur le serveur de Columbia, ses deux adresses àColumbia (2, 3)
• [email protected], [email protected]
– Le jour suivant, Bob configure son poste de labo pour qu’il redirigeautomatiquement l’appel vers son adresse chez lucent, oubliant lesenregistrements précédents
43
Exemple de scénario possibleavec SIP3
– Plus tard le même jour, [email protected] appel [email protected] (4)(résolution DNS = Serveur SIP Lucent)
– Le serveur SIP de Lucent localise l’adresse courante de bob (5) etretransmet donc l’appel à [email protected] (6)
– Le Service SIP de Columbia détermine qu’il existe deux adressespossibles (7) et diffuse l’appel (i.e « fork ») vers celles-ci (8,9)
– Le poste de labo selon sa configuration redirige l’appel vers leserveur SIP de Lucent qui détecte une boucle et retourne une erreur(10,11)
– L’erreur est propagée par le poste au serveur SIP de Columbia (12)
– Dans le même temps, Bob a répondu à l’appel depuis son bureau(13)
44
Exemple de scénario possibleavec SIP4
– Le serveur SIP de Columbia a maintenant les deux réponses etpeut retourné l’acceptation de l’appel au Serveur SIP de Lucent(14) qui fait de même vers l’agent de jack (15)
– A ce stade, Les serveurs peuvent détruire les états liés à l’appelJack et Bob communique directement sans passer par les serveursintermédiaires (16)
• Caractéristiques de SIP mises en évidence par ce scénario– Forking
– Mobilité utilisateur
– Détection de boucle
45
Programmation de services SIP1
" Solutions suggérées par l’IETF– SIP Call Processing Language ( SIP – CPL )
• Langage de scripts pour décrire des services d’appels
• Syntax XML, extensible, éditable// Script qui intercepte les appels anonymes
- <?xml version="1.0" ?><!DOCTYPE cpl PUBLIC "-//IETF//DTD RFCxxxx CPL 1.0//EN""cpl.dtd"><cpl>! <incoming>! ! <address-switch field="origin" subfield="user">! ! ! <address is="anonymous">! ! ! ! <reject status="reject"! ! ! ! ! reason="I don't accept anonymous calls" />! ! ! </address>! ! </address-switch>! </incoming></cpl>
Scritp interprété par le serveur SIP
Call not
matchmatch
actions
46
Programmation de services SIP2
- SIP Common Gateway Interface ( SIP – CGI )– similaire au CGI-HTTP
– Indépendant du langage (Perl, Tcl, C, C++, ...)
– activation d’un exécutable réalisant le service
– Passage des parametres à travers les variablesd’environnement
// traite tout appel du boss comme urgent
if (defined $ENV{SIP_FROM} &&
$ENV{SIP_FROM} =~ /sip:[email protected]/)
{
foreach $reg (get_regs())
print "CGI-PROXY-REQUEST $reg SIP/2.0\n";
print "Priority: urgent\n\n";
}
47
Programmation de services SIP3
– SIP Servlet– similaire aux servlets HTTP - même propriété
– Encapsulation des messages SIP dans des objets Java, Multi-threading
– Portabilité entre les OS et les serveurspublic class RejectServlet extends SipServletAdapter {
public boolean doInvite(SipRequest req) {
SipResponse res = req.createResponse();
res.setStatus(603);
res.send();
return true;
}
}
– Autre effort : JAIN (cf suite du cours)
48
Passerelle PSTN <-> SIP (1)
Telephone
networkSIP/PSTN gateway
SIP server IP endpointTelephonesubscriber
+1 212 9397063
#Traduction audio (PCMU/PCMA)
#Traduction du signal (PRI/T1,ISUP)#Overlap signaling
#Perte des caractéristiques avancées de SIP in PSTN
#Traduction des identifiers (numéro tel.)#1-212-939xxxx => @itgw1.cs.columbia.edu
49
Passerelle PSTN <-> SIP (2)
Au debut de la communication lapasserelle reçoit ISUP (Protocole designalisation) du PSTN et emploiel'encapsulation et la traduction dans
les messages SIP envoyés au traversdu réseau VoIP. Pour le proxyl’utilisation du contenu de l'ISUP estdonc ignoré et seulement le contenude SIP est transféré au téléphone
SIP.
50
Agents SIP existants
EZ-Phone Ubiquity SIP Phone
51
Conclusion sur SIP
• Autres aspects de SIP non abordés– Sécurity (Authentification, cryptage d’entête, du contenu)
– Qualité de services• Pas de réservation des ressources
• Combinaison avec d’autres protocoles: RSVP, COPS (SDP)
– Présence (SUBSCRIBE, NOTIFY méthodes, ...)
– Préférences d’appels• Essayer vidéophone d’abord, ensuite le téléphone, enfin la
messagerie
• Extension du champ CONTACT
– Conference, Facturation
• Plus d’infos sur– http://www.cs.columbia.edu/sip
– http://www.sipcenter.com
52
JAIN - SIP
Gilles Vanwormhoudt
53
Java API for IntegratedNetworks1
• JAIN est un ensemble d’API Java pour le développementrapide de produits/services de télécoms de la prochainegénération (25 API spécifiés par plus de 80 companies)
• Objectifs– Portabilité des services (Write Once, Run anywhere)
– Abstraction des réseaux pour les applications: (Any network)• réseaux paquets (IP), réseaux circuits (PSTN) et réseaux sans fils
– Accès réseau sécurisé : ouverture controlée et sécurisée descapacités du réseaux aux applications Java
• Vision de JAIN– Faire évoluer le domaine des télécommunications qui repose sur une
architecture de boites matérielles et logicielles propriétaires vers unearchitecture ouverte où les services peuvent être rapidement créés etdéployés, peu importe la plateforme et le réseau
54
JAIN2
55
Architecture de JAIN
56
Couches d’abstraction JAIN
IPWirelessTelecomm.
SS7 avecapplications
mobiles (MAP)
Mobile SwitchingCenter (MSC)
Base stationcontroller, Home
LocationRegister,...
SIP,MGCP,
Megaco, H323
Réseauintelligent, SS7,
ISUP, TCAP
Couche
réseau
Proxy, Redirect,H323
Gatekeeper, ...
Signaling ServicePoint (SSP)
Couche
signalisation
Serveurd’applications
Internet
Service
Control Point(SCP)
Couche service
57
APIs JAIN1
58
APIs JAIN2
59
JAIN Protocol API
• JAIN SS7 API– Fournit des API pour permettre à une application
développée en Java (ex. SCP et SSP) d’accéder auxservices fournis par SS7
– Protocoles supportés: TCAP, ISUP, MAP, INAP
• JAIN IP API– Fournit des API pour permettre à une application
développée en Java (ex: Media gateway, Call Agent,Proxy, Gateway controller) d’établir descommunications avec différents protocoles IP
– Protocoles supportés : H323, MGCP, SIP
60
Principes Architecturauxde JAIN Protocol API
Application
Listener
Event
Provider
Stack
Protocol Stack
JAIN
Protocol
Layer
61
JAIN JCC/JCAT API
• JCC (Java Call Control) API– API pour le contrôle d’appel en Java
•Création, observation, manipulation, traitement des appels
– Basé sur un modèle d’appel générique supportant dessessions multi-médias, multi-parties et multi-protocoles
• JCAT (Java Coordination and Transaction) API– API pour l’invocation des services/applications avant,
durant et après les appels ainsi que pour le traitementdes paramètres d’appels
62
JAIN JCC/JCAT API
63
Concepts de JCC/JCAT 1
JCC/JCAT API
64
Concepts de JCC/JCAT 2
65
JAIN SLEE : Service LogicExecution Environnement1
• Environnement d’exécution générique desservices/applications JAIN (Gateway, Proxy, SCP, SSP)
• Rôle analogue aux serveurs d’applications d’entreprise(exemple conteneur EJB, conteneur Web)
• Conçu et optimisé pour ce type de services/applications– Gestion des évènements très efficace, invocation asynchrones,
transactions légères, …
• Fournit des fonctionnalités communes– Transaction, persistence, régulation de charge, sécurité …
• Facilite le déploiement dynamique de services, leuradministration et leur maintenance
• Fournit une interface JAIN Parlay pour les services àl’extérieur du réseau (untrusted services)
66
JAIN SLEE : Service LogicExecution Environnement2
67
JAIN SLEE : Service LogicExecution Environnement3
68
JAIN et SIP
• JAIN-SIP– API de bas niveau
basée sur le RFC 2543
• JAIN-SIP Lite– API de haut niveau pour
créér un agent SIP
• JAIN-SIP Servlet– API pour programmer
des servlets SIP
69
JAIN-SIP
• Interface JAVA standard qui encapsule une pilede signalisation SIP
• Spécification JSR - SUN
• Historique: JSR Approval 1999, Final Aout
• Spécification actuelle : 1.2
• Offre les abstractions du protocole SIP sous-forme d’objets JAVA
• Permet à une application/une servlet ou un beand’embarquer un pile SIP et d’accéder à desfonctionnalités d’appel de bas niveau.
70
JAIN-SIP
• Simplifie la construction des entités SIP– Agents Utilisateurs,
– Serveurs Proxy, Serveur de redirection
• JAIN SIP peut être utilisé dans un agentutilisateur ou un proxy
• Garantit la portabilité des applications entre pileJAIN-SIP via la définition des interfaces et lecomportement à l’exécution (TCK test suite)
71
Architecture de JAIN-SIP
SIPListeners
SIPProvider SIPProvider
SIPStack SIPStack
SIPListeners
Réseau
EvénementsMessages SIP Messages SIP Evénements
Agent Client Agent Serveur
72
Responsabilités de l’application
• L’application doit utiliser l’interface du provider pour tousaccès à la pile (pas d’accès directe aux couches sous-jacentes)
• L’application doit enregistrer auprès de la pile un ouplusieurs objets implantant l’interface SipListener
• L’application est notifiée de l’arrivée de message SIP, elleest responsable des réponses
• Pour une mode sans état, l’application est responsable dutraitement de retransmission en cas de timeout lié à unmessage
73
Responsabilités de la pile
• Offre des méthodes pour formater et envoyer desmessages SIP
• Analyse les messages SIP entrants et en construit unreprésentation sous forme objets que l’application peutaccéder et modifier à travers des interfaces Javastandardisés
• Invoque les gestionnaires d’événements de l’applicationquand un événement intéressant se produit
• Fournit le support des transactions
• Gère les transactions et les dialogues pour l’application
74
Vue interne de la Pile SIP
75
Paquetages JAIN-SIP
• jain.protocol.ip.sip– SipStack, SipProvider, SipListener, ...
• jain.protocol.ip.sip.header:– Fabrique d’entêtes, interfaces pour chaque entête SIP
supportée
• jain.protocol.ip.sip.message– Fabrique de messages : Message, Request, Response
• jain.protocol.ip.sip.address– Fabrique d’adresses : Analyse et construction
d’adresses URL
76
Abstractions JAIN-SIP1
• jain.protocol.ip.sip.SipFactory:– Fabrique pour construire l’objet implantant la Pile et
les autres fabriques d’objets
• jain.protocol.ip.sip.SipStack– Analyse les messages entrants et génère les
évènements associés
– Gère les transactions et génére des événementstimeout associés
– Les objets transactions ne sont pas directementaccessibles par l’application
77
Abstractions JAIN-SIP2
• jain.protocol.ip.sip.ListeningPoint– Correspond à l’adresse de la pile (UDP/TCP)
– C’est l’adresse IP et le port à partir desquels la pilerecoit et envoie les messages
– La pile peut être configurée pour un ou plusieursListeningpoint
• jain.protocol.ip.sip.Provider– Fournit des facilités pour le programme d’application
(sendRequest, sendResponse, sendAck…)
78
Fabriques d’objets
SipStack
SipFactory
crée
HeaderFactory
AddressFactory
+getInstance
+setPathName
+createSipStack
+createAddressFactory
+createHeaderFactory
+createSipProvider
+getListeningPoints
+createFromHeader
+createToHeader
+createViaHeader
+createContentTypeHeader
+createCSeqHeader
SipProvider
+addSipListener
+getNewCallIdHeader
+sendAck
+sendRequest
+sendResponse
MessageFactory
+createRequest
+createSipURL
+createNameAddress
crée
ListeningPoint*
+getHost
+getPort
79
JAIN SIP Object Architecture
SIP
Listener
SIP
Factory
Fonction
Initialisation
Pile SIP PropriétairePile SIP
Réseau
SIP
Stack
SIP
Provider
createListener() getInstance()
createStack()createProvider()Event
Registration
80
Abstractions JAIN-SIP3
• jain.protocol.ip.sip.message.Message– Représente un message SIP
– Interface pour extraire le type, les entêtes et lecontenu du message
– Interface pour construire un message
• jain.protocol.ip.header.Header– Représente une entête d’un message SIP
•Entête général : inclus dans requête ou réponse
•Entête de requête
•Entête de réponse
•Entête d’entité : decrit le corps du message SIP
81
Messages SIP
Message
+getCallIdHeader()
+getBodyAsString()
Request
+getMethod() : String
Response
+getStatusCode() : int
CallIdHeader
+getCallId() : String
MessageFactory
+createRequest(uri, method, …)
+createResponse(status, request,..)
82
L’interface SipListener1
• Tout programme d’applications JAIN-SIP doitimplanter l’interface jain.protocol.ip.sip.SipListener
• Un programme peut être client et serveur (proxy)
public interface SipListener extends java.util.EventListener
{
public void processResponse(SipEvent responseReceivedEvent);
public void processRequest(SipEvent requestReceivedEvent);
public void processTimeOut(SipEvent transactionTimeoutEvent);
}
• SipEvent représente une événement transmis à tousles listeners (accès identifiant transaction + message)
83
L’interface SipListener2
SipProvider
+addSipListener( :SipListener )
<<interface>>
SipListener
+processRequest( :SipEvent )
+processResponse( :SipEvent )
+processEvent( :SipEvent )
Notifie
SipEvent
+getTransactionId() : long
+getMessage() : Message
MonApplicationSip
+processRequest( :SipEvent )
+processResponse( :SipEvent )
+processEvent( :SipEvent )
Abonné
84
Squelette d’applicationsJAIN-SIP1
1. Creation d’une instance de SIPFactory
2. Creation d’une instance de pile SIP
sipFactory = SipFactory.getInstance();
sipFactory.setPathName("gov.nist");
try {
sipStack = sipFactory.createSipStack();
} catch(SipPeerUnavailableException e) {
System.exit(-1);
} catch(SipException e) {
System.exit(-1);
}
85
Squelette d’applicationsJAIN-SIP2
3. Création des fabriques d’entête et de messagesHeaderFactory headerFactory =
sipFactory.createHeaderFactory();
AddressFactory addressFactory =
sipFactory.createAddressFactory();
MessageFactory messageFactory =
sipFactory.createMessageFactory();
Listening listeningPoint =
sipStack.createListeningPoint(port,format);
SipProvider sipProvider =
sipStack.createSipProvider(listeningPoint);
4 Création d’un provider associé à un port
86
Squelette d’applications JAIN-SIP3
5 Construction & envoi des messages5.1 Construction des entêtes du message
fromAddress = addressFactory.createSipURL("caller",
sipProvider.getListeningPoint().getHost());
fromAddress.setPort(sipProvider.getListeningPoint().getPort());
fromNameAddress = addressFactory.createNameAddress
("Caller", fromAddress);
fromHeader =
headerFactory.createFromHeader(fromNameAddress);
contentTypeHeader =
headerFactory.createContentTypeHeader("application", "sdp");
...
87
Squelette d’applications JAIN-SIP3
5.2 Construction du message
callIdHeader = sipProvider.getNewCallIdHeader();
cSeqHeader =
headerFactory.createCSeqHeader(1,Request.INVITE);
invite = messageFactory.createRequest(requestURI,
Request.INVITE, callIdHeader,cSeqHeader,
fromHeader, toHeader, viaHeaders);
invite.setBody("b=32000", contentTypeHeader);
88
Squelette d’applications JAIN-SIP4
5.3 Envoi de messages
transactionId = sipProvider.sendRequest(invite);
// Le résultat d’une émission de requête est un identifiant de
transaction. Une transaction est un échange de messages
sipProvider.sendResponse( transactionId, Response.OK, strBody ,
« application!», «!sdp!»);
// L’émission d’une réponse nécessite un identifiant de transaciton,
le code statut de la réponse, le corps de la réponse, le type mime
sipProvider.sendAck( clientTransactionId );
// L’emission d’un accusé de réception nécessite un identifiant
89
Squelette d’applications JAIN-SIP5
• Traitement des requêtes (serveur, proxy)
public void processRequest(SipEvent requestReceivedEvent) {
Request request = (Request)requestReceivedEvent.getMessage();
long serverTransactionId = requestReceivedEvent.getTransactionId();
try {
if (request.getMethod().equals(Request.INVITE))
processInvite(request,serverTransactionId);
else if (request.getMethod().equals(Request.ACK))
…..
} catch (SipParseException ex) {
ex.printStackTrace();
}
}
90
Squelette d’applications JAIN-SIP6
• Traitement des réponses (client, proxy)
public void processResponse(SipEvent responseReceivedEvent) {
Response response = (Response)responseReceivedEvent.getMessage();
long clientTransactionId = responseReceivedEvent.getTransactionId();
try {
String method = response.getCSeqHeader().getMethod();
int statusCode = response.getStatusCode();
if((statusCode == Response.OK) &&
(method.equals(Request.INVITE))) {
sipProvider.sendAck(clientTransactionId);
}
else ...
} catch(SipException e) { }
}
91
Transactions JAIN-SIP
• Une transaction SIP est constitué (RFC 2543)– d’une seule requête
– de zero, une ou plusieurs réponses provisionnelles
– D’une ou plusieurs réponses finales
• Le protocole SIP fournit suffisamment d’éléments dans lesmessages SIP pour extraire l’identifiant de transaction
• JAIN-SIP identifie les transactions par un entier long
• Les transactions sont associés :– En émission avec toutes les méthodes sipProvider.sendXXX
– En réception avec les évènements SipEvent des méthodesSipListener.processRequest(SipEvent)
SipListener.processResponse(SipEvent)
SipListener.processTimeout(SipEvent)
92
Transactions Client/Serveur
Serv
er transactio
n
Clien
t transactio
n
Clien
t transactio
n
Serv
er transactio
n
Statefull proxyUAC UAS
93
Exemple :Third Party Call Control
94
Références
• Articles sur JAIN dans IEEE Communications Magazine
• Site de référence sur JAIN
http://java.sun.com/products/jain/
• JAIN SIP Specification:
http://jcp.org/jsr/detail/032.jsp
• JAIN-SIP Discussion List:
mailto:[email protected]
• NIST IP-Telephony Project page (NIST-SIP):
http://is2.antd.nist.gov/proj/iptel
Web-based protocol tester (in development):
http://is2.antd.nist.gov:8080/webtester/setup.html
95
Travaux Pratiques (1)
• Etablissement d’un circuit de transport voix sur IP– Négociation de débit, calcul de durée de la com
96
Travaux pratiques (2) :Déploiement
• Déployer et tester l’architecture SIP– en mode direct (sans proxy)
– en mode indirect (avec proxy)
Sip
Rtp
UAC UAS
UASUAC
Rtp
Sip
Sip
Proxy
97
Travaux pratiques (3) :Programmation
• Implanter la négociation de débit et le calcul de durée
• Groupe 1 de binômes– développement de l’Agent Utilisateur Client
• Groupe 2 de binômes– développement de l’Agent Utilisateur Serveur
• Implantation NIST de l’API Jain-SIP
• Squelette de code JAVA à compléter
• Wapiti - Module A45 - Travaux Pratiques