Protocols/OSCAR/Foodgroups/ICBM/Tutorials
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) |
Notes from another
An IM conversation involves multiple CLIENT_EVENTS and ICBMs. CLIENT_EVENTS are used to inform the remote user what the sender is doing so the remote user knows they are still there. Here is a sample session where GabbyGrace is sending IMs to ChattingChuck.
Sending Typing Event
A client can optionally support sending a typing notification to the other user.
Field | Size | Value |
---|---|---|
u08 | flapHeader.startMarker | '*' |
u08 | flapHeader.frameType |
2 ([Protocols/OSCAR/FLAP#Class:_FLAP_FRAME FLAP__FRAME_TYPE_DATA]) |
u16 | flapHeader.sequenceNumber | XX |
u16 | flapHeader.payloadLength | YY |
u16 | snacHeader.foodgroup |
4 ([Protocols/OSCAR/Foodgroups/ICBM ICBM]) |
u16 | snacHeader.type |
20 ([Protocols/OSCAR/SNAC/ICBM_CLIENT_EVENT ICBM__CLIENT_EVENT]) |
u16 | snacHeader.flags | 0 |
u32 | snacHeader.requestId | ZZ |
Array of u08 | cookie | '12345678' |
u16 | channel |
1 ([Protocols/OSCAR/Foodgroups/ICBM#Class:_ICBM_CHANNELS ICBM__CHANNELS_IM]) |
u08 | loginId.len | 13 |
Array of u08 | loginId.value | 'ChattingChuck' |
u16 | event |
2 ([Protocols/OSCAR/SNAC/ICBM_CLIENT_EVENT#Class:_ICBM_EVENTS ICBM__EVENTS_TYPING]) |
Receiving Typing Event
The receiving side of the client event looks identical to the sending side other then the loginId has been reversed.
Field | Size | Value |
---|---|---|
u08 | flapHeader.startMarker | '*' |
u08 | flapHeader.frameType |
2 ([Protocols/OSCAR/FLAP#Class:_FLAP_FRAME FLAP__FRAME_TYPE_DATA]) |
u16 | flapHeader.sequenceNumber | XX |
u16 | flapHeader.payloadLength | YY |
u16 | snacHeader.foodgroup |
4 ([Protocols/OSCAR/Foodgroups/ICBM ICBM]) |
u16 | snacHeader.type |
20 ([Protocols/OSCAR/SNAC/ICBM_CLIENT_EVENT ICBM__CLIENT_EVENT]) |
u16 | snacHeader.flags | 0 |
u32 | snacHeader.requestId | ZZ |
Array of u08 | cookie | '12345678' |
u16 | channel |
1 ([Protocols/OSCAR/Foodgroups/ICBM#Class:_ICBM_CHANNELS ICBM__CHANNELS_IM]) |
u08 | loginId.len | 10 |
Array of u08 | loginId.value | 'GabbyGrace' |
u16 | event |
2 ([Protocols/OSCAR/SNAC/ICBM_CLIENT_EVENT#Class:_ICBM_EVENTS ICBM__EVENTS_TYPING]) |
Sending IM
Field | Size | Value |
---|---|---|
u08 | flapHeader.startMarker | '*' |
u08 | flapHeader.frameType |
2 ([Protocols/OSCAR/FLAP#Class:_FLAP_FRAME FLAP__FRAME_TYPE_DATA]) |
u16 | flapHeader.sequenceNumber | XX |
u16 | flapHeader.payloadLength | YY |
u16 | snacHeader.foodgroup |
4 ([Protocols/OSCAR/Foodgroups/ICBM ICBM]) |
u16 | snacHeader.type |
6 ([Protocols/OSCAR/SNAC/ICBM_CHANNEL_MSG_TOHOST ICBM__CHANNEL_MSG_TOHOST]) |
u16 | snacHeader.flags | 0 |
u32 | snacHeader.requestId | ZZ |
Array of u08 | cookie | '12345678' |
u16 | channel |
1 ([Protocols/OSCAR/Foodgroups/ICBM#Class:_ICBM_CHANNELS ICBM__CHANNELS_IM]) |
u08 | destLoginId.len | 13 |
Array of u08 | destLoginId.value | 'ChattingChuck' |
u16 | icbmTlvs[0].tag |
3 ([Protocols/OSCAR/Foodgroups/ICBM#TLV_Class:_ICBM_TAGS ICBM__TAGS_REQUEST_HOST_ACK]) |
u16 | icbmTlvs[0].len | 0 |
u16 | icbmTlvs[1].tag |
2 ([Protocols/OSCAR/Foodgroups/ICBM#TLV_Class:_ICBM_TAGS ICBM__TAGS_IM_DATA]) |
u16 | icbmTlvs[1].len | 15 |
u16 | icbmTlvs[1].imData[0].tag |
0x0501 ([Protocols/OSCAR/Foodgroups/ICBM#TLV_Class:_ICBM_IM_DATA_TAGS ICBM__IM_DATA_TAGS_IM_CAPABILITIES]) |
u16 | icbmTlvs[1].imData[0].len | 1 |
u08 | icbmTlvs[1].imData[0].value | 1 |
u16 | icbmTlvs[1].imData[1].tag |
0x0101 ([Protocols/OSCAR/Foodgroups/ICBM#TLV_Class:_ICBM_IM_DATA_TAGS ICBM__IM_DATA_TAGS_IM_TEXT]) |
u16 | icbmTlvs[1].imData[1].len | 6 |
u16 | icbmTlvs[1].imData[1].encoding |
0 ([Protocols/OSCAR/Foodgroups/ICBM#Class:_ICBM_IM_ENCODING ICBM__IM_SECTION_ENCODINGS_ASCII]) |
u16 | icbmTlvs[1].imData[1].language | 0 |
u08 | icbmTlvs[1].imData[1].data | 'Hi' |
Receiving IM
Field | Size | Value |
---|---|---|
u08 | flapHeader.startMarker | '*' |
u08 | flapHeader.frameType |
2 ([Protocols/OSCAR/FLAP#Class:_FLAP_FRAME FLAP__FRAME_TYPE_DATA]) |
u16 | flapHeader.sequenceNumber | XX |
u16 | flapHeader.payloadLength | YY |
u16 | snacHeader.foodgroup |
4 ([Protocols/OSCAR/Foodgroups/ICBM ICBM]) |
u16 | snacHeader.type |
7 ([Protocols/OSCAR/SNAC/ICBM_CHANNEL_MSG_TOCLIENT ICBM__CHANNEL_MSG_TOCLIENT]) |
u16 | snacHeader.flags | 0 |
u32 | snacHeader.requestId | ZZ |
Array of u08 | cookie | '12345678' |
u16 | channel |
1 ([Protocols/OSCAR/Foodgroups/ICBM#Class:_ICBM_CHANNELS ICBM__CHANNELS_IM]) |
u08 | info.loginId.len | 10 |
Array of u08 | info.loginId.value | 'GabbyGrace' |
u16 | info.evil | 0 |
u16 | info.attrs.num | 1 |
u16 | info.attrs[0].tag |
1 ([Protocols/OSCAR/Foodgroups/OSERVICE/Datatypes/USERINFO#TLV_Class:_OSERVICE_USER_INFO_TAGS OSERVICE__USER_INFO_TAGS_NICK_FLAGS]) |
u16 | info.attrs[0].len | 2 |
u16 | info.attrs[0].value | 0x10 |
u16 | icbmTlvs[0].tag |
2 ([Protocols/OSCAR/Foodgroups/ICBM#TLV_Class:_ICBM_TAGS ICBM__TAGS_IM_DATA]) |
u16 | icbmTlvs[0].len | 15 |
u16 | icbmTlvs[0].imData[0].tag |
0x0501 ([Protocols/OSCAR/Foodgroups/ICBM#TLV_Class:_ICBM_IM_DATA_TAGS ICBM__IM_DATA_TAGS_IM_CAPABILITIES]) |
u16 | icbmTlvs[0].imData[0].len | 1 |
u08 | icbmTlvs[0].imData[0].value | 1 |
u16 | icbmTlvs[0].imData[1].tag |
0x0101 ([Protocols/OSCAR/Foodgroups/ICBM#TLV_Class:_ICBM_IM_DATA_TAGS ICBM__IM_DATA_TAGS_IM_TEXT]) |
u16 | icbmTlvs[0].imData[1].len | 6 |
u16 | icbmTlvs[0].imData[1].encoding |
0 ([Protocols/OSCAR/Foodgroups/ICBM#Class:_ICBM_IM_ENCODING ICBM__IM_SECTION_ENCODINGS_ASCII]) |
u16 | icbmTlvs[0].imData[1].language | 0 |
u08 | icbmTlvs[0].imData[1].data | 'Hi' |