Protocols/OSCAR/Foodgroups/ICBM/Tutorials: Difference between revisions
No edit summary |
No edit summary |
||
Line 75: | Line 75: | ||
7.2.1 Errors Associated with Receiving IMs | 7.2.1 Errors Associated with Receiving IMs | ||
-------------- | |||
'''7.1 Sending IMs''' | |||
Below is the command structure for the "Send IM" command. I have found, that depending on which message server you end up with, you may have problems when using the command structure defined below. I can't explain this behavior, but it has happened a couple of times before. Just logging out and then back in again (usually getting another server) lets you send messages just fine. Also, changing some of the fields of this command can still get it through the server, but the distant-end client will fail (actually, I've found several combinations that crash the AIM Java client quite messily). Just use with care. | |||
'''Fig 7.1.1 Send IM Command''' (Family 0x02) | |||
{| border="1" | |||
| Position | |||
| Length | |||
| Data | |||
|- | |||
| 1 | |||
| Word | |||
| 0x0004 | |||
|- | |||
| 3 | |||
| Word | |||
| 0x0006 | |||
|- | |||
| 5 | |||
| Word | |||
| 0x0000 | |||
|- | |||
| 7 | |||
| DWord | |||
| Request ID | |||
|- | |||
| 11 | |||
| DWord | |||
| Unknown Purpose (leave as 0x00s) | |||
|- | |||
| 15 | |||
| Word | |||
| 0x0001 | |||
|- | |||
| 17 | |||
| Byte | |||
| Destination SN Length | |||
|- | |||
| 18 | |||
| ASCII String | |||
| Destination SN (unterminated) | |||
|- | |||
| 19 | |||
| Word | |||
| 0x0002 | |||
|- | |||
| 21 | |||
| Word | |||
| Message Length + 0x0D | |||
|- | |||
| 23 | |||
| Byte | |||
| 0x05 | |||
|- | |||
| 24 | |||
| Word | |||
| 0x0100 | |||
|- | |||
| 26 | |||
| Word | |||
| 0x0101 | |||
|- | |||
| 28 | |||
| Word | |||
| 0x0101 | |||
|- | |||
| 30 | |||
| Word | |||
| Message Length + 0x04 | |||
|- | |||
| 32 | |||
| Word | |||
| 0x0000 | |||
|- | |||
| 34 | |||
| Word | |||
| 0x0000 | |||
|- | |||
| 35 | |||
| ASCII String | |||
| Message (unterminated) | |||
|} | |||
<u>7.1.1 Errors Dealing with "Send IM" Command</u> '''7.2 Receiving IMs''' | |||
Receiving IMs is gernerally quite simple. The same member information that comes in the "oncoming buddy" command (see figure 5.1.1) is sent here, in the same format and same order. And because of that, the space between the SN and the start of the message will be variable depending on the class of the source SN. | |||
'''Fig 7.2.1 Incoming IM Command''' (Family 0x02) | |||
{| border="1" | |||
| Position | |||
| Length | |||
| Data | |||
|- | |||
| 1 | |||
| Word | |||
| 0x0004 | |||
|- | |||
| 3 | |||
| Word | |||
| 0x0007 | |||
|- | |||
| 5 | |||
| Word | |||
| 0x0000 | |||
|- | |||
| 7 | |||
| QWord+DWord | |||
| Unknown Gibberish | |||
|- | |||
| 19 | |||
| Word | |||
| 0x0001 | |||
|- | |||
| 21 | |||
| Byte | |||
| SN Length | |||
|- | |||
| 23 | |||
| ASCII String | |||
| Source Screen Name | |||
|- | |||
| 24* | |||
| Word | |||
| Warning Level of Sender | |||
|- | |||
| 26* | |||
| Word | |||
| Class Part One | |||
|- | |||
| 28 | |||
| Word | |||
| 0x0001 | |||
|- | |||
| 30 | |||
| Word | |||
| 0x0002 | |||
|- | |||
| 32* | |||
| Word | |||
| Class Part Two | |||
|- | |||
| 34 | |||
| Word | |||
| 0x0003 | |||
|- | |||
| 36 | |||
| Word | |||
| 0x0004 | |||
|- | |||
| 38* | |||
| DWord | |||
| Member Since date | |||
|- | |||
| 40 | |||
| Word | |||
| 0x0003 | |||
|- | |||
| 42 | |||
| Word | |||
| 0x0004 | |||
|- | |||
| 44* | |||
| DWord | |||
| On Since date | |||
|- | |||
| 48+ | |||
| Word | |||
| 0x0004 | |||
|- | |||
| 50+ | |||
| Word | |||
| 0x0002 | |||
|- | |||
| 52+* | |||
| Word | |||
| Idle Time | |||
|- | |||
| 54 | |||
| Word | |||
| 0x0002 | |||
|- | |||
| 56 | |||
| Word | |||
| Message length + 0x0D | |||
|- | |||
| 58 | |||
| 7 bytes | |||
| 0x5101111 | |||
|- | |||
| 65 | |||
| Word | |||
| Message Length + 0x04 | |||
|- | |||
| 67 | |||
| DWord | |||
| 0x0000 | |||
|- | |||
| 71 | |||
| ASCII String | |||
| Message (unterminated) | |||
|- | |||
| colspan="3" | <nowiki>* Not present for commands from AOL members</nowiki> | |||
|- | |||
| colspan="3" | + See notes in section 5.1 on these fields (they're the same) | |||
|} | |||
== Messages == | |||
Datatypes and Classes related to messages. | |||
--> | --> |
Latest revision as of 03:23, 27 March 2020
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' |