SipToSis, un gateway SIP/Skype opensource
by admin on May.10, 2010, under Asterisk, Hacking, Linux, Networking, Telefonia, VoIP
SipToSis (Sip to Skype integration software) è una applicazione VoIP (open source) sviluppata in java in grado di connettere un SIP device al network Skype ed effettuare e ricevere chiamate. Il device SIP può essere semplicemente un ATA, ma anche un PBX Asterisk o un altro SIP PBX.
Si tratta fondamentalmente di un software multifunzione Skype/SIP Bridge/Gateway/Proxy/Adapter/Converter. Dispone di un codec converter in grado di convertire SIP RTP audio in Skype PCM audio e viceversa.
Occorre precisare che questo prodotto utilizza le API Skype ma non è certificato o approvato in alcun modo da Skype.
Possiamo sommariamente riassumerne alcune notevoli funzionalità e caratteristiche:
- Effettuare e ricevere chiamate Skype col proprio SIP device/PBX
- Effettuare e ricevere chiamate SIP dalla rete Skype
- Java Open source sotto licenza GNU GPL
- Multipiattforma (Linux, OS X, Windows)
- Supporto dei DTMF SIP tipo RFC2833, INFO ed Inband
- Supporto dei DTMF Skype utilizzando Inband
- Capacità di operare con Asterisk ma anche con 3CX ed altri SIP PBX’s
- Può venire impiegato (con Asterisk) come trunk Multi Channel Skype (per supportare chiamate multiple simultanee)
- Tutto può avvenire a carico di un singolo computer
- Gli utenti Windows possono farlo eseguire come service.
In questo post mi limiterò comunque a esporre un esempio di utilizzo limitato all’outbound tramite un singolo channel, e tutti componenti ospitati su di un singolo computer, in cui siano presenti X Window (ovviamente), Asterisk e le librerie alsa.
Effettivamente è possibile ospitare tutto su di una singola macchina, o separali su più macchine fisiche. L’unica restrizione è che Skype e SipToSis devono essere presenti ed essere eseguiti insieme sullo stesso computer. In vista di una soluzione multichannel, è decisamente raccomandabile che l’accoppiata Skype/STS si trovi su un computer separato e dedicato rispetto al server Asterisk.
Il software SipToSis (SIP to Skype Gateway) può essere scaricato liberamente da http://www.mhspot.com/sts/siptosis_download.php, ed i prerequisiti per metterlo in grado di operare sono pochi:
Occorre disporre di Java 1.5 JRE o versione superiore:
Tale requisito è semplicemente verificabile con:
# java -version
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03)
Java HotSpot(TM) Client VM (build 14.1-b02, mixed mode, sharing)
In assenza il package è facilmente installabile con:
# sudo apt-get install sun-java6-jre
Inoltre , date le successive impostazioni adottate è necessario installare il package Xvfb:
# sudo apt-get install Xvfb
Se sulla macchina non fosse presente hardware sonoro sarebbe necessario impartire:
# /sbin/modprobe snd-dummy
riga che nel caso andrebbe stabilmente inserita in /etc/rc.local
Occorre poi avere il client Skype installato ed un regolare skype account.
È opportuno creare un nuovo utente specifico:
# adduser stsuser
ed aggiungerlo al gruppo audio:
# usermod -a -G audio stsuser
Installazione di SipToSis
# mkdir /home/stsuser/downloads
# cd /home/stsuser/downloads
# wget http://www.mhspot.com/sts/download/tmp_c67d_SipToSis_20100225.zip
# mkdir /home/stsuser/siptosis
# cd /home/stsuser/siptosis
# unzip /home/stsuser/downloads/tmp_c67d_SipToSis_20100225.zip
# chmod +x SipToSis_linux
È necessario impostare SipToSis in modo che si registri col PBX prima di procedere.
Per quanto riguarda un singolo channel solamente:
# chmod +x stsTrunk_linux
# gedit stsTrunk_linux
[...]
runuser=stsuser
scriptpath=/home/stsuser/siptosis
displayMethod=XVFB
[...]
# ./stsTrunk_linux
starting boot process
# skype &
Dopo aver effettuato il login col proprio skype account, si può impartire:
# ./SipToSis_linux
Launching SipToSis
2010-05-10 01:39:51,814 Starting SipToSis v20100225
2010-05-10 01:39:51,815 Skype4Java Version 1.1.0.1
2010-05-10 01:39:51,815 os=Linux arch=i386 ver=2.6.31-19-generic
2010-05-10 01:39:51,820 javaVer=1.6.0_15 - Sun Microsystems Inc. (32 bit)
2010-05-10 01:39:51,917 Available Codecs: PCMU(0),PCMA(8),iLBC(98)
2010-05-10 01:39:51,917 DTMF rfc2833(101)
2010-05-10 01:39:51,918 initSkype - If stuck, check Skype online & API auth
Dovrebbe comparire un messaggio di Skype che richiede il permesso ad autorizzare un uso esterno di Skype: Ovviamente la risposta dovrà essere affermativa. Si può anche rendere stabile questa impostazione mettendo la spunta nel Checkbox presente nella finestra di dialogo.

