Project name: wxAIM
Intended Audience: Developers
License: The MIT License
Operating System: Platform Independent
Programming Language: C++
Topic: AOL Instant Messenger
Libraries used: wxWidgets
Summary:
wxAIM is an API that enables communication with AOL Instant Messenger servers via the OSCAR protocol. The goal of the project is to provide a simple object oriented interface that allows AIM capability to be added to any wxWidgets application. wxAIM utilizes standard C++ and is completely cross-platform. Because the project is an application protocol interface, no graphical user interface is provided with the project.
Primary reason for development:
Currently, there is no existing library (that I know of) that is able to handle an OSCAR session using C++, and is completely detached from any graphical user interface. Most of the implementations I have encountered use Java, plain C, or do not support the full OSCAR protocol. (Note: many projects support AOL’s open source protocol, known as TOC. But, TOC’s features are only a subset of OSCAR’s.) This project will be able to compile with just the wxWidgets library installed; it is a “no strings attached” implementation.
A top priority of this project is to maintain simplicity and ease of use. The most widely used features of the OSCAR protocol will be implemented first. These include (but are not limited to):
- Instant messaging
- Chat rooms
- Buddy icons
- Buddy lists
- File transfer (both sending a receiving)
I have already implemented many of the basic OSCAR features for wxAIM, such as IM sending, IM receiving, posting away messages, and setting profile information, et cetera. Challenges and obstacles to this project include:
- Implementing a "rock-solid" and robust socket implementation.
- Implementing file-transfer over AIM servers.
- Testing scenarios in which multiple connections are required for an AIM session. (Note: this feature is in place, but has not been thoroughly tested.)
Major features of the project include the following:
- Developers are able to include a single C++ class, and have full AIM capability.
- The C++ class (called AIM_Wrapper) automatically handles all socket events dealing with OSCAR servers.
- Only relevant information is passed to the client code. Relevant information includes thing like IMs, user profiles, away messages, et cetera. The remaining details of the OSCAR session are completely hidden from the client code.
- Information is presented to client code via the application's message queue. For instance, the client code can chose to intercept all instant messages by writing "EVT_AIM_INSTANT_MESSAGE(CommandFrame::OnInstantMessage)" in the application's event table. If the client does not wish to intercept the event, then it is discarded by the application automatically.
Links to related items and documentation include:
- Unofficial OSCAR protocol documentation
- Gaim. More specifically, “libfaim,” which seems to have been annexed by the Gaim project. libfaim provides a C interface to the OSCAR protocol. To my knowledge, libfaim has been discontinued by the original developers.