GAIM
The Penguin Pimpin' IM Clone That's Good for the Soul
News Documentation Screenshots Contact Info Download

Gaim 0.11.0pre14 source tarball
Gaim 0.11.0pre14 source bz2ball
Other Releases (Patches, RPM, DEB)

CVS Information
Nightly CVS Tarball
The Amazing Marko Cam

Official FTP Site
SourceForge Project Page
 

About the Protocols


TOC

TOC was created by AOL to allow unofficial clients to connect to the AIM service. TOC was originally used by TiK, an AIM client written in tcl/Tk. Gaim was one of the first clients to make use of the protocol - if it hadn't been for TOC, Gaim wouldn't exist.

TOC is a TCP-based protocol. It is ASCII-based, but uses a 6-byte binary header for length information. There is usually only one connection made in a normal session; however, a connection is made for every file transfer that takes place, but these are direct connections, and so never go through AOL. Passwords are sent using a weak encryption algorithm. All messages are routed through AOL, except for when a direct connection is requested - however there are no TOC clients that support direct IMs (that I know of).

Because TOC is not the official AIM protocol, and no official client has ever used TOC (with the exception of TiK), in addition to not keeping up with the official protocol in terms of functionality, TOC's usability has actually deteriorated since it was released. It does not support new features that official clients support, including the ability to request a file transfer (it can accept a request made by an official client though), and the ability to view users' away messages without relying on an auto-reply. It has also lost capabilities, such as searching for users by email address.

Oscar

Oscar is the official AIM protocol created by AOL, and all official AIM clients use Oscar. Oscar is a closed protocol, unlike TOC; AOL has never released any specifications on Oscar, which means that all of our knowledge about Oscar comes from reverse engineering. The libfaim authors have been working on this for nearly three years. Gaim first featured the ability to use libfaim in 0.9.7, though it was never worked on enough to be usable; it wasn't until 0.9.16 when it was somewhat usable, and 0.9.20 when it was able to be used without special compilation options. Oscar is now the protocol that most Gaim users use (as witnessed by the outcries on Slashdot when it stops working).

Oscar is a TCP-based protocol. It is binary, which means that commands are stored in integers rather than in character strings. This makes it considerably easier to extend the protocol when you want to add new features. For any successful signon, there are at least three connections made: first to the Authorizor, which validates your username and password; then to the BOS (Basic Oscar Service), the main connection to which and from which you send and receive messages; and ChatNav (Chat Navigation), which allows you to create and join chat rooms. In addition, each chat room that you join is another TCP connection. Finally, each file transfer and direct connection you make is another TCP connection, but these never pass through AOL. There are two ways of sending your password, XOR-based and MD5-based; libfaim currently uses the MD5 authentication. All messages are routed through AOL, except for direct connections.

Because Oscar is not an open protocol, Gaim doesn't support a lot of the features that it offers. It does, however, support all of the features that TOC offers, as well as several that TOC does not offer (including the ability to get users' away messages, and searching for users by email address). Also, AOL has a habit of blocking unofficial clients from connecting using Oscar, which means that occasionally Gaim does get blocked. However, Gaim itself has never been targeted to be blocked - it has always just been incidental while AOL blocked another service (Odigo and Jabber come to mind).

Yahoo

ICQ

The ICQ protocol was originally developed by Mirabilis, Inc., which was later bought by AOL. Although the protocol was never open, there have been several groups which have attempted to reverse-engineer it. Most of them are cooperating now, sharing the information they've obtained about it. Gaim is able to use ICQ thanks to icqlib, which has taken most of the information gathered and put it into a library.

ICQ is based on both UDP and TCP. The connection with the server is UDP, and messages such as who's online are sent via UDP. When you have a conversation with someone, you connect to them using TCP, and messages are sent directly. It is possible to send messages through the server in cases where direct TCP connections aren't possible. Direct TCP connections are also established for file transfers and chats.

ICQ99 was the last official ICQ client to use the UDP-based protocol. Starting with ICQ2000, the official ICQ client uses a modified version of Oscar. Because of this it may be possible to use Oscar in Gaim to sign on to ICQ; however, I don't recommend it, since there are many features that icqlib provides that libfaim does not (for ICQ, at least). In the future an effort may be made to add the ICQ idiosyncrasies of Oscar to libfaim, but because icqlib works well, there isn't pressing need, which means that it will take a back seat to other features that people would like to see (like file transfer in most of the protocols).

