Efone - Distributed internet telephony system.
(c) 1999,2000 Krzysztof Dabrowski
(c) 1999,2000 ElysiuM deeZine
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
- What is this?
This is a distributed telephony system for Linux. The goal is to have a distributed system similar to ICQ where clients connect to each other using the location information provided by central server(s).
2. What is the current state of the project?
The basic client/server that can connect another one of it's kind over the net and send & receive voice in full duplex mode in any of the 4 compression modes explained below. There is also a central matching server ready together with a web-based interface for users.
Compression supported:
- RAW - 275kbps full duplex stream, using u-law 16->8 bit conversion. Not recommended for modem usage.
- GSM - Moderate bandwidth, low CPU usage. Good for speech and music, at about 40kbps full duplex. 10:1 compression ratio. Quite usable over 56k modem connection.
- CELP - Very low bandwidth, very good audio quality - good enough for music even. Very high CPU usage. 16kbps full duplex. 26:1 ratio. Usable over 19.2k modem link, probably. For speech, sound quality is similar to GSM, as this is primarily a speech codec.
- MELP - Very low bandwidth, moderate quality. This codec can only be used
for speech encoding. Anything other than speech is severely distorted.
18kbps full duplex. 20:1 ratio. Moderate CPU usage. This is the best
codec to use for slow modem links, provided you have sufficient CPU power
to use it. It sends a few seconds of compressed audio at a time, in a
relatively small packet, saving bandwidth. Voice encoded through this
codec sounds a lot like "synthesized" voice.
timecop's note: try playing some techno through the MELP codec. Sounds very unique.
NOTE: You need a fairly fast processor to handle the last two algorithms. Their initial design was to be used in custom DSP chips for the U.S. Government. Therefore, encode / decode speed was the last consideration during development :) 3. What is the roadmap?
Take a look on the TODO file to find out details.
4. How can i help?
You can join the development by sending patches to the author (me). Any help would be apreciated. Also bug reports and testing are more than welcome. If you can not code, then maybe you can help writing docs? You'll get all the help i can give.
5. Contact info:
The project's home page is: http://efone.elysium.pl/ . You can also reach my via e-mail at: brush@elysium.pl
6. Hardware requirements.
You will need a full duplex sound card with oss compatible sound driver to use this application. I use Soundblaster AWE 32 for my development. To use some of the more CPU-intensive codecs you will probably need a 300Mhz or faster CPU.
7. How to build/use the client?
Unpack the distribution. Change to the resulting directory. Type 'make efone'. After a short while everything should finish and you have the resulting 'efone' binary. Run it on 2 machines and issue a "connect <destination ip>" command. It should connect and you can speak. Use the 'help' command to learn more. Use 'help command' to display even more information about a command. efone client features tab-completion for all commands. Initial configuration defaults to GSM compression, and empty values for name, email, nickname, etc. You should set these using "set", and register for a efone ID using "register" command. If you already registered, you should be able to use your old version of efone.conf without changes. If you do make changes, configuration is saved upon exit. Default configuration also points to our global matching server at 212.106.4.50
8. How to build/use the server ?
Unpack the distribution. Change to the resulting directory.
Type 'make mserver'.
After a short while everything should finish, and you should have a program
called "mysql_server".
This is the efone matching server. It uses a SQL database to store user information, and a session database, to keep track of users online. Users talk with the server through TCP and UDP. TCP connections are used for retrieving user information, registering, etc. UDP is used to "ping in", to let the server know that a certain user is "available". Another thread in mysql_server. What used to be mysql_keeper is now a thread running under mysql_server, and it automatically cleans old session information from the database.
Usage is fairly simple.
- Unless you are upgrading, you need to create the "efone" database, and users and session tables in it. Create "efone" database, and use efone.sql file provided to create users and session tables. Also consider creating a new database user with read/write access to the efone database and all the tables in it. Adjust username, password, and database name in mysql_server.h and recompile if necessary.
- start mysql_server, and watch for error messages. If everything is okay, you can add mysql_server to your startup scripts. It does not fork into background automatically, so you would have to call it like so: /usr/local/efone/mysql_server &
- configure efone clients on your network to the IP address of the machine running mysql_server.
- If you don't feel like building/installing the server, you can use our global efone matching server located at 212.106.4.50
