Welcome to SpeakFreely for Windows page!

SpeakFreely over Tor - it's really now!       Download it: spfr72_tcp


SpeakFreely for Windows is a free Internet telephone which provides high quality audio, military grade encryption (SDES etc.) and interoperability with SpeakFreely for Unix and other RTP-compliant applications. It is still a pioneer with 'old' technology that neglected. According to user's requests I studied the source code of SpeakFreely and make a patch that enables the call over Tor as does TORFone.


Despite the successful outcome I'll start now with the questions left open:

  1. I used older version 7.2 for patching, not the latest 7.6 It was an accident: I was first available earlier. In addition, the 7.2 source code presented for Visual C + + 6.0, which was already installed on my PC to previous work with PGPFone, while the 7.6 source code required Visual Studio 7.0. This is not a problem and I can easily make changes to 7.6. I'll do it later, if users will be interested in this. But now we have only patched 7.2 which does not support AES - encryption, voice codec CELP, adaptive voice buffer and PGP. Excluding this 7.2 version is fully compatible with original 7.6 in an ordinary (not TCP) mode.
  2. The established TCP-connection procedures with client and Tor or the initialization of the Tor socks5 and connect over it run synchronously in the main thread causing program’s freezing at call setup time. Particularly troublesome situation where the configured socks5 address:port exist but are not socks5. This requires the removal SpeakFreely by the task manager only. Also attempt to connect to a non-existent hidden service is finished itself only after a minute, during which the program is not responding. Of course, this does not decorate the patch, but I did not plan to make a final release, aiming only an experiment, and I wanted to do it as quickly as possible, to obtain and evaluate the result. If users will be interested, I will implement asynchronous procedure, no problem.
  3. Only one connection (incoming or outgoing) can be set at a time in TCP mode. No chat, no multicast, and, of course, no broadcast now. Theoretically I can implement multiple TCP connections, but it will take a lot of time (this is C + + , not Java!). I can not afford it because I have another job and dedicate for this project just a little bit of free time without any hope of donate etc.

New features:

SpeakFreely connects with a subscriber's hidden service and works over Tor pretty good. Can be used both built-in socks5 support and interception by any socksify software or by Advor. It seemed to me that the stable duplex sound a little worse than TORFone do (probably due to different algorithm buffer), but in the PTT mode SpeakFreely work over Tor a wonderfully!

Source code:

Source code of the SpeakFreely 7.2 + TCP support are compiled using Visual C + + 6.0. The most significant changes:

  1. Block the creation and use of any UDP-sockets in TCP mode. Use only one listener and one working TCP-sockets with disabled Nagle algorithm. Address and port of the listening socket can be set manually. Connection is made through a single port (including RTP over TCP: data and control packets combined in one stream).
  2. At the beginning of each packet 2 bytes header with packet’s length is added. The most significant bit determines the type of packet (0-data, 1 control).
  3. Added support for SOCKS5 outgoing TCP-connections. Added sound notification of the error and of the connection is closed.
  4. Block all calls of gethostbyname and gethostbyaddr in anonymously mode.
  5. Added ability to select the path to the initialization file for portability.
  6. Do some changes in the main windows title and in the “About” panel.

Activation of TCP mode:

SpeakFreely can operate over a single TCP connection, regardless of the selected voice protocol. To activate TCP mode select the menu Options -> Workarounds -> Network -> Use TCP-Transport. You must then restart the program. Also automatically checked Use send () not sendto (). To return to the UDP mode you must clear both checks and restart the program.

Set socks5 and listener interface:

Before using SpeakFreely in TCP mode you can specify IP-address and port of listening TCP interface and IP-address and port of SOCKS5 proxy (Tor). To do this you must manually edit the configuration file 'speakfre.ini' changing the default settings in section:
TCPListenAdr =
SocksAdr =

Warning: the latest version of TBB now uses port 9150. Refine your Tor’s port in the file ...\Tor Browser\Data\Tor\torrc. Open it with WordPad and checking parameter SocksPort. It must match the port number in the parameter SocksAdr in 'speakfre.ini' file.

Set path to ini file:

