GNOME-O-PHONE ------------- Gphone is an internet telephone. As the name implies, it aims to be fully gnome-groovy, but that hasn't quite happened yet. Gphone is definitely a work in progress and you probably shouldn't bet your business on it. Don't be too hard on the program, though -- although the user interface is mighty rough, gphone does actually work pretty well. I've only tested the program over ethernet, but the data rate should be low enough to work over a reasonable modem connection. The protocol is nominally RTP/RTCP, and gphone complies well enough with the standard to be able to talk to speakfreely. I've only tested the UNIX version of speakfreely, but as long as you tell sfmike to use RTP and GSM compression, it seems to work fine. Maybe someday I'll add in support for other codecs; encryption is a little less likely because I'd just as soon not open that legal can of worms. One easy way to get some security would be to modify my program rtptunnel to tunnel the RTP protocol through a SSL socket instead of a straight TCP socket. Gphone supports full duplex if your sound card does. I've had good luck using the ALSA drivers for my SB16. Gphone requires the GSM compression library available at <http://kbs.cs.tu-berlin.de/~jutta/toast.html>. To build gphone you also need gtk 1.2 or later as well as version 1.2 of the popt library. Up-to-date Linux distributions should include these libraries and any others I'm forgetting. If you try gphone, I'd like to hear from you. Please send comments, suggestions, bug reports, patches, donations, and job offers to gphone@penguinpowered.com. There is a mailing list for those interested in gphone development. You can subscribe at its page, <http://lists.sourceforge.net/mailman/listinfo/gphone-list> and send messages to gphone-list@lists.sourceforge.net. To find the latest news about gphone, you can visit the gnome-o-phone home page at <http://gphone.sourceforge.net/>. Usage ----- I'm not going to give too much detail here, because all of this should change soon. The source code and gphone --help are your best bets for figuring this out. To make a call, just do gphone -c <computer to call> You can add -h for half duplex. To wait for an incoming call just run gphone. By default gphone listens on the standard RTP port, 5004. On the other hand speakfreely defaults to port 2074, so if you want to use them together you'll have to tell at least one of them a different port number. Gphone uses -r to set the port it talks to and -l to set the port it listens on. Program structure ----------------- I'll describe briefly the overall plan of the program, in case you want to start tinkering. You should realize that there were two forces that guided my development. First, I wanted to get something usable with as little work as possible. But I also wanted to use things I was interested in learning about, like pthreads and gtk. Good programming practices, robustness, scalability or any of the other crap developers are supposed to pay attention to were not quite as high on my priority list. Still, if it didn't cost too much, I tried to do things the right way. Gphone now nominally uses the RTP/RTCP protocol described in RFC 1889 with the audio profile described in RFC 1890. Gphone 0.1 used a completely different TCP-based protocol, so version 0.1 and 0.2 can't talk to each other. If you have a problem getting UDP through a firewall, my program rtptunnel might be helpful. There are a lot of "half-measures" in the gphone code. I've tried to keep the user interface somewhat separate from the rest of the code, but not when that meant expending any effort on design or coding. And I've used glib pretty liberally throughout the program. Similarly, I've let dependencies on the GSM library creep in, even though I know I should be allowing for other compression schemes. I've gotten rid of the ringer and the daemon from version 0.1. The only program you have to run now is gphone itself. Unfortunately you don't get the cool blinking ringer anymore; hopefully that functionality will come back later. Gphone is pretty multithreaded. Gphone is my first pthreads program (and my first gtk program), so if you see something that seems dumb to you in my code, you're probably right. The main thread is just responsible for starting up the other threads. First, the UI thread takes care of all user interface work. There is a status: all the threads look at this to see what state the program is in and act accordingly. The threads also have queues to pass messages between themselves. Anyway, there are two threads that do the real work. One thread just listens to the incoming sockets and handles whatever packets come over the wire. If speech comes from the other end, this thread decodes the GSM frames and plays them. The last thread is in charge of all sending of packets. It compresses the speech and sends it, and also sends things like "switch direction" requests (if the program is in half-duplex mode). Acknowledgments --------------- Quicknet Technologies very kindly donated an Internet PhoneJACK card to help in porting gphone. Thanks guys! Copyright --------- Gphone was written by Roland Dreier and is distributed under the GNU General Public License. $Id: README 1.11 Sat, 11 Dec 1999 23:53:26 -0600 dreier $ Local Variables: mode: text End: