Překlad SIP na Skype

Zatímco SIP je otevřený protokol, který je specifikován RFC, Skype je plně uzavřený. Jak zdrojové kódy klienta, tak komunikační protokol. Proto je velmi těžké napsat jakýkliv kanál do asteriska, který by překlad uměl. Řešení spočívá v použití Skype Api, což je API, poskytované oficiálním klientem Skype. Uvedené řešení není optimální ani z hlediska bezpečnosti, ani z hlediska stability, nicméně zdá se funkční.

Co budeme potřebovat

Skype

Základem je samotný balík Skype pro Vaši distribuci. Ten se dá stáhnout z oficiálních stránek www.skype.com.

SipToSis

Java implementace brány mezi SIP a Skype. Tato implementace je opensource, nicméně autor zvolil formu distribuce, která vyžaduje zakoupení (pouze popatek vyplývající z distribuce, nikoliv za licenci). Z hlediska licence je možné balík distribuovat dále, nicméně respektuji přání autora a nechávám pořízení na jednotlivém uživateli z těchto stránek: http://www.mhspot.com/sts/siptosis.html

Asterisk

Asterisk budeme potřebovat spíše pro názornou ukázku propojení. Již samotný SipToSis se chová jako SIP brána takže jeho začlěnění do infrastruktury by neměl být problém.

Xvnc server

Protože klient Skype běží v X11 prostředí, vyžaduje ke svému spuštění jakýkoliv X11 server. Použitím VNC X11 serveru je možné se na tento server připojovat i vzdáleně.

Java 1.6

SipToSis předpokládá funkční JRE 1.6.x. Zřejmě by fungoval i s nižším, ale toto je ovřená verze.

Ratpoison

Ratpoison je velmi jednoduchý windowmanager pro X11. Jeho výhoda je, že umožňuje skriptování, tedy ovládání chování oken pomocí externích příkazů. Není podmínka, lze použít i jiný windowmanager ale tento se osvědčil.

Uživatelé vnc1 .. vncx

Podle toho, kolik současných hovorů přes skype chceme provozovat, budeme vpotřenbovat vytvořit X shodných uživatelů.

Příprava

Před prvním spuštěním musíme zajistit několik věcí.

VNC global init script

Pro spuštění budeme potřebovat funkční Xvnc server. V závislosti na použité distribuci je buďto přímo dostupný init script nebo je nutné si jej vytvořit.

Audio

Musíme zajistit, aby skype naběhl a telefonoval i bez zvukové karty. To zajistíme alsa modulem snd-dummy. Nejjednodušší je přidat jej do /etc/modules. Dále musíme zajistit, aby byla nastavena jako výchozí pro Skype (v případě že v systému je jeětě jiná zvuková karta). Všechny následující soubory jsou relativní k domácímu adresáři uživatele. Tedy např. /home/vnc1 .

~/.asoundrc

pcm.!default {
    type hw
    card Dummy
}
ctl.!default {
    type hw
    card Dummy
}

VNC user init script

Globální VNC init skript zajistí spuštění potřebného počtu VNC serverů. Jednotlivé user init skripty pak spuštění siptosis a skype.

~/.vnc/xstartup

#!/bin/sh
 
xsetroot -solid grey
ratpoison &
skype >~/.skype.out 2>&1 &
cd /usr/lib/siptosis;
sh /usr/lib/siptosis/SipToSis_linux $HOME/siptosis.cfg >~/.siptosis.out 2>&1

SipToSis

Konfigurace SipToSis už není tak triviální. Základ konfigurace je uveden níže. Pro správnou funkci je potřeba zaměnit názvy maker na správné hodnoty.

  • S_USER - aktuální uživatel (např. vnc1)
  • S_AUDIOPORTBASE - port pro audio
  • S_HOSTPORT - UDP port pro SIP agent SipToSis
  • S_SIPUSER - Uživatel pod kterým se bude SipToSis hlásit do asterisku
  • S_SIPPW - Heslo pod kterým se bude SipToSis hlásit do asterisku
  • S_SIPDOMAIN - SIP doména asterisku
  • S_SIPREALN - SIP realm asterisku
  • S_SIPPROXY - hostname asterisku
  • S_RTPPORT - RTP pro audio

~/siptosis.cfg

