Tag Archives: Skype

Skype for Asterisk using FreeSWITCH, for hackers

Some time ago I explored FreeSWITCH’s mod_skypopen. The module works great and cleanly connects FreeSWITCH to a normal Skype account. In that posting, I noted that there’s a simple script you can run to set it all up. But the script only works if you are using a mostly default FreeSWITCH install with all the configs in place. If, on the other hand, you have a minimal FreeSWITCH install as a Google Voice gateway to Asterisk, like I do, the script won’t work. 
Below is the step-by-step method to configuring mod_skypopen on FreeSWITCH if you’re using it only as a gateway/connector. I had thought that no one would want this and had forgotten about it, until PSU VoIP reader Ranga asked about it. Major thanks to Ranga for testing out the following procedure and providing helpful feedback! I admit, it’s still pretty laborious–not an easy how-to by any definition. But it works as a reliable method of connecting Skype to your Asterisk server.
The procedure: Start here

Log in to your system’s command line interface and perform all the steps as root unless otherwise instructed.

If any step results in an error where the command is not found, you may need to install the program using yum (yum install program name) or build the program from sources on the web. You can find Git at http://git-scm.com/.

cd /usr/local/src
git clone git://git.freeswitch.org/freeswitch.git

Refer to the FreeSWITCH installation wiki for installing FS from Git: http://wiki.freeswitch.org/wiki/Installation_Guide to install from Git
These are the basic instructions for doing so, but be sure to follow the wiki.

cd freeswitch
./bootstrap.sh
./configure

Edit modules.conf and uncomment endpoints/mod_skypopen because we want to build it.

Make sure kernel sources are installed (yum install kernel-devel on CentOS)

Also make sure there are no sound modules already loaded in the kernel. lsmod | grep snd

If there are any, they should be removed prior to performing the next steps.

cd src/mod/endpoints/mod_skypopen/oss
make clean; make; insmod ./skypopen.ko; mknod /dev/dsp c 14 3

If no errors appear, this verifies that the kernel module installs OK.

Add all the prerequisite components from yum (listed in the wiki for your distro) – for Amazon Linux I added:

yum -y install autoconf automake gcc-c++ git-core libjpeg-devel libtool
make ncurses-devel unixODBC-devel openssl-devel gnutls-devel libogg-devel
libvorbis-devel curl-devel libtiff-devel libjpeg-devel subversion autoconf
automake libtool gcc-c++ ncurses-devel make libX11-devel Xvfb alsa-utils
libXv libXScrnSaver xorg-x11-fonts* alsa-lib libXScrnSaver libtiff-devel
libjpeg-devel kernel-devel git
alsa-lib.i686  fontconfig.i686  freetype.i686  glibc.i686  libgcc.i686 
libICE.i686  libSM.i686 libstdc++.i686  libX11.i686  libXau.i686 libxcb.i686
libXcursor.i686  libXext.i686 libXfixes.i686  libXi.i686  libXinerama.i686
libXrandr.i686  libXrender.i686 libXScrnSaver.i686  libXv.i686

yum install xauth

but you should use the list provided in the wiki for your own distro. Refer to http://wiki.freeswitch.org/wiki/Mod_skypopen

Back to freeswitch source dir: cd /usr/local/src/freeswitch

make
make install

mv /usr/local/src/freeswitch/src/mod/endpoints/mod_skypopen/oss/skypopen.ko /usr/local/lib

New – March 2012: the archives at kernel.org/archlinux have been repackaged with “xz”. So first install the xz tool: yum install xz  Then perform the following steps.

Go to the root (/) directory to install Skype binaries:
cd /
wget "http://mirrors.kernel.org/archlinux/community/os/i686/skype-oss-2.0.0.72-3-i686.pkg.tar.xz"
xzcat skype-oss-2.0.0.72-3-i686.pkg.tar.xz | tar xv


Start and login to Skype as regular user through X. This may be tricky. I use SSH tunneling and on my workstation (Mac) I have X11 available to display X programs. If you want to do it at your server console you’ll need to install X11.org or maybe just use vncserver. There are a few options here. Setting up a way to run X programs = exercise left for the reader.

Log out of Skype after successfully logging in once. The Skype config is in /home/username/.Skype .

Copy it to /root (so that you have /root/.Skype). If you just ran Skype as root, the config is already in the right place.

Edit the /root/.Skype/SKYPEUSERNAME/config.xml file and add the bolded lines in before the Reminders tag at the bottom:

    <UI>
      <API>
        <Authorizations>skypopen</Authorizations>
        <BlockedPrograms></BlockedPrograms>
      </API>

      <Reminders>
        <BirthdaysSeen></BirthdaysSeen>
      </Reminders>
    </UI>

Now start the phony X server, Xvfb: (as root)

/usr/bin/Xvfb :101 -ac -nolisten tcp -screen 0 640x480x8 &

Start Skype as root:

su root -c "/bin/echo 'SKYPEUSERNAME SKYPEPASSWORD'| DISPLAY=:101  skype --pipelogin &"

Skype is now running in the background on the phony X server and should be logged in to your account.

Put the following extremely simplified freeswitch.xml file in place in /usr/local/freeswitch/conf (overwrite what is there):

Simplified Skype-to-Asterisk-via-FreeSWITCH config

Change all occurrences of SKYPEUSERNAME in the XML file with your Skype user name.

Now start Freeswitch:

ulimit -s 240
/usr/local/freeswitch/bin/freeswitch -c

See what scrolls by. The Skypopen module should find your logged in Skype user. Test with “sk list”