Now the file 'speakfre.ini' can be located in the current SpeakFreely folder or in any specified folder or in Windows folder (as in genuine version of the program). By default this file is in the current folder (portable version). If you're going to run SpeakFreely from protected media (eg, CD), first edit the file 'spfloc.ini' (it is in the current SpeakFreely folder). The value of
Path = #
saves file 'speakfre.ini' in the current folder. You can change this setting manually and specify the full path where the 'speakfre.ini' will be saved. Empty parameter and there is no file 'spfloc.ini' in the current folder locate the file 'speakfre.ini' in Windows folder.

Outgoing and incoming calls:

For outgoing connection opens Connection -> New ... , then in the popup dialog box specify the IP-address or domain name of the callee. If in the beginning of the address (name) is symbol $ then the connection will be made via Tor, otherwise the domain will be resolved in the usual way and will be a direct P2P connection. To connect to the HS you must enter onion-link without http:// but with a $ symbol at the beginning. As already mentioned above the connection process is performed synchronously and temporarily blocks the user interface. If there is no destination or no Tor proxy will be given three-tone signal, and when the subscriber disconnected or already has another connection - standard signal "busy."

When a incoming connection popup window will appear with information about the client’s IP . I used a fake IP instead of localhost to prevent activation of loopback mode receiving connection from local proxy.

Software version that sends by client as clear text every 10 seconds may be specified in the parameter TCPNick in 'speakfre.ini' configuration file. This can be used to little hide the SpeakFreely traffic or to transfer own nickname shown in the current connection window.

Also I carefully audited source code to fix DNS leaks during incoming and outgoing connections in TCP mode except for the direct connection to the domain. But at the other user actions I can not guarantee this.

Use with Tor Browser:

  1. Download Tor Browser bundle and unpack to the folder.
  2. Download SpeakFrealy bundle and unpack it to a folder.
  3. Run Tor Browser and wait for the connection to the Tor network.
  4. After the first run create a hidden service once: on Vidalia panel click Setup -> Servises -> +
    Then enter the Virtual Port and Target and specify the folder in which to store the private key. Copy the generated onion-link and use it as own phone number.
  5. Run SpeakFrealy. Now you can receive incoming calls.
  6. Set the buffer latency to jitter compensate (Options -> Jitter Compensations) 1/4 sec to an anonymous mode (direct TCP connection), 1 sec for single-sided anonymity (connection through Tor), and 3 seconds for the two-way anonymous (connection to Tor hidden service).
  7. To establish an anonymous outgoing call do Connection -> New ... and type or paste onion-link of the callee with the $ symbol at the beginning and the port number after the colon (eg.
    ), then click OK and wait for the connection for 20-40 seconds.
  8. To establish a connection with one-way anonymity use the domain name or IP-address with the $ symbol at the beginning and the port number after the colon (eg.
    ), then click OK and wait for the connection for 10-20 seconds.
  9. To establish not anonymous connection use the domain name or IP-address with the port number after the colon
    ), then click OK and wait for the connection for 3-5 seconds.

Use with TorChat:

  1. Download TorChat bundle and unpuck to the folder.
  2. Open the file ... \ torchat-windows \ bin \ Tor \ torrc.txt and after the line
    HiddenServicePort 11009
    paste a new line
    HiddenServicePort 17447
  3. Run TorChat. In the case of the first run will create your ID. Use it as own phone number adding a $ character at the beginning and .onion:17447 at the end.
  4. Download SpeakFreely bundle and unpuck to the folder. Open the file 'speakfre.ini' and change the default port setting to
    SocksAdr =
  5. Run SpeakFrealy. Now you can receive incoming calls and make outgoing calls as described above.

Interception by AdvOR:

  • Download AdvOR bundle and unpuck to the folder.
  • Run AdvOR. Click Connect and wait for the connection to the Tor network. If necessary, restart AdvOR and try to connect again.
  • Download SpeakFreely bundle and unpuck to the folder.
  • On the left panel of AdvOR click on Intercept - Quick Start. Then click Run on right panel and in the browse dialog select Speakfre.exe in her folder. The SpeakFreely launched by AdvOR.
  • An outgoing connection use the IP-address, domain name or onion-link WITHOUT the $ symbol at the beginning (as for direct connection), eg.
    AdvOR interception connection himself and send all data via Tor network.


Questions, comments, bug reports, ideas are sent to the projectís email: torfone@ukr.net or to my own email: gegel <at> riseup <dot> net


speakfreely logo