configWatchInterval=0
connectorWatchDogMinutes=0
connectionFee=0
logConfigFile=log.properties
siptoskypeauthfile=/home/S_USER/SipToSkypeAuth.props
skypetosipauthfile=/home/S_USER/SkypeToSipAuth.props
SkypeOutDialingRulesFile=/home/S_USER/SkypeOutDialingRules.props
SipOutDialingRulesFile=/home/S_USER/SipOutDialingRules.props
ua_jar=ua.jar
audioPriorityIncrease=0
jitterLevel=3
skype_connect=yes
skype_audioportbase=S_AUDIOPORTBASE
enableSkypeDtmfDetector=no
SkypeDtmfDetectorHitThreshold=60
SkypeDtmfDetectorSilenceThreshold=6
sendSipDtmfToSkype=yes
sendSkypeDtmfToSip=yes
inbandFullTimeDtmfDetection=no
JoinManualSkypeOutboundCallToSip=no
SkypeInboundAllChannelsBusyAction=refuse
SkypeInboundSipDestUnavailableAction=refuse
SipInboundAllChannelsBusyAction=busy
skypeclientsupportsmulticalls=no
concurrentcalllimit=2
autoShutdownMinutes=0
pintimeout=8
pinretrylimit=3
destinationtimeout=12
destinationretrylimit=3
pinFile=clips/enterPin.wav
destinationFile=clips/enterDest.wav
dialingFile=clips/dialing.wav
invalidPinFile=clips/invalidPin.wav
invalidDestFile=clips/invalidDest.wav
skypePinFile=clips/enterPin.wav
skypeDestinationFile=clips/enterDest.wav
skypeDialingFile=clips/dialing.wav
skypeInvalidPinFile=clips/invalidPin.wav
skypeInvalidDestFile=clips/invalidDest.wav
handleEarlyMedia=yes
sendSkypeIM=no
skypeimmessage=You are about to receive a Skype Voice call from [callerid].
sendSkypeImDelay=2
transport_protocols=udp
host_port=S_HOSTPORT   
transport_protocols=udp
contact_url=sip:S_SIPUSER@S_SIPDOMAIN:S_HOSTPORT
from_url="Skype" <sip:S_SIPUSER@S_SIPDOMAIN:S_HOSTPORT>
outbound_proxy=S_SIPPROXY:5060
username=S_SIPUSER
passwd=S_SIPPW
expires=120
realm=S_SIPREALM
do_register=no
keepalive_time=0
audio=yes
audio_port=S_RTPPORT
noRtpReceivedAutoHangupSeconds=30
audio_codec=PCMU,PCMA,ILBC
audio_frame_size=240,240,240
audio_avp=-1,-1,98
skype_audiooutgain=1,1,1
skype_audioingain=1.5,1.5,1.5
FilterParams=NONE
enableSendRTPtoReceivedAddress=yes
lockRtpSendAddressAfterPackets=1
dtmf2833payloadtype=101 
enableSIPInbandDtmfDetector=no
SipDtmfDetectorHitThreshold=30
SipDtmfDetectorSilenceThreshold=6
useViaRport=yes
useViaReceived=yes
sendResponseUsingOutboundProxy=no
baseFailureResponse=403
skypeRefusedResponse=603
skypeFailedResponse=404
skypeUnPlacedResponse=408
skypeBusyResponse=600
TcpRxBufferSize=8192
TcpTxBufferSize=8192
RtpRxBufferSize=8192
RtpTxBufferSize=8192
is_registrar=yes
register_new_users=yes
allowMultiContactsPerUser=no

Směrování směrem do Skype: ~/SipToSkypeAuth.props

*,*,*,calleeid

Směrování ze skype do SIP: ~/SkypeToSipAuth.props

*,sip:fromskype@S_SIPPROXY:5060
nejakyskypeid,sip:nejakecislo@nejakaproxy:5060

Asterisk

Nyní propojíme SipToSis s Asteriskem. Obecně Asterisk pnepotřebujeme, můžeme propojit i přímo s SIP proxy. Následuje příklad nastavení SIP peera pro jednoho uživatele. Předpokládáme, že poběží na stejném serveru jako Asterisk a SIP port bude mít nastavený na 5074.

sip.conf

[siptosis1]
username=siptosis1
secret=somepw1
context=skype
type=friend
host=127.0.0.1
qualify=yes
insecure=very
defaultip=127.0.0.1
port=S_HOSTPORT
incominglimit=1
outgoinglimit=1
busylevel=1
nat=no
dtmfmode=auto
cs/swahw/sip2skype.txt · Poslední úprava: 2009/05/26 07:37 autor: limo@cesnet.cz
Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0