Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parVirgile Julien Vinet Modifié depuis plus de 8 années
1
FreeSwitch Stéphane Alnet stephane@shimaore.net RMLL 2009 – Nantes
2
Pour en savoir plus... Cluecon, Chicago
3
Histoire de FreeSwitch Anthony Minessale – Développeur Asterisk de longue date Frustration autour d'Asterisk – Création de threads – Listes liées (au lieu de table de hashage) – etc. – Tous les détails: http://freeswitch.org/node/117 Été 2005: FreeSwitch
4
FreeSwitch Core + modules – Core ● Gestionnaire d'évènements ● Gestion des codecs, fichiers, memoire, … ● Création d'appels (canaux / « channels ») ● Chargement des modules – Modules ● Plus de 80 modules ● Codecs, répertoires, gestion des appels (« dialplans »), média local (« endpoints »), formats de média, langages de programmation, commandes (API),...
5
FreeSwich Ré-utilise un grand nombre d'outils existants – Sofia-SIP – APR, PCRE – Teletone, SpanDSP, OpenZap
6
Évènements Echanges entre modules via des évènements (« events ») – Ça me rappelle Erlang – En pratique on ne les voit pas ● Les différents modules s'occupent de les cacher
7
« dialplans » = comment un appel est géré – Par défaut, syntaxe XML – XML peut être « stocké » dans: ● Fichiers – Comme le reste de la configuration ● Web serveur (via xml_curl) ← dynamique! – Peut aussi être stocké dans un répertoire LDAP ● Euh... Intégration avec des langages de programmation – Lua, Perl, Javascript, Python, et d'autres Gestion des appels
8
Applications, Commandes Les « applications » – Sont activées par les « dialplans » ou les langages de programmation – S'appliquent à la session (appel) en cours – XML: Ne pas confondre avec les « API commands » – Pas besoin de session – Pas disponible dans le « dialplan » – Utilisés (p.ex.) pour contrôler un appel « depuis l'extérieur »
9
Fichiers pour démarrer./bin/fs_cli./log/freeswitch.log./conf/autoload_configs/*./conf/dialplan/*./conf/directory/*./conf/sip_profiles/*./conf/vars.xml
10
CLI fs_cli peut être utilisé pour exécuter des « API commands », par exemple fs_cli -x 'reloadxml' fs_cli -x 'show calls' fs_cli -x 'sofia status profile internal' Fonctionne aussi en mode interactif
11
conf/autoload_configs Fichiers de configuration des modules – switch.conf.xml – Configuration du « core » – modules.conf.xml – Quels modules sont chargés au démarrage – acl.conf.xml – Utilisé pour « authentifier » par IP – xml_curl.conf.xml – Définir un serveur xml_curl
12
conf/dialplans
13
bridge « bridge » crée un nouvel appel sortant (« B- leg ») – destinationA|destinationB|... en série – destinationA1&destinationA2&... en parallèle – [paramètre]destinationA – paramètres spécifique à cette destination – {paramètre}destinations – paramètres appliqué à toutes les destinations – Nombreux paramètres (>100)
14
Destinations USER/nom@domaine – Utilise le répertoire (« directory ») sofia/profil/URI – Utilise les paramètres du profil pour placer l'appel sofia/gateway/gateway/destination – Utilise la passerelle (ou fournisseur) indiquée
15
bridge
16
confirm.js // Confirmation d'appel en Javascript if(!session.getVariable("leg_confirm")) exit(); if(session.ready()) session.streamFile(prompt_file,onInput); function onInput( session, type, data, arg ) { if(type=="dtmf" && data.digit=="1") { confirmed = true; return false; } return true; }
17
Multi-domaines Deux pages pour montrer comment gérer plusieurs domaines sur un même serveur.
18
Multi-domaines./conf/sip_profiles/internal.xml
19
Multi-domaines./conf/directory/example.com.xml ● (Respectivement pour example.net) Les utilisateurs définis dans example.com/*.xml et example.net/*.xml peuvent avoir les mêmes numéros mais sont vus comme différents: 200@example.com et 200@example.net
20
Sofia-SIP Sofia-SIP supporte plusieurs instances SIP – Possibilité de créer plusieurs serveurs SIP virtuels complètement indépendants à l'intérieur d'une seule instance FreeSwitch Sofia-SIP supporte UDP, TCP, et TLS
21
FreeSwitch + CouchDB
22
Idée un peu folle: – FreeSwitch peut obtenir sa configuration en temps réel via le web (module xml_curl) – CouchDB peut générer du contenu à la volée ● Pourquoi pas du XML? – Solution facile à deployer – Faire plus grand: utiliser les techniques de cache web (Squid par exemple)
23
CouchDB ?? CouchDB est une base de donnée « plate », sans schéma ou contraintes – Données stockées au format JSON ● Pas de schéma – Clef composite (JSON) – Accès direct ou séquentiel (intervalle de clefs) – Vues dynamiques (MapReduce) écrites en Javascript – Réplication
24
CouchDB use Net::CouchDb; my $cdb = new Net::CouchDb; $cdb->create_db('dialplan'); my $doc = new Net::CouchDb::Document; $doc->extension = '200'; $doc->context = 'routing'; $doc->pstn_cfa = '0153715371'; $cdb->put($doc);
25
Vue CouchDb: Générer du XML en Javascript function(doc) { var xml_header = " " + " " + " "; var xml_footer = " "; var key = doc.extension+'@'+doc.context; if(doc.pstn_cfa) { var xml = " "; emit(key,xml_header+xml+xml_footer); return; } }
26
JSON { key => '200@routing', value => ' ' }
27
Et pour finir La clef de la vue a le format « extension@context » – xml_curl fournit les paramètres ● Hunt-Destination-Number ● Hunt-Context – Un script fait le pont entre FreeSwitch et CouchDb ● Récupère les paramètres envoyés par xml_curl ● Envoie la demande à CouchDb ● Renvoie le résultat (texte XML) directement à xml_curl ● FreeSwitch interprète le XML
28
Conclusion: FreeSwitch + CouchDb Le concept fonctionne Temps de développement: deux soirées Écrire une interface web de gestion: $doc = $dialplan->get($number); $doc->pstn_cfa = $cgi->param('pstn_cfa'); $dialplan->put($doc); Mais performance à améliorer – Trop de connections TCP
29
En résumé FreeSwitch: performance et élégance – Développement très actif – Sofia-SIP = SIP comme il faut – Nombreux modules ● XMPP+Jingle ● Conference – Programmable ● XML n'est qu'une des nombreuses options
30
Merci! Obtenir la présentation: http://blog.shimaore.net/ stephane@shimaore.net Venez nous voir à l'Atelier!
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.