Un client SIP en ligne de commande

Date: 5/02/2009 | Catégories: Open-source | Tags: ,,,,

PJSip est un framework (C et Python) open-source permettant de développer simplement des applications de VoIP basées sur le protocole SIP. PJSip est fourni en standard avec PJsua, un client SIP en ligne de commande que nous allons aborder dans ce billet.

Installation

Pour installer PJSip (et donc PJsua) sur votre système (exemple sous Ubuntu), il faut saisir les lignes de commandes suivantes:

# wget http://www.pjsip.org/release/1.0.1/pjproject-1.0.1.tar.bz2
# bzip2 -d pjproject-1.0.1.tar.bz2
# tar xvf pjproject-1.0.1.tar
# cd pjproject-1.0.1
# ./configure
# make dep
# make
# sudo make install
# sudo cp ./pjsip-apps/bin/pjsua-i686-pc-linux-gnu /usr/local/bin/pjsua

Premier lancement de PJsua

PJsua est un client SIP en ligne de commande (CLI) qui utilise les librairies PJSip.

Pour lancer le logiciel, il faut utiliser la commande suivante:

# pjsua

Le menu suivant devrait apparâitre:

Enregistrement d'un compte SIP

Nous allons commencer par nous enregistrer sur notre serveur SIP:

>>> +a
Your SIP URL: (empty to cancel): sip:login@monserveur.mondomaine.com
URL of the registrar: (empty to cancel): sip:monserveur.mondomaine.com
Auth Realm: (empty to cancel): login
Auth Username: (empty to cancel): login
Auth Password: (empty to cancel): password

Je n'utilise pas cette interface textuelle. Culture BSD oblige, je préfère passer les paramètres en ligne de commande de la manière suivante:

# pjsua --id sip:login@monserveur.mondomaine.com --registrar sip:monserveur.mondomaine.com --realm * --username login --password password

ou, encore mieux, par un fichier de configuration:

# vi login.cfg

--id sip:login@monserveur.mondomaine.com
--registrar sip:monserveur.mondomaine.com
--realm *
--username login
--password password

# pjsua --config-file login.cfg

Remarque: si vous souhaitez lancer PJsua directement sur votre serveur SIP il faut ajouter une option pour lui dire de fonctionner sur un autre port SIP (en effet le port par défaut 5060 est utilisé par votre serveur SIP).

# pjsua --local-port=5080 --config-file login.cfg

Nous allons maintenant simuler notre premier appel SIP

Pour simuler un appel entre notre compte "login" (défini dans le fichier login.cfg) et le compte "login2" , il faut saisir en ligne de commande:

# pjsua --config-file login.cfg sip:login2@monserveur.mondomaine.com

Simuler un appel à partir d'un fichier .WAV

Si vous souhaitez simuler un appel non pas avec un péripherique d'entrée audio mais à partir d'un fichier .wav, il suffit de

# pjsua --config-file login.cfg --play-file=./monficher.wav sip:login2@monserveur.mondomaine.com

Conclusion

