Protocols/OSCAR/SNAC/ICBM CLIENT EVENT

From NINA Wiki
Jump to navigation Jump to search
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)
ID Origin Name Foodgroup Service Status Version
0x0004, 0x0014 Any ICBM__CLIENT_EVENT Unspecified BOS Active 1.25

This SNAC is sent as a control message, sent by a client to inform the recipient of an event, or by the host informing of an event.

At this time the only events defined are NONE, TYPED, and TYPING. The client should send events only after receiving a message that indicates events are desired. This is another SNAC that is both sent and received by the client.

SNAC Header

Foodgroup uint16 (word) 00 04
Subgroup uint16 (word) 00 14
Flags uint16 (word) 00 00
Request ID uint32 (dword) 00 00 00 00

SNAC Data

WinAIM5 and MacAIM support a sort of mini typing notification (MTN) that does not require a direct connection. Basically, when you begin typing something you send a "begin typing" message, then a few seconds later you send a "text has been typed" message, then after you actually send the message, you send a "no more text has been typed" message. You also send the "no more text has been typed" message if you delete all the stuff you've typed.

Remote clients know that your client supports MTN because the server appends an empty type 0x000b TLV to all outgoing IMs. You tell the server you want this TLV appended when you send the 0x0004/0x0002 SNAC. Flags should be 0x0000 000b.

Length Description
8 bytes Unknown (all 0s)
2 bytes Unknown (0x0001). I'm guessing this means this contains data pertaining to mini typing notification.
1 byte Length L of the follow
L bytes The screen name of the person who sent this ICBM.
2 bytes

The type of typing notification message.

  • 0x0000 - Typing finished
  • 0x0001 - Text typed
  • 0x0002 - Typing begun
Name Type Notes
cookie ICBM Cookie Opaque data generated by conversation initiator and used to link up the conversation and errors
channel uint16 (word) [Class: ICBM__CHANNELS] Channel the message is on
username string08 Destination username when sending and the source username when received
event uint16 (word) [Class: ICBM__EVENTS] What event is happening

Class: ICBM__EVENTS

These are the codes used in the CLIENT_EVENT SNAC.

Name Value Notes
ICBM__EVENT_NONE 0x00 Default state; only sent if the user was typing but erased the message
ICBM__EVENT_TYPED 0x01 Indicates that the user was typing but has stopped for at least 2 seconds
ICBM__EVENT_TYPING 0x02 Indicates the message is being actively composed; only send once when switching to this state, do NOT send for every character
ICBM__EVENT_RESERVED 0x03 Reserved
ICBM__EVENT_CLOSED 0x0F Indicates that the user closed the IM window; can be an issue in multiple instance environments

From Aleksandr Shutko: SNAC(04,14) ICBM__CLIENT_EVENT


This snac used by client and server for mini typing notification (MTN). Basically, when you begin typing something you send a "typing begun" message, then a few seconds later you send a "text typed" message, then after you actually send the message, you send a "no more text has been typed" message. You also send the "typing finished" message if you delete all the stuff you've typed.

Remote clients know that your client supports MTN because the server appends an empty type 0x000b TLV to all outgoing IMs. You tell the server you want this TLV appended when you send the SNAC(04,02). Just set message flags bit4=1. Send and receive SNACs has the same type=0x14. Here is the known notification types list:

0x0000 - typing finished sign
0x0001 - text typed sign
0x0002 - typing begun sign

 00 04   word   SNAC family
 00 14   word   SNAC subtype
 00 00   word   SNAC flags
 xx xx xx xx   dword   SNAC request-id
 00 00 00 00
 00 00 00 00
  qword   notification-id cookie
 xx xx   word   notification channel
 xx   byte   screenname string length
 xx ..   string   screenname string
 xx xx   word   notification type (see above)


Example SNAC dump with flap header:


  2A 02 38 C2 00 1E 00 04 00 14 00 00 00 00 00 14 *.8.............
  00 00 00 00 00 00 00 00 00 01 07 36 32 31 38 38 ...........62188
  39 35 00 02                                     95..



ICBM SNACs

SNAC List
Subgroup Origin Name
0x0001 Any ICBM__ERR
This is the error SNAC for the ICBM foodgroup.
0x0002 Client ICBM__ADD_PARAMETERS
This SNAC is typically sent prior to sending the OSERVICE__CLIENT_ONLINE so that the host is properly initialized with the clients' preferences.
0x0003 Client ICBM__DEL_PARAMETERS
These are the delete all parameters for a given channel.
0x0004 Client ICBM__PARAMETER_QUERY
This SNAC requests ICBM parameters from the host.
0x0005 Host ICBM__PARAMETER_REPLY
This SNAC is sent by the host in response to a ICBM__PARAMETER_QUERY.
0x0006 Client ICBM__CHANNEL_MSG_TOHOST
This is the basic inter-client message after which the group was named (Inter-Client Basic Messages).
0x0007 Host ICBM__CHANNEL_MSG_TOCLIENT
This is the ICBM__CHANNEL_MSG_TOHOST after it has been reformatted by the host and sent to the destination client.
0x0008 Client ICBM__EVIL_REQUEST
This requests that the specified user is sent an EVIL notification.
0x0009 Host ICBM__EVIL_REPLY
The reply tells the requester, the sender of an ICBM__EVIL_REQUEST SNAC, how much EVIL, if any, was applied to the recipient.
0x000A Host ICBM__MISSED_CALLS
When the host is unable to send one or more messages to the client, the host sends this SNAC to the client to let it know that it missed some messages ("calls").
0x000B Any ICBM__CLIENT_ERR
This error notice is one of the few SNACs that can be sent to the host and received by a client.
0x000C Host ICBM__HOST_ACK
This SNAC is sent by the host upon receipt of any ICBM__CHANNEL_MSG_TOHOST which includes the optional ICBM__TLV_TAGS_REQUEST_HOST_ACK TLV.
0x000D NCD ICBM__SIN_STORED
This is not currently documented. Want to contribute?
0x000E NCD ICBM__SIN_LIST_QUERY
This is not currently documented. Want to contribute?
0x000F NCD ICBM__SIN_LIST_REPLY
This is not currently documented. Want to contribute?
0x0010 Client ICBM__SIN_RETRIEVE
This requests ICBM__CHANNEL_MSG_TOCLIENT messages be generated for each of the stored ICBMs. Any message retrieved is deleted.
0x0011 NCD ICBM__SIN_DELETE
This is not currently documented. Want to contribute?
0x0012 NCD ICBM__NOTIFY_REQUEST
This is not currently documented. Want to contribute?
0x0013 NCD ICBM__NOTIFY_REPLY
This is not currently documented. Want to contribute?
0x0014 Any ICBM__CLIENT_EVENT
This SNAC is sent as a control message, sent by a client to inform the recipient of an event, or by the host informing of an event.
0x0017 Host ICBM__SIN_REPLY
The host successfully processed the request to retrieve all the offline messages.