Softmodem asterisk serveur

Comme partagé dans le post Serveur Minitel voici le systeme que j’ai mis en place pour simuler un serveur minitel en gardant le minitel d’origine sans le moindre changement et en passant par son modem et sa prise en T.

C’est le résultat de mes notes, un peu indigeste… difficilement accessible pour un débutant malheuresement … mais cela fonctionne !!! Ca demande de l experience avec Asterisk, compilation,…

Le principe de fonctionnement:
Minitel <-> Prise T <-> Carte TDM410 <-> Asterisk <-> Softmodem <-> TCP/IP <-> Serveur

On utilise le minitel de la même manière que dans les année 1980. On numérote un 36xx, on prend la ligne Connexion/Fin et le serveur repond.

Le Hardware:

  • un minitel 2 (je suppose que tout minitel doit fonctionné)
  • un téléphone type Socotel S63 ou VOIP pour faire des tests mais pas obligatoire
  • Un PC
  • une carte TDM410 avec trois cartes filles verte.

Le software:

Pour les softwares, je vous recommende de prendre les versions mentionnées car j’ai fait de multiples installations avec differentes versions avant de parvenir à faire une installation complète avec tous les modules qui fonctionnent. Maintenant ce n’est pas obligatoire mais doit permettre de vous faire gagner beaucoup de temps.

L’installation utilise un mélange de packages disponibles et des sources à compiler et installer.

Installation et configuration initiale :

  • Debian 10. Installation a partir d’un DVD (Boot du PC depuis le DVD) avec le minimum: pas d interface graphique et juste un serveur ssh. Je fais tout en ssh par la suite entant que root.

  • Asterisk
    – Asterisk joue le role de central téléphonique. Il va recevoir les appels vers les numeros 3611, 3612,… et les transférer vers les serverus associés. Dans notre cas, nous devons l’installer par l intermédiaire des sources que nous allons compiler, puis installer les binaires.
    – Un page de reference pour l installation: https://www.networklab.fr/installation-dasterisk/

    apt-get install -y linux-headers-$(uname -r)
    apt-get install -y git
    apt-get install -y g++
    apt-get install -y make
    apt-get install -y libncurses-dev
    apt-get install -y uuid-dev
    apt-get install -y libjansson-dev
    apt-get install -y libxml2-dev
    apt-get install -y libsqlite3-dev
    apt-get install -y patch
    apt-get install -y libedit-dev
    apt-get install -y patch

    cd /usr/local/src
    wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
    tar xvd asterisk-16.10.0
    cd asterisk-16.10.0

    ./configure
    make distclean; ./configure pour etre sure. Ok.

    make menuselect
    no change
    x

    make
    make install
    make samples
    make config
    /etc/init.d/asterisk start
    asterisk –rvvvvvvvvvv

  • dahdi
    – contient les drivers de la carte TDM410
    – Page de reference: https://ixnfo.com/en/configuring-tdm410p-with-asterisk-2.html
    – installation

    lspci -v
    => vous devez voir une ligne avec la reference de votre carte.apt-get install -y dahdi-source
    apt-get install -y libtonezone2.0 libtonezone-dev
    cd /usr/local/src/asterisk-16.10.0/
    ./configure
    make menuselect et la je peux choisir le chan_dahdi :wink:
    make install
    dahdi_span_assignments -v auto
    dahdi_genconf -v
    => genere la configuration dans les fichiers /etc/dahdi/assigned-spans.conf, /etc/dahdi/system.conf et /etc/asterisk/dahdi-channels.conf
    => Perso je les ai changé à la main comme indiqué dans le deuxieme post ci dessous.
    dahdi_cfg -vvvv
    => applique la configuration
    – Normalement cela suffi. Si vous avez des soucis voir la page de reference mentionée ci dessus.

  • spandsp
    – ibrairie qui fait le processing du signal pour softmodem.
    – Reference page: https://www.informaticapressapochista.com/asterisk/add-res_fax_spandsp_asterisk13/

    cd /root
    apt-get install libtiff-dev
    wget https://www.soft-switch.org/downloads/spandsp/snapshots/spandsp-20180108.tar.gz
    tar xvf spandsp-20180108.tar.gz
    cd spandsp-0.0.6
    ./configure
    make
    make install

  • asterisk-Softmodem
    – c est l’élément clef de cette solution. Ce soft va gérer le modem logiciel.
    – c est lui qui discute avec le modem du minitel et transmet les messages au serveur (Socket TCP).
    – Commandes pour l installation

    cd /root
    git clone https://github.com/PipoCanaja/asterisk-Softmodem.git
    cp /root/asterisk-Softmodem/app_softmodem.c /usr/local/src/asterisk-16.10.0/apps
    cd /usr/local/src/asterisk-16.10.0/
    make apps
    To use do a ‹ make install › on your asterisk source or copy apps/app_softmodem.so into your asterisk module directory (/lib/asterisk/modules).
    /etc/init.d/asterisk stop; /etc/init.d/asterisk start
    asterisk -rvvvvvvvv

    – verifions que le module est bien pris en compte
    CLI> module show like app_softmodem.so
    Module Description Use Count Status Support Level
    app_softmodem.so Softmodem v22 0 Running extended
    1 modules loaded

  • Serveur en PHP7.
    – asterisk-Softmodem va contacter le serveur sur un port TCP prédéfini. Le script doit donc écouter sur ce port et quand une connection arrive ouvrir la socket TCP.
    – Pour tester vous pouvez utiliser telnetd. (apt-get install -y telnetd et dans le fichier extension utiliser le port 23)
    – Le minitel envoie deux octets 0x13, 0x49 pour annoncer sa presence. Les codes sont décrit à cette page: http://millevaches.hydraule.org/info/minitel/specs/codes.htm
    – le plus simple est de répondre avec du texte ASCII qui s’affiche sur l ecran.
    – si vous appuyez sur le clavier du minitel le scrip php recoit les codes ascii associés.
    – Pour faire tout cela je suis parti de l exemple de la page: https://www.php.net/manual/en/sockets.examples.php