Nous avons abordés une infime partie des fonctionnalités proposées par PJSip. Je vous conseille la lecture des documentations officielles.

  • Pingback: Christophe Nowicki » Notifications Nagios par Téléphone()

  • Pingback: Bip la telefon din linie de comandă « Adrenalin’s Blog()

  • Aurelien Faillon

    Bonjour,

    je suis assez intéressé par PJSUA mais je voudrais pour écrire un formulaire (genre en PHP) afin de générer un appel automatique vers un téléphone donné pour lui lire un fichier audio qui serait stocké sur le serveur. Par exemple l’utilisateur arrive sur une page PHP avec un formulaire, il saisit quelques informations et valide; et làa, ça déclenche un appel vers un numéro de téléphone et diffuse un message pré-enregistrer dans un fichier audio.

    Cela est-il possible et comment?

    Merci d’avance pour l’aide 😉

  • Pineiden

    Hello.
    I copy the pjsua file but it give me this list of results and cannot do anything:

    17:57:42.728 os_core_unix.c !pjlib 2.4.5 for POSIX initialized
    17:57:42.729 sip_endpoint.c .Creating endpoint instance…
    17:57:42.729 pjlib .select() I/O Queue created (0x208c660)
    17:57:42.729 sip_endpoint.c .Module « mod-msg-print » registered
    17:57:42.729 sip_transport. .Transport manager created.
    17:57:42.729 pjsua_core.c .PJSUA state changed: NULL –> CREATED
    17:57:42.729 sip_endpoint.c .Module « mod-pjsua-log » registered
    17:57:42.729 sip_endpoint.c .Module « mod-tsx-layer » registered
    17:57:42.729 sip_endpoint.c .Module « mod-stateful-util » registered
    17:57:42.729 sip_endpoint.c .Module « mod-ua » registered
    17:57:42.729 sip_endpoint.c .Module « mod-100rel » registered
    17:57:42.729 sip_endpoint.c .Module « mod-pjsua » registered
    17:57:42.729 sip_endpoint.c .Module « mod-invite » registered
    bt_audio_service_open: connect() failed: Connection refused (111)
    bt_audio_service_open: connect() failed: Connection refused (111)
    bt_audio_service_open: connect() failed: Connection refused (111)
    bt_audio_service_open: connect() failed: Connection refused (111)
    17:57:42.745 pa_dev.c ..PortAudio sound library initialized, status=0
    17:57:42.745 pa_dev.c ..PortAudio host api count=2
    17:57:42.745 pa_dev.c ..Sound device count=7
    17:57:42.745 pjlib ..select() I/O Queue created (0x20dc678)
    17:57:42.750 sip_endpoint.c .Module « mod-evsub » registered
    17:57:42.750 sip_endpoint.c .Module « mod-presence » registered
    17:57:42.750 sip_endpoint.c .Module « mod-mwi » registered
    17:57:42.750 sip_endpoint.c .Module « mod-refer » registered
    17:57:42.750 sip_endpoint.c .Module « mod-pjsua-pres » registered
    17:57:42.750 sip_endpoint.c .Module « mod-pjsua-im » registered
    17:57:42.750 sip_endpoint.c .Module « mod-pjsua-options » registered
    17:57:42.750 pjsua_core.c .1 SIP worker threads created
    17:57:42.750 pjsua_core.c .pjsua version 2.4.5 for Linux-3.16.0.38/x86_64/glibc-2.19 initialized
    17:57:42.750 pjsua_core.c .PJSUA state changed: CREATED –> INIT
    17:57:42.750 sip_endpoint.c Module « mod-default-handler » registered
    17:57:42.750 pjsua_core.c bind() error: Address already in use [status=120098]
    17:57:42.750 pjsua_core.c Shutting down, flags=0…
    17:57:42.750 pjsua_core.c PJSUA state changed: INIT –> CLOSING
    17:57:42.751 pjsua_call.c .Hangup all calls..
    17:57:42.751 pjsua_media.c .Call 0: deinitializing media..
    17:57:42.751 pjsua_media.c .Call 1: deinitializing media..
    17:57:42.751 pjsua_media.c .Call 2: deinitializing media..
    17:57:42.751 pjsua_media.c .Call 3: deinitializing media..
    17:57:42.751 pjsua_pres.c .Shutting down presence..
    17:57:43.754 pjsua_core.c .Destroying…
    17:57:43.754 pjsua_media.c .Shutting down media..
    17:57:44.246 pa_dev.c ..PortAudio sound library shutting down..
    17:57:44.247 sip_transactio .Stopping transaction layer module
    17:57:44.247 sip_transactio .Stopped transaction layer module
    17:57:44.247 sip_endpoint.c .Module « mod-default-handler » unregistered
    17:57:44.247 sip_endpoint.c .Module « mod-pjsua-options » unregistered
    17:57:44.247 sip_endpoint.c .Module « mod-pjsua-im » unregistered
    17:57:44.247 sip_endpoint.c .Module « mod-pjsua-pres » unregistered
    17:57:44.247 sip_endpoint.c .Module « mod-pjsua » unregistered
    17:57:44.247 sip_endpoint.c .Module « mod-stateful-util » unregistered
    17:57:44.247 sip_endpoint.c .Module « mod-refer » unregistered
    17:57:44.247 sip_endpoint.c .Module « mod-mwi » unregistered
    17:57:44.247 sip_endpoint.c .Module « mod-presence » unregistered
    17:57:44.247 sip_endpoint.c .Module « mod-evsub » unregistered
    17:57:44.247 sip_endpoint.c .Module « mod-invite » unregistered
    17:57:44.247 sip_endpoint.c .Module « mod-100rel » unregistered
    17:57:44.247 sip_endpoint.c .Module « mod-ua » unregistered
    17:57:44.247 sip_transactio .Transaction layer module destroyed
    17:57:44.247 sip_endpoint.c .Module « mod-tsx-layer » unregistered
    17:57:44.247 sip_endpoint.c .Module « mod-msg-print » unregistered
    17:57:44.247 sip_endpoint.c .Module « mod-pjsua-log » unregistered
    17:57:44.247 sip_endpoint.c .Endpoint 0x20818c8 destroyed
    17:57:44.247 pjsua_core.c .PJSUA state changed: CLOSING –> NULL
    17:57:44.247 pjsua_core.c .PJSUA destroyed…

    What i need?