Asterisk-MySQL via ODBC
Tout fan d'Asterisk sait que ce dernier dispose d'un fichier appelé sip.conf lui servant de base d'infos pour stocker les comptes utilisateurs.
Le but de ce TP est de se passer de ce fichier pour utiliser une base de données SQL qui abritera les comptes utilisateurs et donc sera reliée à Asterisk par l'intermédiaire d'un module appelé ODBC sur Ubuntu 14.
Installation des prérequis ODBC et MySQL
# apt install mysql-server libmysqlclient-dev unixodbc-dev libmyodbc
Prérequis d'Asterisk
# apt-get install make libmysqlclient-dev unixodbc-dev g++ bison libcurl3 libcurl3-gnutls libcurl4-openssl-dev libssl-dev ncurses-term libncurses5-dev libjansson-dev libxml2-dev sqlite3 libsqlite3-dev libopus-dev libopusfile-dev libopus-dev libvpx-dev opus-tools libmp3lame-dev libmpg123-0 autoconf -y
1 - Installation d'Asterisk
# wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz

On le désarchive dans un dossier de choix
Je préfère /usr/local/src
# tar -xzf asterisk-13-current.tar.gz -C /usr/local/src/
# cd /usr/local/src/asterisk-13.34.0
# contrib/scripts/install_prereq install
# ./bootstrap.sh
# ./configure
Qui doit finir par un truc de ce genre

2 - Activer la prise en charge du module ODBC par Asterisk
# make menuselect
Activer res_odbc et dans Ressource Modules

res_odbc_transaction toujours dans Ressource Modules

ODBC_STORAGE dans Voicemail Build Options

Sauvegarder et sortir
# make && make install
# make config && make samples
Étape suivante : S'occuper de la base de données
- Éditer le fichier asterisk.sql pour adapter l'utilisateur et le mot de passe à votre situation.
- Exécuter le script. Chez moi, il est sur le Bureau

La base de données devrait être générée !
Il faudra ensuite l'alimenter
INSERT INTO sipusers (name, defaultuser, host, sippasswd, fromuser, fromdomain, mailbox) VALUES ('101', '101', 'dynamic', '101', '101', 'ec2lt.sn', '101');
INSERT INTO sipusers (name, defaultuser, host, sippasswd, fromuser, fromdomain, mailbox)
VALUES ('102', '102', 'dynamic', '102', '102', 'ec2lt.sn', '102');
INSERT INTO sipusers (name, defaultuser, host, sippasswd, fromuser, fromdomain, mailbox)
VALUES ('103', '103', 'dynamic', '103', '103', 'ec2lt.sn', '103');
INSERT INTO sipregs(name) VALUES('101');
INSERT INTO sipregs(name) VALUES('102');
INSERT INTO sipregs(name) VALUES('103');
INSERT INTO voicemail(context, mailbox, password) VALUES ('default', '101', '1234');
INSERT INTO voicemail(context, mailbox, password) VALUES ('default', '102', '1234');
INSERT INTO voicemail(context, mailbox, password) VALUES ('default', '103', '1234');
Tout comme le schéma qui a permis de générer la base de données et les tables, il serait mieux de mettre ces renseignements dans un fichier.
Dans notre cas, le fichier s'appelle users.sql et est stocké dans ~/Documents et l'exécuter.

Étape suivante : Adapter le module ODBC à la situation
- Le fichier /etc/odbc.ini
[MySQL-asterisk]
Description = MySQL Asterisk database
Trace = Off
TraceFile = stderr
Driver = MySQL
SERVER = localhost
USER = asterisk
PASSWORD = passer
PORT = 3306
DATABASE = asterisk
- Le fichier /etc/odbcinst.ini
[Default]
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
FileUsage = 1 ;
UsageCount = 2
- Le fichier /etc/asterisk/res_odbc.conf
[asterisk]
enabled => yes
dsn => MYSQL-asterisk;
username => asterisk
password => passer
pre-connect => yes

- Le fichier /etc/asterisk/extconfig.conf
[settings]
sipusers => odbc,asterisk,sipusers
sippeers => odbc,asterisk,sipusers
sipregs => odbc,asterisk,sipregs
voicemail => odbc,asterisk,voicemail

- Le fichier /etc/asterisk/sip.conf
Il faudra juste dé-commenter le paramètre suivant :
rtcachefriends=yes
- Le fichier /etc/asterisk/extensions.conf
[public]
exten => _1XX,1,Dial(SIP/${EXTEN},20,tr)
exten => _1XX,n,Voicemail(${EXTEN},u)
exten => _1XX,n,Hangup
exten => _1XX, 101, Voicemail (${EXTEN},b)
exten => _1XX, 102, Hangup
Redémarrer Asterisk

Test de fonctionnement
L'utilisateur 101 se connecte depuis son softphone

Réaction du serveur :

L'utilisateur 102 se connecte aussi

Voici une communication entre les utilisateurs 101 et 103


Vu les appels entre softphones, nous constatons que la config est bien faite !