The AIM client supports two methods to send text messages to other AIM users. The first is used unless a direct connection has been established, and in this mode, all messages pass through an AIM server.
In the above process, Alice and Bob have no idea about each other's internet address - it just isn't required. However, all the messages are going through the AIM servers they are connected to. This costs AOL money, and also permits them to see all the messages Alice and Bob are exchanging.
Because of the cost, transferring files requires Alice and Bob to establish a direct connection between each other. Once this is done, as the name implies, data flows directly between Alice and Bob, without the AIM servers being involved - so it doesn't cost AOL any money.
If Bob establishes a connection to Alice, then everything is fine, and they have a direct connection established. If Bob's machine can't contact Alice's, the direct connection establishment then proceeds as follows:
At this point, Alice either successfully connects to Bob, or another timeout happens. If the timeout happens, both Bob and Alice's AIM clients will tell them that the connection couldn't be established.
One reason for Alice and Bob being unable to connect to each other is if there is an Address-Translating firewall between their machine and the AIM server they connect to. In essence, this usually means that their machine cannot be directly reached from anywhere else on the internet. Consider the diagram below:
Local LAN Internet [alice]---+-----[firewall]---------------+--[AIM Server Cluster] 10.0.0.5 | 10.0.0.1 A.B.C.D | | | [others]--+ +--[Bob] W.X.Y.Z
A.B.C.D is the only address that the rest of the internet can contact directly. Unfortunately, in the direct connection setup, Alice's machine doesn't know this, and so uses 10.0.0.5 in her message to Bob.
The ReAIM proxy is a small program designed to run on (or behind) the firewall shown in the diagram above. It intercepts the messages going from Alice to the AIM servers, and if the message is a direct connection request, it changes the address Alice put in the packet from 10.0.0.5 to A.B.C.D, and keeps track that Alice has a direct connection pending.
When Bob gets the modified message, he connects to A.B.C.D, and the proxy answers. With a little bit of jiggery pokery, the proxy matches up Bob's request with Alice's pending request, and sets up a connection so that Alice and Bob can communicate (almost) directly.