1 J'aime

Configuration /etc/dahdi/assigned-spans.conf:

#
# Autogenerated by /usr/sbin/dahdi_span_assignments on vendredi 12 juin 2020, 12:27:35 (UTC+0200)
# Map devices + local spans to span + base channel number

# Device: [] @PCI_Bus_03_Slot_05 /sys/devices/pci0000:00/0000:00:1c.2/0000:02:00.0/0000:03:04.0/pci:0000:03:04.0
Device: [] @PCI_Bus_03_Slot_05 /sys/devices/pci0000:00/0000:00:1c.2/0000:02:00.0/0000:03:04.0/pci:0000:03:04.0

Configuration /etc/dahdi/assigned-spans.conf:

# Autogenerated by /usr/sbin/dahdi_genconf on Wed Jun 10 22:36:31 2020
# If you edit this file and execute /usr/sbin/dahdi_genconf again,
# your manual changes will be LOST.
# Dahdi Configuration File
#
# This file is parsed by the Dahdi Configurator, dahdi_cfg
#
# Span 1: WCTDM/0 "Wildcard TDM410P" (MASTER) 
fxoks=1
#echocanceller=mg2,1
#echocanceller=oslec,1
fxoks=2
#echocanceller=mg2,2
#echocanceller=oslec,2
fxoks=3
#echocanceller=mg2,3
#echocanceller=oslec,3
# channel 4, WCTDM/0/3, no module.

# Global data

loadzone	= us
defaultzone	= us

Commenter les lignes echocaceller. Pour chaque carte fille verte, mettre fxoks.


Configuration /etc/asterisk/dahdi-channels.conf

; Autogenerated by /usr/sbin/dahdi_genconf on Wed Jun 10 22:36:31 2020
; If you edit this file and execute /usr/sbin/dahdi_genconf again,
; your manual changes will be LOST.
; Dahdi Channels Configurations (chan_dahdi.conf)
;
; This is not intended to be a complete chan_dahdi.conf. Rather, it is intended
; to be #include-d by /etc/chan_dahdi.conf that will include the global settings
;

; Span 1: WCTDM/0 "Wildcard TDM410P" (MASTER) 
;;; line="1 WCTDM/0/0 FXOKS"
signalling=fxo_ks
callerid="Channel 1" <7001>
mailbox=7001
group=5
context=work
channel => 1
callerid=
mailbox=
group=
context=work

;;; line="2 WCTDM/0/1 FXOKS"
signalling=fxo_ks
callerid="Channel 2" <7002>
mailbox=7002
group=5
context=work
channel => 2
callerid=
mailbox=
group=
context=work

;;; line="3 WCTDM/0/2 FXOKS"
signalling=fxo_ks
callerid="Channel 3" <7003>
mailbox=7003
group=5
context=work
channel => 3
callerid=
mailbox=
group=
context=work

Definir dans les <> le numero de tel de la ligne.
Mettre tous les contextes à work (attention en minuscule).


Configuration /etc/asterisk/users.conf (Ajouter à la fin du fichier)

[template](!)
type=friend
host=dynamic
dtmfmode=rfc2833
disallow=all
allow=ulaw
context = work

[6001](template)
fullname = Ben
username = kiwihc16
secret = secret

[6002](template)
fullname = MacPro
username = MacPro
secret = secret

[6003](template)
fullname = MacAir
username = MacAir
secret = secret

Configuration /etc/asterisk/extensions.conf (Ajouter à la fin du fichier)

[work]
exten => _6XXX,1,Verbose("Coucou c est le context work")
exten => _6XXX,n,Verbose(CALLERID=${CALLERID(all)})
exten => _6XXX,n,Dial(SIP/${EXTEN},20)
exten => _6XXX,n,Hangup()
exten => _6XXX,n,Verbose("Coucou c est la fin")

exten => 3611,1,Softmodem(localhost, 3611, v(V23)ld(7)s(1)en)
exten => 618,1,Softmodem(localhost, 7, v(V23)ld(7)s(1)eu)
exten => 619,1,Softmodem(192.168.4.130, 10000, v(V23)ld(7)s(1)eu)

exten => _7003,1,Dial(DAHDI/1/W${EXTEN})

réservé. réservé. réservé. réservé. (en cours d écriture)