MSN

IRC

IRC is one of the oldest communication systems; RFC 1459, which documents the protocol, makes reference to its initial design work starting in 1989. Depsite being standardized in an RFC, several IRC servers deviate slightly from the specification, though generally only enough to irk IRC client developers.

IRC is a TCP-based protocol, and is completely text-based. It's possible to use a standard telnet client as an IRC client if you know the protocol well enough. IRC historically has been used mainly for chat rooms, while AIM and ICQ have been primarily for one-on-one messaging; however, while AIM and ICQ both provide group chats, IRC also provides private messages. IRC was not designed with a "buddy list" concept in mind, though; people are able to change their username while they are connected to the server, which makes having a buddy list difficult. However, because IRC is used mainly for chat rooms, if you want to know if someone is available, it's usually as easy as just joining a chat room they frequent. Often users will also modify their username to indicate state - warmenhoven might change his nick (username) to warmenhoven_Asleep to indicate that he's connected but not present.

Jabber

Jabber is the coolest IM system on the planet (it says so on the Jabber.org website). Originally designed by Jeremie Miller, Jabber has grown to be the largest and most successful Open Source IM System available. The Jabber servers and source code are available for download, as are clients for nearly every OS. Gaim can act as a Jabber client thanks to libxode and libjabber, which are Open Source and provided by Jabber.

Jabber usernames are reminiscent of email addresses: a typical Jabber username would be warmenhoven@jabber.org or robflynn@jabber.com. Jabber also lets you connect using the same username multiple times, using what they term a "resource". A resource is an arbitrary string, often seen appended to your username, e.g. warmenhoven@jabber.org/GAIM (GAIM in this case being the resource), which lets the server keep track of how many times that username is signed on.

The Jabber protocol is TCP-based and XML-encoded. Because it is based in XML, it is the most extensible IM system available. Users form one TCP connection to the server in the duration of the session. Passwords can be encoded in a variety of different ways; however, currently Gaim only allows plain text (i.e. no encryption of passwords). All communication is routed through the Jabber servers. It is possible to talk to a user that is connected to a different server than you are, assuming both servers allow it.

Jabber also has what they call a "transport". A transport is a way of connecting to another IM service, such as AIM or ICQ. In order to use a transport, you "subscribe" to it, which is sort of like adding it to your buddy list, except you must also provide a valid username and password (e.g. if you were subscribing to the AIM transport, you would tell it your AIM username and the password for that account). Once you have subscribed to a transport, it will sign onto that service using the specified username, and you can talk to people using that service - their username would be ewarmenhoven@aim.jabber.org, for example. The username they would see is the one you subscribed to the transport with. Currently in Gaim, you cannot subscribe to a transport - however, if you subscribe to a transport using a different client, Gaim can make use of it.

Napster

Zephyr

Zephyr, or more completely the Project Athena Zephyr notification system, is an IM system designed by MIT. It is founded on basic Unix principles - simple applications that do one thing very well. A normal Zephyr client installation normally consists of eight or nine clients - each which serve a different purpose (one for receiving messages, one for sending them, one for searching for online users, etc.). Gaim attempts to integrate the functionality of several of these clients (most of which are console-based) into one GUI client. Zephyr is based on a library that is distributed in the Zephyr source, which is what Gaim uses to connect to the Zephyr service

Zephyr is a UDP-based protocol, and in order to keep messages reliable, it has a "host manager". Every machine that acts as either a client or a server for Zephyr must be running one and only one instance of the Zephyr host manager (zhm). Gaim does not provide this, so in order to use Zephyr in Gaim, you must make sure that zhm is properly set up and configured first. The Zephyr library gets your username from getuid() - meaning that the username and password you tell Gaim are ignored. It also means that you can only use Gaim to connect to Zephyr once (you actually can connect to it multiple times, but the more often you connect, the more of a drain on server resources you are).




``Dedicated to the near-memory of Rob Flynn. Let's start remembering people while they're still alive.''
- Mark Spencer -


Website design and development provided by Portal Web Design. Hosted by SourceForge