Protocols/OSCAR/FLAP
OSCAR Protocol |
Introduction • Terms • Clients |
Basic |
Datatypes • FLAP • SNAC • TLV |
UUIDs • Errors • Tool IDs |
Host Interaction |
Rate Limits • Migration • Messages |
Other Services |
ADMIN • ADVERT • ALERT |
BART • BOS • BUCP • CHAT |
CHAT_NAV |
Tutorials |
Sign On • BART • Rendezvous |
ICBM • Locate • Buddies |
Foodgroups |
OSERVICE (0x0001) |
LOCATE (0x0002) |
BUDDY (0x0003) |
ICBM (0x0004) |
ADVERT (0x0005) |
INVITE (0x0006) |
ADMIN (0x0007) |
POPUP (0x0008) |
PD (0x0009) |
USER_LOOKUP (0x000A) |
STATS (0x000B) |
TRANSLATE (0x000C) |
CHAT_NAV (0x000D) |
CHAT (0x000E) |
ODIR (0x000F) |
BART (0x0010) |
FEEDBAG (0x0013) |
ICQ (0x0015) |
BUCP (0x0017) |
ALERT (0x0018) |
PLUGIN (0x0022) |
UNNAMED_FG_24 (0x0024) |
MDIR (0x0025) |
ARS (0x044A) |
FLAP (Frame Layer Protocol) provides the packet framing on top of TCP or TLS layer for the OSCAR protocol. Each message sent to and from the AIM backend is encapsulated in a FLAP frame that is easily identified using a 6 byte header followed by a variable length data segment. The payload of a FLAP frame is in most cases a SNAC.
FLAP Header
The header contains the frame type, a sequence number, and the length of the following data segment. The sequence number is independently sequential in each direction. Packets from the server to client have one sequence number, while the packets from the client to server have a different independently increasing number.
If the server receives a sequence number out of order it will terminate the connection. A common mistake is to use a uint8 (byte) to represent the sequence number, which will roll over at 255 and cause the server to disconnect the client.
Name | Type | Notes |
---|---|---|
FLAP__MARKER | uint8 (byte) | ASTERISK (literal ASCII "*") |
FLAP__FRAME | uint8 (byte) | Class: FLAP__FRAME_TYPE |
FLAP__SEQUENCE | uint16 (word) | Initialized to a random value, increments for each send |
FLAP__LENGTH | uint16 (word) | Length of data, does not include the 6 byte header length |
Class: FLAP__FRAME
There are several different frame types, with the most common being the DATA frame.
Name | Value | Notes |
---|---|---|
FLAP__FRAME_SIGNON | 0x01 | Initialize the FLAP connection |
FLAP__FRAME_DATA | 0x02 | Messages using the FLAP connection, usually a SNAC message |
FLAP__FRAME_ERROR | 0x03 | A FLAP error - rare |
FLAP__FRAME_SIGNOFF | 0x04 | Close down the FLAP connection gracefully |
FLAP__FRAME_KEEP_ALIVE | 0x05 | Send a heartbeat to server to help keep connection open |
Class: FLAP__MULTICONN_FLAGS
These flags control how multiple instances are handled by the servers and if current sessions need to be bumped off when a new session signs on.
Name | Value | Notes |
---|---|---|
FLAP__MULTICONN_FLAGS_OLD_CLIENT | 0x00 | Don't use |
FLAP__MULTICONN_LEVEL_MULTI | 0x01 | This is a recent client that understands multiple instances |
FLAP__MULTICONN_LEVEL_SINGLE | 0x03 | This is a recent client that understands multiple instances but does not want them |