Once you see that it is working you can configure the kernel sound driver, the phony X server, skype, and Freeswitch to all start at boot time using rc.local:

Put at the bottom of /etc/rc.local:

# freeswitch
# Skype driver insmod /usr/local/lib/skypopen.ko mknod /dev/dsp c 14 3 # Skype /usr/bin/Xvfb :101 -ac -nolisten tcp -screen 0 640x480x8 & sleep 3 su root -c "/bin/echo 'SKYPEUSERNAME SKYPEPASSWORD'| DISPLAY=:101 /usr/bin/skype --pipelogin &" # Freeswitch main ulimit -s 240 /usr/local/freeswitch/bin/freeswitch -nc ###

Now you have FreeSWITCH connected to Skype and Skype is logged in. It is time to configure Asterisk.

Incoming Skype calls will ring sip:75973@127.0.0.1, so asterisk needs to be listening on 127.0.0.1 (it does by default) and have a route for number 75973. If you write your own Asterisk config files, add some dialplan in extensions.conf to route 75973 to wherever you want. For FreePBX, set up an Inbound Route for DID 75973 and route it where you’d like your incoming Skype calls to go.

Outgoing calls should be sent to num-or-skype-name@127.0.0.1:5050 from Asterisk. If you edit configs by hand, set up extension routing to SIP/${exten}@127.0.0.1:5050 as appropriate or if you use FreePBX, create a Trunk – SIP with host=127.0.0.1 and port 5050 or just create a custom trunk as SIP/$OUTNUM$@127.0.0.1:5050.

If you configured NAT on Asterisk, be sure to exclude 127.0.0.1 from the NAT. (localnet=127.0.0.0/255.0.0.0 in sip.conf or configured through the FreePBX GUI).

That’s it! If you’ve hacked through all this, congratulations. I have found the FreeSWITCH-Skype connector to be extremely reliable and you probably will, too.

VoIP news roundup

Some interesting VoIP-related news I read this week:

TAC to FCC: Set a Date Certain for the End of the PSTN – and the proposed year is 2018. The big concern seems to be maintenance of infrastructure when traditional landline subscribers are dropping off rapidly. I think that infrastructure still has a lot of value to it, but not necessarily for traditional telephone service. What could the utilities or private enterprise do with a copper grid and switching infrastructure that reaches even the most rural parts of the United States?

From the VoIP and Gadgets blog: How Skype Works With Facebook – an interesting interview about how Skype put their technology in the web browser for Facebook video chat. It’s basically the Skype client condensed down to a browser plugin.

Meanwhile, Google is doing it their own way with XMPP: Announcing Google+ Hangouts – Google keeps working at the XMPP extensions to make the protocol media-rich, and now they have group video chat. I don’t have a Google+ account and haven’t tried it out yet.

Google’s offering is standards-based: “To support Hangouts, we built an all-new standards-based cloud video conferencing platform.” And those standards are “XMPP, Jingle, RTP, ICE, STUN, SRTP” and “HTTPS + SRTP”. Some folks would say that it’s not “standards-based” unless SIP is doing the signaling. I think the only thing standard means today is that your work is published for others to use and some technical group of people reviews it. XMPP has that. SIP’s technical body is the IETF and H.323’s technical body is the ITU. Who’s more standard?

The standard with the most implementations wins (Betamax, anyone?) and Google has the weight to tip the end-user-connectivity scales toward XMPP/Jingle. SIP is firmly in place as the current IP trunking standard but might soon be falling behind when it comes to connecting the end-users.

Skype gateway with FreeSWITCH’s mod_skypopen

There has been a lot of talk about Skype connectivity in the VoIP blogs lately. Digium announced that they will no longer be selling their Skype channel driver, and this news rekindled interest in free/DIY methods for connecting Skype to Asterisk. Nerd Vittles has a good writeup, specific to the PBX-in-a-Flash/Incredible PBX implementation. His method relies on the SipToSis gateway application (read the SipToSis how-to for more generic setup instructions).

If you are only wanting to receive Skype calls, you can transfer them to your PBX via Tropo developer account, free.

I decided to add Skype to my home PBX last weekend, and chose FreeSWITCH’s mod_skypopen as the connector.

Why?

  • The PBX is Asterisk 1.4, and I’m holding steady on this version until 1.8 becomes a bit more stable. Thus, because I want to use Google Voice,
  • FreeSWITCH is already in place, on the same machine, as a gateway to Google Voice. It has been working well in this role.
  • mod_skypopen requires only the FreeSWITCH module and Skype. No extra connector software is required.
  • It works and was easy to install!

Asterisk 1.4 continues to be a rock-solid choice and is supported (security patches will be provided) for another year. For me, the only killer feature that 1.8 provides is Google Voice connectivity. There are bunch of other new features too, but I don’t need them. Stick with that which works, until you need the features or the support is gone.

Back to mod_skypopen. There are basically two ways to install this to FreeSWITCH. The easy way, and the hard way.

Today, the easy way. If you visit the FreeSWITCH wiki page on mod_skypopen, you’ll find some notes on building and installing the module. If you’re running a fairly standard install of FreeSWITCH that utilizes the autoload_configs structure, you can follow through the wiki instructions to build the module and the fake audio driver and then run the Perl installer found in the source directory to automatically build out your configs, configure the Skype client(s) and set up a shell script to get everything going at startup.

If, like me, you have set up FreeSWITCH only to act as a feature gateway for Asterisk, and have aggressively minimized the configuration, you’ll want to avoid the installer script and perform the necessary steps by hand. More on that in the next posting: “the hard way.” (Not really that hard.)