Protocols/OSCAR/Foodgroups/ICBM/Tutorials: Difference between revisions

From NINA Wiki
Jump to navigation Jump to search
(Created page with "{{Protocols/OSCAR}} Notes from another <!-- So now we get to the purpose of this whole thing: messaging. Instant messages are strings of ASCII codes that get sent in very-ne...")
 
No edit summary
 
(2 intermediate revisions by the same user not shown)
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.


-->
-->


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.
{| class="wikitable"
! 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.
{| class="wikitable"
! 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 ==
{| class="wikitable"
! 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&#91;0&#93;.tag
|
3 ([Protocols/OSCAR/Foodgroups/ICBM#TLV_Class:_ICBM_TAGS ICBM__TAGS_REQUEST_HOST_ACK])
|-
| u16
| icbmTlvs&#91;0&#93;.len
| 0
|-
| u16
| icbmTlvs&#91;1&#93;.tag
|
2 ([Protocols/OSCAR/Foodgroups/ICBM#TLV_Class:_ICBM_TAGS ICBM__TAGS_IM_DATA])
|-
| u16
| icbmTlvs&#91;1&#93;.len
| 15
|-
| u16
| icbmTlvs&#91;1&#93;.imData&#91;0&#93;.tag
|
0x0501 ([Protocols/OSCAR/Foodgroups/ICBM#TLV_Class:_ICBM_IM_DATA_TAGS ICBM__IM_DATA_TAGS_IM_CAPABILITIES])
|-
| u16
| icbmTlvs&#91;1&#93;.imData&#91;0&#93;.len
| 1
|-
| u08
| icbmTlvs&#91;1&#93;.imData&#91;0&#93;.value
| 1
|-
| u16
| icbmTlvs&#91;1&#93;.imData&#91;1&#93;.tag
|
0x0101 ([Protocols/OSCAR/Foodgroups/ICBM#TLV_Class:_ICBM_IM_DATA_TAGS ICBM__IM_DATA_TAGS_IM_TEXT])
|-
| u16
| icbmTlvs&#91;1&#93;.imData&#91;1&#93;.len
| 6
|-
| u16
| icbmTlvs&#91;1&#93;.imData&#91;1&#93;.encoding
|
0 ([Protocols/OSCAR/Foodgroups/ICBM#Class:_ICBM_IM_ENCODING ICBM__IM_SECTION_ENCODINGS_ASCII])
|-
| u16
| icbmTlvs&#91;1&#93;.imData&#91;1&#93;.language
| 0
|-
| u08
| icbmTlvs&#91;1&#93;.imData&#91;1&#93;.data
| 'Hi'
|}
=== Receiving IM ===


{| class="wikitable"
! 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&#91;0&#93;.tag
|
1 ([Protocols/OSCAR/Foodgroups/OSERVICE/Datatypes/USERINFO#TLV_Class:_OSERVICE_USER_INFO_TAGS OSERVICE__USER_INFO_TAGS_NICK_FLAGS])
|-
| u16
| info.attrs&#91;0&#93;.len
| 2
|-
| u16
| info.attrs&#91;0&#93;.value
| 0x10
|-
| u16
| icbmTlvs&#91;0&#93;.tag
|
2 ([Protocols/OSCAR/Foodgroups/ICBM#TLV_Class:_ICBM_TAGS ICBM__TAGS_IM_DATA])
|-
| u16
| icbmTlvs&#91;0&#93;.len
| 15
|-
| u16
| icbmTlvs&#91;0&#93;.imData&#91;0&#93;.tag
|
0x0501 ([Protocols/OSCAR/Foodgroups/ICBM#TLV_Class:_ICBM_IM_DATA_TAGS ICBM__IM_DATA_TAGS_IM_CAPABILITIES])
|-
| u16
| icbmTlvs&#91;0&#93;.imData&#91;0&#93;.len
| 1
|-
| u08
| icbmTlvs&#91;0&#93;.imData&#91;0&#93;.value
| 1
|-
| u16
| icbmTlvs&#91;0&#93;.imData&#91;1&#93;.tag
|
0x0101 ([Protocols/OSCAR/Foodgroups/ICBM#TLV_Class:_ICBM_IM_DATA_TAGS ICBM__IM_DATA_TAGS_IM_TEXT])
|-
| u16
| icbmTlvs&#91;0&#93;.imData&#91;1&#93;.len
| 6
|-
| u16
| icbmTlvs&#91;0&#93;.imData&#91;1&#93;.encoding
|
0 ([Protocols/OSCAR/Foodgroups/ICBM#Class:_ICBM_IM_ENCODING ICBM__IM_SECTION_ENCODINGS_ASCII])
|-
| u16
| icbmTlvs&#91;0&#93;.imData&#91;1&#93;.language
| 0
|-
| u08
| icbmTlvs&#91;0&#93;.imData&#91;1&#93;.data
| 'Hi'
|}


[[Category:Stub]]
[[Category:Stub]]
Line 84: Line 669:
[[Category:AIM]]
[[Category:AIM]]
[[Category:Protocols/OSCAR]]
[[Category:Protocols/OSCAR]]
[[Category:Protocols/OSCAR/SNACs]]
[[Category:Protocols/OSCAR/Tutorials]]
[[Category:Work_In_Progress]]
[[Category:Work_In_Progress]]

Latest revision as of 03:23, 27 March 2020

OSCAR Protocol
IntroductionTermsClients
Basic
DatatypesFLAPSNACTLV
UUIDsErrorsTool IDs
Host Interaction
Rate LimitsMigrationMessages
Other Services
ADMINADVERTALERT
BARTBOSBUCPCHAT
CHAT_NAV
Tutorials
Sign OnBARTRendezvous
ICBMLocateBuddies
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'