2010-05-10 01:39:54,918 SkypeVer:2.1.0.81
2010-05-10 01:39:55,046 Attached SkypeUserId:domenicoraffaeleskype
2010-05-10 01:39:55,114 Config - skypeClientSupportsMultiCalls:false concurrentCallLimit:2
2010-05-10 01:39:55,115 SipToSis contact_url=sip:skypests@151.65.40.211:5070
2010-05-10 01:39:55,115 via_addr=151.65.40.211 realm=
2010-05-10 01:39:55,115 RTP Ports: 63200-63202 Local Skype Ports: 64432-64435
2010-05-10 01:39:55,296 WAITING FOR INCOMING CALL
2010-05-10 01:39:55,305 WAITING FOR INCOMING CALL
2010-05-10 01:39:55,314 Registrar Server Domains=
2010-05-10 01:39:55,317 MaxCallTime: not limited MaxPSTNCallTime: not limited
2010-05-10 01:39:55,317 MaxDailyPSTNUniqueNumberCount: 48 MaxDailyPSTNMinutes: 350
2010-05-10 01:39:55,333 Loading Skype PSTN Call History
2010-05-10 01:39:55,360 32 possible calls to import.
2010-05-10 01:39:56,125 0 PSTN calls imported
2010-05-10 01:39:56,134 PSTN counters reset at: 01:00:00 CEST
2010-05-10 01:39:56,137 Qualified PSTN calls today: 0 Time: 0 minutes
2010-05-10 01:39:56,226 AcctBalance: 0.00 EUR
Per quanto riguarda Asterisk, quella che segue è una semplice impostazione di test per Asterisk.
sip.conf:
[siptosisuser]
username=siptosisuser
type=friend
context=sts_in
secret=siptosisregpassword
host=localhost
nat=no
dtmfmode=auto
canreinvite=no
qualify=yes
defaultip=127.0.0.1
port=5070
incominglimit=1
outgoinglimit=1
call-limit=1
busylevel=1
extensions.conf:
[sts_out]
exten => _*123,1,Dial(SIP/siptosisuser/echo123)
Una volta avviato Asterisk è possibile immediatamente rilevare la presenza di un nuovo peer SIP:
*CLI> sip show peers
Name/username Host Dyn Nat ACL Port Status
siptosisuser/siptosisuser 127.0.0.1 5070 OK (6 ms)
snom/snom 192.168.1.253 D 2051 Unmonitored
Ora è sufficiente tramite il secondo softphone, impostato con apposito context (sts_out), comporre *123, et voilà:
-- Executing [*123@sts:1] Dial(”SIP/snom-0000000a”, “SIP/siptosisuser/echo123″) in new stack
== Using SIP RTP CoS mark 5
== Using SIP VRTP CoS mark 6
– Called siptosisuser/echo123
– SIP/siptosisuser-0000000b is ringing
– SIP/siptosisuser-0000000b answered SIP/snom-0000000a
== Spawn extension (sts, *123, 1) exited non-zero on ‘SIP/snom-0000000a’
Per quanto riguarda l’inbound e l’impostazione di un trunk multi-channel, ne parleremo un’altra volta.

